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!";}}
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();}}