preface:
最近在研究EJB 起初用的是JBoss+MyEclipse,后来使用NetBeans开发,转而使用GlassFish.选用NetBeans和GlassFish主要是因为希望得到"一站式"的结局方案,防止大量时间浪费在环境配置上……最终的环境配置如下:NetBeans6.5 GlassFishv2ur2 MySQL 5.1 JDK1.6U12
Q1:使用NetBeans为Jboss服务器创建应用程序客户端的时候不能使用@EJB注入SessionBean?
A:NetBeans中为Jboss建立的应用程序客户端只支持J2EE1.4,不支持Annotation,所以无法使用依赖注入。现在发现的唯一可以使用依赖注入应用程序客户端的情况是:将GlassFish应用程序客户端打包到企业应用程序,并设为启动,然后运行企业应用程序
具体参见:http://www.netbeans.org/kb/61/javaee/entappclient_zh_CN.html
Q2:NetBeans无法识别Jboss5上部署的EJB模块,并且手动部署的时候也会出错
A:NetBeans6.5+JBoss5.0GA+JDK1.6会出现以上情况。如果使用MyEclipse6.5管理JBoss则没有问题.NetBeans于Jboss4.2.2GA集成没有问题。
Q3:同样的EJB部署到JBoss和GlassFish上的时候Jndi名称相差很远
A:两个应用服务器的命名策略不一样。比如一个SessionBean使用如下的注释
@Stateless(name="MyEJB" mappedName="MyEJB222")
如果在Jboss上部署,EJB的Jndi名称为:MyEJB/remote或者MyEJB/local
如果在GlassFish上部署,EJB的Jndi名称则为:MyEJB222
在编写客户端应用的时候需要特别注意这点(如果您有更好的解决方案,不胜赐教)
建议使用相同的name和mappedName,并在@EJB注入的时候使用beanName属性
Q4:如何在GlassFish中查找具有多个远程接口的EJB
A:使用EJB全局JNDI名称#远程接口名称。比如context.lookup("MyBean#com.ejb.MyBeanRemote1");