读书人

GlassFish中Application Client(应用

发布时间: 2012-10-29 10:03:53 作者: rapoo

GlassFish中Application Client(应用程序客户端)中使用@EJB
最近在研究EJB,刚开始使用的是JBoss4.2。JBoss可以满足开发EJB中的绝大部分需求。但是JBoss4.2不支持@EJB注释在 Servelt中的使用。因为JBoss并不是JavaEE5.0规范的完全实现产品。出于好奇,将服务器更换为GlassFish2.1。

网上有些关于如何在GlassFish的Application Client(应用程序客户端)中使用@EJB的文章,但是都是简单的几句:

“appclient -client ejbClient.jar

............................”

(这在《Beginning EJB.3.Application.Development》一书中也是这样,很简略。)

在研究了2天后,终于可以在Application Client(应用程序客户端)中使用@EJB注解了,要求如下:

第一步:EJB模块部署到GlassFish中

第二步:将客户端打包成jar(这是重点)

jar文件必备的要点如下(XXX是您的EJB独立客户端的路径):

1、jar文件必须有Entry Point(即入口),否则:“无法确定XXX中JavaEE模块类型”的错误。

2、jar文件中不能含有EJB模块的实现,否则:“归档文件XXX似乎有效,但应为应用客户机或企业应用程序”。

第三步:在%GlassFish%\bin\下,调用 appclient -client XXX.jar package app.service;import javax.ejb.Remote;@Remotepublic interface HelloWorld {public String sayHello();}

package app.service.impl;import javax.ejb.Stateless;import app.service.HelloWorld;@Stateless(mappedName="ejb/HelloWorld")public class HelloWorldBean implements HelloWorld {@Overridepublic String sayHello() {return "你好,GlassFish!";}}  


然后建立一个JavaSE的客户端:
package app.test;import javax.ejb.EJB;import app.service.HelloWorld;public class TestEJB {@EJB(mappedName="ejb/HelloWorld")static HelloWorld hello;void doTest(){System.out.println(hello.sayHello());}public static void main(String[] agrs){new TestEJB().doTest();}}


注意: static关键字不能缺少,否则会报错!@EJB的第2中形式 @EJB(name=”target” , beanInterface= XXX.class),如何在独立客户端中使用,尚不明确!


相信,这个客户端在JBoss中是无法工作的。但是将TestEJB打成jar包后(如何打包请看原帖),利用GlassFish提供的工具appclient.bat,独立的客户端就可以利用JavaEE提供的服务了!

至于,这个工具有多大的用处,目前尚不明了。本文只是说明一个常见的用法!

读书人网 >软件架构设计

热点推荐