ejb开发实例
?剛開始學習ejb,依據基本原理編寫一個ejb小例子,有想學習ejb的歡迎大家一塊學習指導!
my QQ
243067750
?
1 新建ejb項目
?? 1、Remote(或Local)接口
package com.terry.ejbsample;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface Hello extends EJBObject {
?
?public String getHello(String s) throws RemoteException;//遠程調用的接口方法
}
?? 2、Home(或LocalHome)接口
package com.terry.ejbsample;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface HelloHome extends EJBHome {
?
?Hello create() throws RemoteException, CreateException;
?
}
?? 3、企業Bean ,具體的業務實現類
package com.terry.ejbsample;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class HelloBean implements SessionBean {
?public String getHello(String s) {???? //具體的業務實現方法
??return s;
??
?}
?public void ejbCreate() throws CreateException {
??System.out.println("Bean created");
?}
?public void ejbRemove() {
?}
?public void ejbActivate() {
?}
?public void ejbPassivate() {
?}
?public void setSessionContext(SessionContext ctx) {
?}
}
編寫配置文件(放在ejb項目的meta-inf文件夾下面)
ejb-jar.xml
<?xml version="1.0"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
??????????????? http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
?version="2.1">
?<enterprise-beans>
??<session>
???<ejb-name>HelloName</ejb-name>??????????????????????????????? ?//ejb名稱
???<home>com.terry.ejbsample.HelloHome</home>????????? ?//ejb本地接口類
???<remote>com.terry.ejbsample.Hello</remote>?????????????? //ejb遠程接口類
???<ejb-class>com.terry.ejbsample.HelloBean</ejb-class>?? //ejb具體業務實現類
???<session-type>Stateful</session-type>
???<transaction-type>Container</transaction-type>
??</session>
?</enterprise-beans>
</ejb-jar>
配置文件jboss.xml
?
<?xml version="1.0"?>
<jboss>
? <enterprise-beans>
??? <session>
??????? <ejb-name>HelloName</ejb-name>????????????//ejb名稱
??????? <jndi-name>HelloHome</jndi-name>??????????//JNDI名稱
??? </session>
? </enterprise-beans>
</jboss>
打包ejb項目,使用myeclipse打包。生成ejb.jar
編寫測試項目:
? 新建web項目testEJB
?? 測試項目中加入jar。
???? 1 首先把ejb包加入。
原因是:
???
???
? 在生成ejb后應該已經建立了本地接口和遠程接口,在部署ejb時websphere或
其他ejb容器會根據這兩個接口自動生成本地接口類和遠程接口類。??
???
? 所以你不用實現這兩個接口類,但必須在開發客戶端的時候將這兩個接口的類
文件放到你的客戶端工程中。??
???
? 客戶端申請本地接口時,web容器根據自己生成的本地接口類返回一個類實例
,本地接口類實現了本地接口。通過本地接口,你可以建立遠程接口的實例,通
過本地接口的create方法,此時web容器會根據自己生成的遠程接口類返回一個
類實例,遠程接口類實現了遠程接口。??
???
? 而本地接口類和遠程接口類的實例其實是存在于服務器中,你的客戶端只是遠
程調用這些類的商業方法
?? 2 把jboss下面的client里面的jar包全部引用到測試項目的lib下面。
?
?
?
?編寫測試類
package com.lovo.servlet;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import com.terry.ejbsample.Hello;
import com.terry.ejbsample.HelloHome;
public class HelloClient {
?
?public static void main(String[] args)
?? {
?
??????? try {
???java.util.Properties p = new
java.util.Properties();
???p.put(Context.INITIAL_CONTEXT_FACTORY,
??????
"org.jnp.interfaces.NamingContextFactory");
???p.put(Context.URL_PKG_PREFIXES,
"jboss.naming:org.jnp.interfaces");
???p.put(Context.PROVIDER_URL, "localhost:1099");
???
???Context jndiContext = new InitialContext(p);
???Object ref = jndiContext.lookup("HelloHome");
???HelloHome home = (HelloHome)
PortableRemoteObject.narrow(ref, HelloHome.class);
???Hello?hh = home.create();
???
???String? s = hh .getHello("springking你真棒");
???? System.out.println("ejb " + s);
???
??} catch (ClassCastException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (RemoteException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (NamingException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (CreateException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??
?
?? }
}
?
總結
- 上一篇: 中兴网络设备交换机路由器查看所有端口光功
- 下一篇: 用计算机制作flash动画教案,最新最完