在Weblogic 10.xx上使用InitialContext查找EJB

kar*_*nov 6 java lookup ejb weblogic initial-context

你能告诉我如何在Weblogic上查找EJB吗?
我有以下bean:

@Stateless
@EJB(name = "DataAccess", beanInterface = DataAccessLocal.class)
public class DataAccess implements DataAccessLocal {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我在其他类中需要这个bean,它不是托管内容的一部分(只是简单的类),所以我想它应该这样做:

DataAccessLocal dataAccess = DataAccessLocal.class.cast((new InitialContext()).lookup("%SOME_JNDI_NAME%"));
Run Code Online (Sandbox Code Playgroud)

问题是在Weblogic 10.xx AS的情况下应该使用%SOME_JNDI_NAME%?
任何帮助将不胜感激.

Jef*_*est 9

我会将您的EJB类更新为如下所示:

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

从部署在同一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");
Run Code Online (Sandbox Code Playgroud)

EJB注入通常是首选,您可以按如下方式执行:

@EJB(name="DataAccessBean")
DataAccessLocal myDataAccessBean;
Run Code Online (Sandbox Code Playgroud)

如果您尝试远程使用EJB,则需要使用远程接口和以下JNDI名称:

DataAccessBean#<package>.DataAccessRemote
Run Code Online (Sandbox Code Playgroud)