2011-08-17 58 views
4

請問如何在Weblogic上查找EJB?
我有以下豆:在Weblogic 10.x.x上使用InitialContext查找EJB

@Stateless 
@EJB(name = "DataAccess", beanInterface = DataAccessLocal.class) 
public class DataAccess implements DataAccessLocal { 
    ... 
} 

我需要這個bean在其他類,這是沒有管理的內容(只是簡單類)的一部分,所以我想它應該做這樣的:

DataAccessLocal dataAccess = DataAccessLocal.class.cast((new InitialContext()).lookup("%SOME_JNDI_NAME%")); 

問題是在Weblogic 10.xx AS中應該用作%SOME_JNDI_NAME%的內容?
任何幫助將不勝感激。

+0

我在另一個地方回答了這個:http://stackoverflow.com/questions/676926/giving-an-ejb- a-jndi/677008#677008 –

+0

謝謝@Nuno。它僅適用於遠程接口嗎?還是本地呢? – kardanov

+0

不知道那一個,因爲我一直只與遠程接口工作 –

回答

7

我會更新你的EJB類,看起來像這樣:

@Stateless(name="DataAccessBean", mappedName="ejb/DataAccessBean") 
@Remote(DataAccessRemote.class) 
@Local(DataAccessLocal.class) 
public class DataAccess implements DataAccessLocal, DataAccessRemote { 
    ... 
} 

仰望從部署在相同的EAR類的EJB(使用本地接口):

InitialContext ctx = new InitialContext(); //if not in WebLogic container then you need to add URL and credentials. 
// use <MAPPED_NAME> 
Objet obj = ctx.lookup("java:comp/env/ejb/DataAccessBean"); 

EJB注入通常是首選的,你可以這樣做:

@EJB(name="DataAccessBean") 
DataAccessLocal myDataAccessBean; 

如果您嘗試使用EJ乙遠程則需要使用遠程接口和下面的JNDI名稱:

DataAccessBean#<package>.DataAccessRemote 
+0

謝謝@Jeff,我剛剛試了一下(與本地接口),並得到以下異常:(我沒有完整的stacktrace,但主要部分是)「剩餘名稱:env/ejb/DataAccessBean」。你有什麼想法? – kardanov

+0

很高興通過電子郵件幫助 - [email protected]。當我們完成後,我們可以在這裏發佈解決方案... –

+0

另外,如果您嘗試從部署EJB的EAR外部訪問EJB,或者如果EJB部署在它自己的ejb-jar中,則需要起訴遠程方法。 –