由于从JBoss的4.0.4到5.1升级的一部分,我想获得一个WAR部署后的EAR成功部署。 JBoss的5.x中不支持 PrefixDeploymentSorter 像4.x的那样,这意味着我必须使用<取决于>在WAR的JBoss-web.xml中。

看来我可以不依赖于EAR 本身,所以我挑的最后部署EJB来代替。此EJB提供JNDI条目的WAR需求。

这里的EJB作为它部署在WAR不存在从deploy目录:

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>

我的问题是:战争开始后立即部署“STARTED EJB:”,即前MyFacadeBean势必JNDI,这会导致豆部署到失败:

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)

WAR完成其部署之后,MyFacade愉快(愚弄?)继续其部署和结合JNDI条目。

在EAR部署后,如果我的热部署WAR,一切都按预期工作。

我甚至认为取决于在EAR虚设EJB,以及使用<模块阶>严格在JBoss中-app.xml中,迫使它加载作为最后的模块。但很可惜,的JBoss 5.x中不支持任何。卫生署!

有一个依赖于JNDI条目本身呢?是解决这个还有别的办法吗?

有帮助吗?

解决方案

下面是你如何可以在JBoss 5.1.x.实现这一目标

首先,添加一个名为aliases.txt文件到您的耳朵META-INF目录。这个文件应该只包含一个任意名称/标识符您的EAR一行。举例来说,如果你有我 - ear.ear,你META-INF/aliases.txt文件可能包含“我的耳朵”。它只是需要的东西,也不由部署在同一台服务器上的其他应用程序中声明的任何其他别名冲突。

接下来,jboss-dependency.xml文件添加到您的WAR的META-INF目录,包含以下(subsituting“我的耳朵”为你上面创建的别名):

<dependency xmlns="urn:jboss:dependency:1.0">
  <item whenRequired="Real" dependentState="Create">my-ear</item>
</dependency>

这将确保EAR在WAR之前展开。

此外,如果您尝试部署未经EAR存在的WAR,JBoss会记录一个明确的部署错误信息,告诉你有关丢失的依赖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top