EJB客戶端訪問

EJB客戶端訪問
因爲EJB是一個重量級的框架,拿常用的會話EJB來說,本地EJB還不如J2EE的CDI,所以只有遠程EJB纔是EJB的核心內容。遠程EJB的訪問協議有很多種,有HTTP協議、HTTPS協議、netty等等。
要寫一個完整的EJB客戶端,項目中必須有這麼幾個東西:
1 EJB客戶端調用庫
2遠程EJB的客戶端接口
3 配置
4 訪問代碼(這個有點畫蛇添足,哈哈)
一 首先看第一個,EJB調用庫。EJB調用庫,網上有很多,各個廠商都有實現,我選擇的是jboss的實現。其maven項目信息如下:

<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jboss-ejb-client</artifactId>
    <version>2.1.8.Final</version>
    </dependency>

二 遠程EJB的客戶端接口
這就需要遠程EJB寫成接口+實現的方式。如果自己在家裏寫着玩,可以直接把遠程EJB的interface的Java文件拷貝進客戶端項目。但是如果是生產項目,這樣肯定不行,因爲生成項目EJB太多了,靠手動拷貝,費時費力,如果服務端接口有變動的話,拷貝過去的代碼不會跟着變動,這樣就埋下了隱藏的bug。
如果是maven項目,在服務端可以生成EJB客戶端。
服務端的maven配置需要動一動

<plugin>
    <artifactId>maven-ejb-plugin</artifactId>
    <configuration>
        <ejbVersion>3.0</ejbVersion>
        <generateClient>true</generateClient>
    </configuration>
</plugin>

加上這個maven插件,在每次的maven打包之後就會生成客戶端jar。Maven ejb插件會默認把以Bean,CMP,Session結尾的類從客戶端中刪除。
三 配置
在classpath的根目錄下放入這個文件,這個文件是jboss ejb客戶端的默認配置文件
jboss-ejb-client.properties
對於一般的ejb,配置文件寫下面的內容就可以了

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 8081
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

四 客戶端代碼
Ejb客戶端是通過JNDI查找的,使用的是代理模式。
具體的代碼是這個樣子的,就是簡單的jndi查找。

Hashtable<String,String> table = new Hashtable<String, String>();
table.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext initialContext = new InitialContext(table);
HelloService lookup = (HelloService) initialContext.lookup("ejb:/ejb//HelloServiceBean!com.cjxnfs.ejbdemo.HelloService");
String greeting = lookup.greeting();

第一個ejb是協議名,第二個ejb是項目名。格式是什麼呢?
ejb:[EAR名稱]/[jar或者war名稱]/
[顯式bean名稱]/[實現類]![接口完整類名]
如果是空的就可以不寫哈。

發佈了93 篇原創文章 · 獲贊 24 · 訪問量 182萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章