glassfish-ejb-jar.xml / ejb-jar.xml RMI未记录的必需参数

时间:2015-07-22 18:21:32

标签: java-ee glassfish rmi

我已经成功配置了两个Java EE 6应用程序,通过遵循this documentation中的简单注释,通过RMI-IIOP相互通信。一个应用程序在另一个应用程序中调用远程EJB来获取当前时间,反之亦然。

一切似乎都在起作用,但我对glassfish-ejb-jar.xml的一个要素感到困惑。给我一点时间解释一下。我有两个应用程序,Alpha和Beta。以下是Beta的部署描述符:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
 <enterprise-beans>
   <ejb>
     <ejb-name>BetaLocalSessionBean</ejb-name>
     <ejb-ref>
        <ejb-ref-name>ejb/alphaSessionBean</ejb-ref-name>
        <jndi-name>corbaname:iiop:alphaServerUrl:11637#java:global/AlphaApplication/AlphaApplication-ejb/AlphaSessionBean</jndi-name>
       </ejb-ref>
   </ejb>
 </enterprise-beans>
</glassfish-ejb-jar>

BetaLocalSessionBean是一个本地无状态会话Bean,我注入远程AlphaSessionBean来获取时间。我的困惑是:如果我删除 <ejb-name>元素,为什么会出现以下异常?

Warning: DPL8007: Unsupported deployment descriptors element jndi-name value corbaname:iiop:alpha:3700#java:global/AlphaApplication/AlphaApplication-ejb/AlphaSessionBean
Severe: Exception while deploying the app [BetaApplication]
Severe: java.lang.NullPointerException
    at com.sun.enterprise.deployment.node.runtime.EjbNode.endElement(EjbNode.java:202)
    at com.sun.enterprise.deployment.node.SaxParserHandler.endElement(SaxParserHandler.java:481)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)
...

Severe: Exception while deploying the app [BetaApplication]

为什么<ejb-name>元素是强制性的?我在上面链接的文档中没有提到它。我放在哪个bean名称有关系吗?我已经确认我可以将AlphaSessionBean注入到除BetaLocalSessionBean以外的其他bean中,那么这个元素的意义是什么?

版本:

  • Glassfish 3.1.2.2,Java EE 6。
  • Java 1.8.0_45-b15
  • NetBeans IDE 8.0.2

文档:

1 个答案:

答案 0 :(得分:0)

我认为你得到的错误是合乎逻辑的,因为这是应用服务器知道在哪里注入ref的唯一方法,即alphasessionbean。

该名称也必须是您创建的EJB bean的名称,除非您在@Stateless或@Stateful注释上配置了name属性,在这种情况下ref将是该名称。