技术开发 频道

RMI进阶篇:实现Multi-Tier框架

1.2.2  执行类中核心函数

//Create basic data source object BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql://localhost/phome"); bds.setUsername("root"); bds.setPassword(""); //Add to map m_infoMap.put("MySQL.DataSource", bds); } //------------------------------------------------------------------------- //Get connection by name public BasicDataSource getDataSource(String __name) { return ((BasicDataSource)m_infoMap.get(__name)/**/); }

创建MySQL的DataSource对象,并按照名称存储到HashMap中,远程接口实现函数中通过DataSource名称来获取DataSource对象。

1.2.3  客户端的调用代码

String urlPrefix = "rmi://192.168.1.147:1099/"; //Look up the remote object by URL Application app = (Application)Naming.lookup(urlPrefix + "MultiTier.Application.Server"); //Invoke the remote interface BasicDataSource ds = app.getDataSource(__name); …… //Deal with the connection doConnection(ds.getConnection() );

通过DataSource名称来获取远程DataSouce对象,继而申请Connection对象。

上述代码似乎没有什么问题,且远程对象绑定也是正常的。但是当客户端调用执行时,提示BasicDataSource不支持序列化的错误,从而导致远程参数整理出错。所以这里才明白BasicDataSource不支持序列化,所以无法实现远程参数拷贝。

1.3  实践过程2──以Connection作为远程接口函数返回值

既然DataSouce继承的类不支持序列化,那么Connection总该支持序列化了吧?


图4:Connection似乎支持序列化

0
相关文章