ejb开发实例
?剛開(kāi)始學(xué)習(xí)ejb,依據(jù)基本原理編寫一個(gè)ejb小例子,有想學(xué)習(xí)ejb的歡迎大家一塊學(xué)習(xí)指導(dǎo)!
my QQ
243067750
?
1 新建ejb項(xiàng)目
?? 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;//遠(yuǎn)程調(diào)用的接口方法
}
?? 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、企業(yè)Bean ,具體的業(yè)務(wù)實(shí)現(xiàn)類
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) {???? //具體的業(yè)務(wù)實(shí)現(xiàn)方法
??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項(xiàng)目的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遠(yuǎn)程接口類
???<ejb-class>com.terry.ejbsample.HelloBean</ejb-class>?? //ejb具體業(yè)務(wù)實(shí)現(xiàn)類
???<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項(xiàng)目,使用myeclipse打包。生成ejb.jar
編寫測(cè)試項(xiàng)目:
? 新建web項(xiàng)目testEJB
?? 測(cè)試項(xiàng)目中加入jar。
???? 1 首先把ejb包加入。
原因是:
???
???
? 在生成ejb后應(yīng)該已經(jīng)建立了本地接口和遠(yuǎn)程接口,在部署ejb時(shí)websphere或
其他ejb容器會(huì)根據(jù)這兩個(gè)接口自動(dòng)生成本地接口類和遠(yuǎn)程接口類。??
???
? 所以你不用實(shí)現(xiàn)這兩個(gè)接口類,但必須在開(kāi)發(fā)客戶端的時(shí)候?qū)⑦@兩個(gè)接口的類
文件放到你的客戶端工程中。??
???
? 客戶端申請(qǐng)本地接口時(shí),web容器根據(jù)自己生成的本地接口類返回一個(gè)類實(shí)例
,本地接口類實(shí)現(xiàn)了本地接口。通過(guò)本地接口,你可以建立遠(yuǎn)程接口的實(shí)例,通
過(guò)本地接口的create方法,此時(shí)web容器會(huì)根據(jù)自己生成的遠(yuǎn)程接口類返回一個(gè)
類實(shí)例,遠(yuǎn)程接口類實(shí)現(xiàn)了遠(yuǎn)程接口。??
???
? 而本地接口類和遠(yuǎn)程接口類的實(shí)例其實(shí)是存在于服務(wù)器中,你的客戶端只是遠(yuǎn)
程調(diào)用這些類的商業(yè)方法
?? 2 把jboss下面的client里面的jar包全部引用到測(cè)試項(xiàng)目的lib下面。
?
?
?
?編寫測(cè)試類
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();
??}
??
?
?? }
}
?
總結(jié)
- 上一篇: 中兴网络设备交换机路由器查看所有端口光功
- 下一篇: 用计算机制作flash动画教案,最新最完