2014-02-25 94 views
0

我有2個EJB模塊項目,我從項目之一,想打電話從其他項目無狀態的no-interface豆。我想注入要使用EJB註釋調用的bean。問題是注入不起作用(如果相關,我使用NetBeans 7.4)。EJB注入不工作

無國籍無接口EJB被稱爲:

package standalonepackage; 

import javax.ejb.Stateless; 
import javax.ejb.LocalBean; 


@Stateless 
@LocalBean 

public class StandaloneBean { 

    private static final String message="Greetings!"; 

    public String returnMessage(){ 
      return message; 
    } 
} 

調用上面的豆bean的接口(這個EJB位於另一EJB模塊項目)

@Local 
public interface ExampleBeanLocal { 

    public String getMessage(); 
} 

的實施接口:

@Stateless 
public class ExampleBean implements ExampleBeanLocal { 

    @EJB 
    private StandaloneBean standaloneBean; 

    @Override 
    public String getMessage() { 
     return String.format("Me - and the second message %s", standaloneBean.returnMessage()); 
    } 

} 

我也有一個主類,只是調用Ex ampleBean getMessage方法(MainClass位於第二EJB模塊項目):

public class MainClass { 


    private static ExampleBeanLocal instance = new ExampleBean(); 

    public static void main(String[] args) { 

     System.out.println(instance.getMessage()); 
    } 
} 

我缺少什麼?

+0

爲什麼你認爲依賴注入會將此代碼作爲常規客戶端應用程序運行時發生? – Gimby

+0

對不起,我是新來的這 - 是不是有什麼辦法可以使它從一個客戶端應用程序工作嗎? –

+0

當然不是,你需要一個JEE容器來爲你提供JEE特性:/ – Gimby

回答

4

的一切,如果你想訪問你的業務邏輯EJB首先那麼首先你需要在應用服務器部署EJB。在部署過程中,應用服務器將創建一種叫做JNDI名稱這就好比gatepass訪問你的業務邏輯。

其次,有兩種方式可以調用EJB。 1.(只能在同一容器)

使用從POJO CDI(因爲它沒有在任何容器裏裝的你不能調用EJB和EJB創建ContextLookup使用JNDI名稱 2.使用上下文依賴注入的CDI訪問是在不同的JVM中)。如果你想從POJO訪問EJB,你需要使用@Remote並使用ContextLookup訪問EJB的方式,你可以在這裏找到更多的信息 http://wiki.netbeans.org/CreatingEJB3UsingNetbeansAndGlassfish

2

你需要應用服務器與EJB容器運行此。看看JBoss,Apache TomEE或其他東西。