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實例,但是它是等於空。所有類都是一個項目的一部分(放置在分離的文件中)。我犯了什麼錯誤?謝謝你的建議。
看起來應該可以工作。你在使用什麼應用程序服務器?僅供參考,您應該使用EJBContainer.getContext()而不是新的InitialContext() – 2011-05-18 20:34:17
我正在使用Glassfish 3.1。在第一個版本中我有EJBContainer.getContext(),但它也沒有工作。 – Rafal 2011-05-18 20:41:34
啊,是的,當然。您正在使用無接口視圖。查找返回一個代理,它必然是NIV的一個子類。由於該方法是私有的,因此您直接在代理上調用方法,該方法沒有注入。 – 2011-05-18 23:28:34