2012-09-19 58 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