2012-09-19 60 views
0

我在尝试将无状态EJB注入到应用程序客户机项目中时出现了一些问题。 App Client和EJB都在相同的EAR中。使用JNDI,我能够检索EJB的一个实例,但我不知道应该如何使用@EJB注释来实现它。我试过使用@EJB(name =“something”),@EJB(mappedName =“something”),但我得到的只是一个null。这里是我的代码:在WebLogic Server v10.3中注入EJB 3.0

@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"); 

我如何能做到这一点任何想法?

回答

1

你可以做这样的事情:

@EJB 
private TimerEjbTestService myBean; 

通过这种方式,容器注入豆。另外,由于它位于同一耳朵(因此由同一个JVM运行),因此接口的注释应为@Local而不是@Remote

+0

我已经试过这个,但是我得到的是一个空引用,包含Local和Remote注解。我也尝试过EJB(mappedName =“TimerEjbTestService”),但没有成功。 – carcaret

+0

@carcaret在无状态注释中尝试不带参数mappedName;或者使用名称而不是mappedName。根据规范,mappedName不需要由应用程序服务器来管理:“应用程序服务器不需要支持任何特定形式或类型的映射名称,也不需要使用映射名称,映射名称是依赖于产品的,依赖“。 - http://docs.oracle.com/javaee/6/api/javax/ejb/Stateless.html – m3th0dman