Deployment 我可以让战争依赖于JBoss5.1中的JNDI条目吗?

Deployment 我可以让战争依赖于JBoss5.1中的JNDI条目吗?,deployment,jndi,war,jboss5.x,ear,Deployment,Jndi,War,Jboss5.x,Ear,作为从JBoss4.0.4升级到5.1的一部分,我正在尝试在成功部署EAR后部署WAR。JBoss 5.x不像4.x那样支持,这意味着我必须在战争的JBoss-web.xml中使用 似乎是我自己,所以我选择了最后一个部署的EJB。此EJB提供WAR所需的JNDI条目 以下是部署目录中没有WAR时部署的EJB: 2010-03-25 10:47:30,348 INFO [org.jboss.ejb3.session.SessionSpecContainer] (main) Starting jb

作为从JBoss4.0.4升级到5.1的一部分,我正在尝试在成功部署EAR后部署WAR。JBoss 5.x不像4.x那样支持,这意味着我必须在战争的JBoss-web.xml中使用

似乎是我自己,所以我选择了最后一个部署的EJB。此EJB提供WAR所需的JNDI条目

以下是部署目录中没有WAR时部署的EJB:

2010-03-25 10:47:30,348 INFO  [org.jboss.ejb3.session.SessionSpecContainer] (main) Starting jboss.j2ee:ear=my-ear.ear,jar=mypackage-ejb.jar,name=MyFacadeBean,service=EJB3
2010-03-25 10:47:30,350 INFO  [org.jboss.ejb3.EJBContainer] (main) STARTED EJB: my.package.MyFacadeBean ejbName: MyFacadeBean
2010-03-25 10:47:30,371 INFO  [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] (main) Binding the following Entries in Global JNDI:

        my/MyFacade/local - EJB3.x Default Local Business Interface
        my-ear/MyFacadeBean/local-my.package.MyFacade - EJB3.x Local Business Interface
下面是jboss-web.xml中的片段:

<depends>jboss.j2ee:ear=my-ear.ear,jar=mypackage-ejb.jar,name=MyFacadeBean,service=EJB3</depends>
在WAR完成其部署后,MyFacade愉快地(嘲弄地?)继续其部署并绑定JNDI条目

如果我在EAR部署后热部署战争,一切都会按预期进行

我甚至想过依赖EAR中的虚拟EJB,并使用jboss-app.xml中的strict命令将其作为最后一个模块加载。但是,唉,也是这样。啊


有没有办法依赖JNDI条目本身?还有其他方法解决这个问题吗?

以下是如何在JBoss 5.1.x上实现这一点

首先,将名为
aliases.txt
的文件添加到EAR的
META-INF
目录中。此文件应仅包含一行,其中包含EAR的任意名称/标识符。例如,如果您有my-ear.ear,您的
META-INF/aliases.txt
文件可能包含“my-ear”。它只需要与部署在同一服务器上的其他应用程序声明的任何其他别名不冲突

接下来,将
jboss dependency.xml
文件添加到WAR的
META-INF
目录中,其中包含以下内容(替代您在上面创建的别名“my ear”):


我的耳朵
这将确保在战前部署EAR


另外,如果您试图在没有EAR的情况下部署WAR,JBoss将记录一条清晰的部署错误消息,告诉您缺少依赖项。

太棒了,谢谢!我们的大多数客户现在都转向了AS7/EAP6,但我们很高兴知道这一点。
2010-03-25 10:47:39,068 ERROR [my.facade.FacadeFactory] (main) MyFacade not bound
2010-03-25 10:47:39,069 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[my.host.no].[/]] (main) StandardWrapper.Throwable
java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at my.freemarker.servlet.FreemarkerController.setupPojoServiceFactory(FreemarkerController.java:621)
[...]
Caused by: java.lang.RuntimeException: javax.naming.NameNotFoundException: MyFacade not bound
        at my.facade.FacadeFactory.getFacade(FacadeFactory.java:61)
<dependency xmlns="urn:jboss:dependency:1.0">
  <item whenRequired="Real" dependentState="Create">my-ear</item>
</dependency>