日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何开发EJB?

發布時間:2024/8/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何开发EJB? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EJB開發分為兩部分:開發EJB和使用EJB

本文示例將使用EJB2.0 :1.工作需要;2.EJB3.0相對于2.0變動不大(添加注解,JPA替換實體Bean實現)

開發EJB的流程

以開發stateless SessionBean為栗.

1.編寫SessionBean。需要實現SessionBean接口,并額外添加ejbCreate()方法

2.編寫Home接口和Remote組件接口。

Remote接口擴展EJBObject接口,添加SessionBean中方法,并拋出異常RemoteException。

Home接口擴展EJBHome接口,添加create()方法,返回Remote組件,拋出異常CreateException、RemoteException。

3.編寫ejb-jar.xml

4.打包

5.部署到J2EE服務器

舉個栗子

首先你需要個javax.ejb-api.jar

軟件環境

開發環境:intellij idea 13

服務器:glassfish 4

目錄結構


package com.ejb.bean.sessionbean;import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import java.rmi.RemoteException;/*** Created by Tony.Sun on 7/17/2014.*/ public class GreetingBean implements SessionBean{@Overridepublic void setSessionContext(SessionContext sessionContext) throws EJBException, RemoteException {System.out.println("setSessionContext");}@Overridepublic void ejbRemove() throws EJBException, RemoteException {System.out.println("ejbRemove");}@Overridepublic void ejbActivate() throws EJBException, RemoteException {System.out.println("ejbActivate");}@Overridepublic void ejbPassivate() throws EJBException, RemoteException {System.out.println("ejbPassivate");}/*** 額外添加的ejbCreate方法*/public void ejbCreate(){System.out.println("ejbCreate");}/*** 問候,沒人規定每次都要say hello啊* @return*/public String greet(){return "f u c k y o u,EJB world!";} }

package com.ejb.bean.sessionbean;import javax.ejb.EJBObject; import java.rmi.RemoteException;/*** Created by Tony.Sun on 7/17/2014.*/ public interface GreetingRemote extends EJBObject {String greet() throws RemoteException; }
package com.ejb.bean.sessionbean;import javax.ejb.CreateException; import javax.ejb.EJBHome; import java.rmi.RemoteException;/*** Created by Tony.Sun on 7/17/2014.*/ public interface GreetingHome extends EJBHome {GreetingRemote create() throws CreateException,RemoteException; }
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"version="3.1"><enterprise-beans><session><ejb-name>greetingbean</ejb-name><home>com.ejb.bean.sessionbean.GreetingHome</home><remote>com.ejb.bean.sessionbean.GreetingRemote</remote><ejb-class>com.ejb.bean.sessionbean.GreetingBean</ejb-class><session-type>Stateless</session-type><transaction-type>Bean</transaction-type></session></enterprise-beans> </ejb-jar>
打包什么的太費事直接用IDE部署了,(我們只是代碼的搬運工 ^ _ ^)


使用EJB

Bean已經部署在服務器上了,現在要調用Bean,具體步驟如下

1.引用glassfish/lib下gf-client.jar

2.獲取JNDI上下文服務 new InitContext()。在服務器上使用時InitContext不需要參數也可以成功運行,獨立程序使用時需要傳遞參數(詳見栗子)。

3.通過上下文服務查找Bean服務

4.使用PortableRemoteObject進行窄化,并轉換成Home對象

5.使用Home接口對象create() Remote服務接口

6.通過服務接口調用相關方法

來個栗子

package com.ejb.bean.sessionbean;import javax.ejb.CreateException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; import java.rmi.RemoteException; import java.util.Properties;/*** Created by Tony.Sun on 7/17/2014.*/ public class GreetingTest {public static void main(String[] args) throws NamingException, RemoteException, CreateException {Properties props = new Properties();//這些參數根據不同服務器設置不同,具體視服務器而定props.put("java.naming.factory.initial", "com.sun.enterprise.naming.impl.SerialInitContextFactory");props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");props.put("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");//服務器ipprops.put("org.omg.CORBA.ORBInitialHost", "localhost");//EJB服務端口props.put("org.omg.CORBA.ORBInitialPort", "3700");//獲取JNDI上下文服務 new InitContext()。//在服務器上使用時InitContext不需要參數也可以成功運行,獨立程序使用時需要傳遞參數(詳見栗子)。Context ctx = new InitialContext(props);//通過上下文服務查找Bean服務Object obj = ctx.lookup("java:global/demo_ejb_exploded/greetingbean");//使用PortableRemoteObject進行窄化,并轉換成Home對象GreetingHome home = (GreetingHome) PortableRemoteObject.narrow(obj,GreetingHome.class);//使用Home接口對象create() Remote服務接口GreetingRemote remote = home.create();//通過服務接口調用相關方法String greet = remote.greet();System.out.print(greet);} }


運行結果

f u c k y o u,EJB world! Process finished with exit code 0


補充:

關于JNDI命名服務語法,這一點比較坑,不同服務器廠商提供的都不一樣,以glassfish為栗,JNDI語法為

java:global/[應用名稱]/模塊名稱/Bean名稱

關于應用名稱什么時候使用:當你的Bean.jar被打包在其他war包中的時候使用

關于如何確定模塊名稱:localhost:4848下Applications菜單下查看

 

總結

以上是生活随笔為你收集整理的如何开发EJB?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。