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似乎支持序列化