Frage

Im Rahmen eines Upgrade von JBoss 4.0.4 bis 5.1, Ich versuche, einen Krieg zu deploy zu erhalten, nachdem ein EAR erfolgreich eingesetzt wird. JBoss 5.x nicht unterstützt PrefixDeploymentSorter wie 4.x tat, was bedeutet, dass ich muß Gebrauch in der Jboss-web.xml iST.

Es scheint, ich nicht auf der EAR abhängen selbst, so nehme ich die letzte Stelle eingesetzt EJB. Diese EJB bietet einen JNDI Eintrag, dass der Krieg braucht.

Hier ist der EJB, wie es entfaltet, wenn der Krieg aus dem Verzeichnis deploy fehlt:

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

Und hier ist die von Jboss-web.xml Snippet depends:

<depends>jboss.j2ee:ear=my-ear.ear,jar=mypackage-ejb.jar,name=MyFacadeBean,service=EJB3</depends>

Mein Problem ist: Der Krieg beginnt unmittelbar nach Bereitstellung „SCHRITTE EJB:“, das heißt, bevor MyFacadeBean zu JNDI gebunden ist, die Bean-Implementierungen scheitern verursacht:

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)

Nach dem Krieg ihren Einsatz beendet hat, MyFacade glücklich (spöttisch?) Setzt seinen Einsatz und bindet die JNDI-Einträge.

Wenn ich die WAR-Hot-bereitstellen, nachdem die EAR im Einsatz hat, funktioniert alles wie vorgesehen.

Ich dachte sogar daran, in Abhängigkeit von einem Dummy-EJB in der EAR und mit strenge in jboss-app.xml es zu zwingen, als das letzte Modul zu laden. Aber ach, JBoss 5.x nicht unterstützt, dass entweder. Doh!

Gibt es eine Möglichkeit auf dem JNDI Eintrag selbst abhängen? Gibt es andere Wege zur Lösung dieses?

War es hilfreich?

Lösung

Hier ist, wie Sie dies auf JBoss 5.1.x erreichen können

Fügen Sie zunächst eine Datei aliases.txt in das META-INF Verzeichnis Ihrer EAR genannt. Diese Datei sollte nur eine einzige Zeile mit einer beliebigen Namen / Kennung für Ihre EAR. Zum Beispiel, wenn Sie my-ear.ear, Ihre META-INF/aliases.txt Datei könnte enthalten 'my-ear'. Es muss nur etwas sein, das mit anderer Aliase nicht von anderen Anwendungen zum Einsatz auf dem gleichen Server deklarierte kollidieren wird.

Als nächstes fügen Sie eine jboss-dependency.xml Datei in das META-INF Verzeichnis Ihrer WAR, enthält die folgende (subsituting 'my-ear' für den Alias, den Sie oben erstellt):

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

Dies wird sicherstellen, dass der EAR vor dem Krieg eingesetzt wird.

Auch wenn Sie versuchen, den Krieg ohne die EAR anwesend zu implementieren, wird JBoss log eine klare Bereitstellung Fehlermeldung Sie über die fehlende Abhängigkeit zu erzählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top