Posted on 2007-12-18 17:47
G_G 閱讀(1102)
評論(0) 編輯 收藏 所屬分類:
EJB
學習了Rmic后 ,聯系自己hbm的一些想法。并在實際開發中做到分離持久層.
在次,特留記錄。使用不當望大家踴躍拍磚!
EJB原理學習_RMIC效果先上 (你的組員,不需要數據庫,不需要hbm,不需要配置文件)
客戶端:在服務器開啟,并client端內classpath 包含有 *_Stub.class 和 hbmBean等類(底下有ant簡化部署) 在內網中隨便那臺電腦都可以中運行,那臺開發電腦可以沒有hbm,可以沒有數據庫
package?Client;
import?java.rmi.Naming;
import?dao.ILiuDao;
import?dao.LiuDaoRemote;
import?dao.imp.DaoFactory;
public?class?Client?{
????public?static?void?main(String[]?args)?{
????????try?{
????????????ILiuDao?hello?=?(ILiuDao)Naming.lookup("rmi://192.168.1.109:1099/RMI/LiuDaoRemote");
????????????System.out.println(hello.getLiu("1").getName());
??????}?catch(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
}
服務器端:
dao需求接口? 其他隊員提供給管理持久層的隊員
package?dao;
import?java.rmi.Remote;
import?java.rmi.RemoteException;
import?hibernate.Customer;
import?hibernate.Liu;
public?interface?ILiuDao?extends?Remote{
????public?abstract?Liu?getLiu(String?id)?throws?RemoteException;
}
dao實現
package?dao;
import?java.rmi.Naming;
import?java.rmi.RemoteException;
import?java.rmi.server.UnicastRemoteObject;
import?org.hibernate.Query;
import?org.hibernate.Session;
import?hbmConfig.HibernateSessionFactory;
import?hibernate.Customer;
import?hibernate.Liu;
public?class?LiuDaoRemote?extends?UnicastRemoteObject?implements?ILiuDao?{
????public?LiuDaoRemote()?throws?RemoteException?{
????????super();
????}
????public?Liu?getLiu(String?id)throws?RemoteException{
????????Liu?ll?=??null?;
????????Session?session?=?HibernateSessionFactory.currentSession();
????????Query?qu?=?session.createQuery("from?Liu?lt?where?lt.id=:id");
????????ll?=?(Liu)qu.setString("id",id).uniqueResult();
????????HibernateSessionFactory.closeSession();
????????return?ll?;
????}
}
使用ant給客戶端提供 jar
????<target?name?=?"rmic">
????????<rmic?base="${class}"?includes="${rmic.package}/**/*Remote.class"/>
??? ??? <!-- 兩個jar 包 ,給客戶端提供的
???? ??? ??? 1. rmic帶有約定的 到入 *_Stub.class并除dao實現類(*Remote.class)打包
??? ?? ?? ?? 2. hbmBean 道入 hbmjava
? ? ? ?? -->
????????<jar?destfile="${rh.dir}/rmic.jar">
????????????<fileset?dir="${class}">
??????????????<include?name="${rmic.package}/**/*.class"?/>
??????????????<exclude?name="${rmic.package}/**/*Remote.class"/>
????????????</fileset>
????????</jar>
????????<jar?destfile="${rh.dir}/hbmBean.jar"?>
????????????<fileset?dir="${class}">
??????????????<include?name="${hbm.bean.package}/**/*.class"?/>
????????????</fileset>
????????</jar>????
????</target>
開啟服務器:
package?test;
import?java.rmi.Naming;
import?java.rmi.RMISecurityManager;
import?java.rmi.RemoteException;
import?java.rmi.registry.LocateRegistry;
import?sun.awt.AppContext;
import?dao.DaoFactoryRemote;
import?dao.ILiuDao;
import?dao.LiuDaoRemote;
import?hibernate.Liu;
public?class?StartMain?{
????
????public?static?void?main(String[]?args)?throws?Exception?{
???????????try?{?
????????????????System.setProperty("java.security.policy",?"rmi.policy");??
????????????????LocateRegistry.createRegistry(1099);??
????????????????Naming.rebind("RMI/LiuDaoRemote",?new?LiuDaoRemote());?
????????????}?catch(Exception?e)?{
????????????????e.printStackTrace();
????????????}
????}
}