2012-03-28 4 views
0

Ich brauche eine How-to-do-Hilfe in der Weblogic-Entwicklungsumgebung (Oracle Workshop für WebLogic 10.3).Wie referenzieren Sie EJBs von einem anderen EJB in Oracle Workshop für WebLogic?

Ich habe eine Session-Bean in einem .jar, und ich muss es von einer Message-Bean in einem anderen .jar verwenden. Ich möchte die "java: comp/env/..." -Notation beim Nachschlagen der Session-Bean verwenden.

jndiCtx = new InitialContext(); 
workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome"); 
WorkerSBLocal worker = workerHome.create(); 

So muss ich die ejb Referenz in der MDB Komponente Deployment Descriptor (ejb-jar.xml) erstellen:

<ejb-local-ref> 
    <ejb-ref-name>ejb/WorkerSBLocalHome</ejb-ref-name> 
    <ejb-ref-type>Session</ejb-ref-type> 
    <local-home>test.WorkerSBLocalHome</local-home> 
    <local>test.WorkerSBLocal</local> 
    <ejb-link>WorkerEJB.jar#WorkerSB</ejb-link> 
</ejb-local-ref> 

Das funktioniert (getestet). Das Problem besteht darin, dass der MDB-Deployment-Deskriptor generiert wird und jedes Mal, wenn ich die MDB-Quelle bearbeite, generiert Oracle Workshop den Deployment-Deskriptor mithilfe der Klassenanmerkungen neu und überschreibt meine Additionen.

Meine Frage ist also: Was ist der beste Weg, eine EJB von einer MDB zu referenzieren, wenn Sie mit dem Oracle Workshop für WL arbeiten? Oder gibt es eine andere bevorzugte Methode zum Erstellen der Bean-Referenzen, wenn Sie die ejb-Annotationen als die oben genannten verwenden? Oder sollte ich meine Bean-Referenz irgendwo anders platzieren?

Antwort

0

Es scheint, dass es keine Möglichkeit gibt, den generierten Deployment-Deskriptor manuell zu bearbeiten (wenn Sie Ihre Änderungen nicht verlieren wollen). Sie können jedoch den Inhalt mithilfe der Anmerkungen festlegen.

@EjbLocalRef(name="ejb/WorkerSBLocalHome", type=Constants.RefType.SESSION, 
    home="test.WorkerSBLocalHome", local="test.WorkerSBLocal", 
    link="WorkerEJB.jar#WorkerSB") 
@MessageDriven(ejbName = "HelloWorldMDB", 
    destinationJndiName="jms.RequestQueue", destinationType = "javax.jms.Queue") 
public class Test extends GenericMessageDrivenBean implements 
    MessageDrivenBean, MessageListener { 
    ..... 
    jndiCtx = new InitialContext(); 
    workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome"); 
    WorkerSBLocal worker = workerHome.create(); 
    ..... 
} 

Dieser Ansatz noch zwingt Sie konkrete jndi Namen im Code angeben, aber Sie können den erzeugten Deployment Descriptor Inhalt an der Bereitstellungszeit immer ändern.

Verwandte Themen