2012-03-28 49 views
0

我需要Weblogic開發環境中的如何操作(Oracle Workshop for WebLogic 10.3)的幫助。如何在Oracle Workshop for WebLogic中引用另一個EJB中的EJB?

我在一個.jar中有一個會話bean,我需要從另一個.jar中的消息驅動bean中使用它。查找會話bean時,我想使用「java:comp/env/...」表示法。

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

因此我需要創建在MDB組件部署描述符EJB引用(EJB-jar.xml中):

<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> 

這個作品(測試)。 問題是,生成了MDB部署描述符,並且每次編輯MDB源時,Oracle Workshop都會使用類標註重新生成部署描述符,並覆蓋我的添加。

所以我的問題是:在使用Oracle Workshop for WL時,從MDB引用EJB的最佳方式是什麼?或者,在使用ejb註釋時,是否還有其他的首選方法創建了bean引用,而不是我上面概述的方法?或者我應該把我的bean引用放在別的地方?

回答

0

似乎沒有辦法手動編輯生成的部署描述符(如果您不想丟失更改)。但是,您仍然可以使用註釋指定其內容。

@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(); 
    ..... 
} 

這種方法仍然迫使你在代碼中指定具體的JNDI名稱,但您可以隨時修改在部署時生成的部署描述符的內容。