一个简单的RMI例子不能运行,请指点指点(100分)

  • 主题发起人 主题发起人 coobo
  • 开始时间 开始时间
我的意思是把数据库所在服务器作为主动方,接受查询请求,然后将查询结果返回给客户端。
JDBC可以从客户端向数据库端建立连接,进行查询,但这样数据库端是被动的,没办法做逻辑和安全上的管理。
所以我想用RMI来实现,但是失败了。
另外一个办法是:在数据库端用JDBC写回到客户端,但是这样太慢,很难接受。
 
我明白了一些:
RMI 只能(必须)返回可序列化(serializable)的类,而与数据库操作有关的大部分都是非可序列化的
我看了,AstractTableModel,和JTable都是serializable,这样,在服务器端所得的RS数据集可以在服务器端就生成table,
然后传会此table,但我试了,也没成功返回,在写数据流时发出异常,不知道应该怎么写;
于是,我把数据写到Vector中,返回它,不过这样可能要加一些方法,如返回字段类型。。。
还有一种方法:用JDBC的第三类(型)驱动程序,直接与数据库连,返回的RS数据集也需要自己返回,好像。(我没细看)
我用Vector也遇到问题(怪问题):
我第一次运行(令我很兴奋)数据显示在Applet的table上,可以后就不好用了:
Vector rows = rmiTableObj.getVector(querySQL) ;
Vector row1 = (Vector)rows.elementAt(0) ;
Object ob = row1.elementAt(0) ;
可ob 缺没有值?为什么?为什么第一次好用?
 
我的程序在JB中运行通过了,数据查询正确。
但是:1、在命令行下运行异常;2、在IE浏览器中不能加载applet ??
我的设置:classpath = ....c:/tomcat/webapps/RMI/class/
policy文件为 :C:/R.policy
运行过程
c:/start rmiregistry
c:/java -Djava.rmi.server.codebase=http://zhao/RMI/class/ -Djava.security.policy=
c:/R.policy cn.com.cbl.tableRMI.TableRMIImpl (注册成功)
启动tomcat
c:/appletviewer http://zhao:8080/RMI/applettable.html
1、用appletviewer启动后,当调用远程方法查询数据库时,异常:
server 报:No suitable driver
applet 报:空指针(这是由于远程方法返回了null:--> rows = rmiTableObj.getVector(querySQL);
)
2、如果用浏览器启动,如:http://zhao:808/RMI/applettable.html
则报:
error:java.lang.UnsatisfiedLinkError:java/security/AccessController.doPrivileged possible cause....
3、如果用JB启动server(TableRMIImpl.class),而在命令行用appletviewer 启动前端,则正常,但浏览器中
仍不好用
用plug-in运行亦同
我用的是jdk1.3,他就支持rmi吧,还用j2ee吗?
无法解决,请求帮助。
thanks.
 
IE不支持RMI???如何解决?
 
哦。。。
大侠们还在“休假”呀。
eguy:帮帮忙吧
按理说我用的是jdbc.odbc桥,不会找不到driver呀。
Class.forName(sDBDriver);
这句没报异常(sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver")
应是这句之后报的No suitable driver(sConnStr = "jdbc:odbc:mis")
conn = DriverManager.getConnection(sConnStr,userName,passWord);
 
sorry,coobo:
这几天实在忙,正忙找工作。没有时间回答问题。sorry.
就你的代码来看,我也觉得不应该出错呀。
仔细看看你的连接URL。
 
我放弃了。:(
谢谢各位了。
 
后退
顶部