【问题标题】:Inject EJB 3.0 in WebLogic Server v10.3在 WebLogic Server v10.3 中注入 EJB 3.0
【发布时间】:2012-09-11 20:58:44
【问题描述】:

我在尝试将无状态 EJB 注入应用程序客户端项目时遇到了一些问题。 App Client 和 EJB 都在同一个 EAR 中。使用 JNDI,我能够检索 EJB 的一个实例,但我不确定我应该如何使用 @EJB 注释来完成它。我试过使用@EJB(name="something")、@EJB(mappedName="something"),但我得到的只是一个空值。这是我的代码:

@Remote
public interface TimerEjbTestService {
    public void testMethod();
}

@Stateless(mappedName="TimerEjbTestService")
public class TimerEjbTestBean implements TimerEjbTestService{

    public void testMethod() {
        System.out.println("Inside EJB.");
    }
}

使用 JNDI,我可以按如下方式获取实例:

Context ctx = new InitialContext();
TimerEjbTestService timerEjbTestService = (TimerEjbTestService) ctx.lookup("TimerEjbTestService#myejb.timerejbtestservice.services.TimerEjbTestService");

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: java ejb weblogic ejb-3.0 weblogic-10.x


    【解决方案1】:

    你可以这样做:

    @EJB
    private TimerEjbTestService myBean;
    

    这样,容器就注入了bean。

    此外,由于它在同一个耳朵中(因此由同一个 JVM 运行),接口的注释应该是 @Local 而不是 @Remote

    【讨论】:

    • 我已经尝试过了,但我得到的只是一个空引用,包括本地和远程注释。我也试过 EJB(mappedName="TimerEjbTestService") 没有成功。
    • @carcaret 在Stateless注解中不带参数mappedName试试;或使用名称而不是映射名称。从规范来看,mappedName 不需要由应用程序服务器处理:“应用程序服务器不需要支持任何特定形式或类型的映射名称,也不需要使用映射名称的能力。映射名称取决于产品并且通常是安装 -依赖。” - docs.oracle.com/javaee/6/api/javax/ejb/Stateless.html
    猜你喜欢
    • 2013-12-29
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2012-04-10
    相关资源
    最近更新 更多