2011-05-18 80 views
0

看一看下面的代碼:EJB嵌入式容器 - 依賴注入不起作用?

@Local 
public interface MyService { 

    void printMessage(); 
} 

@Stateless 
public class MyServiceImpl implements MyService { 

    @Override 
    public void printMessage() { 
     System.out.println("Hello from MyService."); 
    } 
} 

@Stateless 
@Named 
public class Application { 

    @EJB 
    public MyService sampleService; 

    private static Application getApplication() throws NamingException { 
     Properties properties = new Properties(); 
     properties.setProperty(EJBContainer.APP_NAME, "admin"); 
     EJBContainer.createEJBContainer(properties); //.getContext(); 
     Context context = new InitialContext(); 

     Application application = (Application) context.lookup("java:global/admin/classes/Application"); 
     return application; 
    } 

    public static void main(String[] args) throws NamingException { 
     Application application = getApplication(); 
     application.start(args); 
    } 

    private void start(String[] args) { 
     sampleService.printMessage(); 
    } 
} 

我預計將有可用的start()操作simpletService實例,但是它是等於空。所有類都是一個項目的一部分(放置在分離的文件中)。我犯了什麼錯誤?謝謝你的建議。

+0

看起來應該可以工作。你在使用什麼應用程序服務器?僅供參考,您應該使用EJBContainer.getContext()而不是新的InitialContext() – 2011-05-18 20:34:17

+0

我正在使用Glassfish 3.1。在第一個版本中我有EJBContainer.getContext(),但它也沒有工作。 – Rafal 2011-05-18 20:41:34

+0

啊,是的,當然。您正在使用無接口視圖。查找返回一個代理,它必然是NIV的一個子類。由於該方法是私有的,因此您直接在代理上調用方法,該方法沒有注入。 – 2011-05-18 23:28:34

回答

0

最後我找到了解決辦法。當我將start()操作更改爲public並且注入開始正常工作時。