В рамках обновления с 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 отсутствует в каталоге развертывания:
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 начинает развертываться сразу после «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.
Если я развернул WAR-файл после развертывания EAR, все будет работать так, как задумано.
Я даже думал о зависимости от фиктивного EJB-компонента в EAR и использовании strict </ module-order> в jboss-app.xml, чтобы заставить его загружаться как последний модуль. Но, увы, JBoss 5.x также не поддерживает . Doh!
Есть ли способ зависеть от самой записи JNDI? Есть ли другие способы решения этой проблемы?