Raj*_*Raj 3 dependency-injection ejb-3.0 jboss6.x
伙计们,
每当新版本的JBoss推出时,我都不得不重新学习和浪费时间.
我有一个在JNDI空间中发现和声明的无状态EJB:
10:01:53,044 INFO [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
DTalk/UserManager/local - EJB3.x Default Local Business Interface
DTalk/UserManager/local-com.doctalk.ejb.UserManagerLocal - EJB3.x Local Business Interface
Run Code Online (Sandbox Code Playgroud)
我需要在servlet中使用这个EJB,它是war的一部分,war是包含EJB的EAR的一部分.我想用注射剂来做.
当我使用最直观的表示法时:
@EJB
private UserManager userManager;
Run Code Online (Sandbox Code Playgroud)
我在JBoss日志中遇到异常.
当我使用更华丽的符号,例如:
@EJB( mappedName = "UserManager" )
private UserManager userManager;
Run Code Online (Sandbox Code Playgroud)
要么
@EJB( mappedName = "DTalk/UserManager/local" ) // EAR is called DTalk
private UserManager userManager;
Run Code Online (Sandbox Code Playgroud)
我在jboss中没有注入错误,但注入的bean为null.
这令人抓狂并且浪费了大量时间,让我怀疑为什么我不会将Eclipse/jboss工具专营权转让给NetBeans和GlsssFish.
任何见解都表示赞赏.
谢谢.
您正在尝试注入(代理)bean实例本身,而不是其接口.
但是,根据您显示的部署日志记录,您只通过其(本地)接口声明了bean在JNDI中的限制.为了使注入发生,你应该声明你注入的变量作为接口:
@EJB
private UserManagerLocal userManager;
Run Code Online (Sandbox Code Playgroud)
或者声明no-interface
应该为您的bean创建一个视图:
@Stateless
@LocalBean
public class UserManager implements UserManagerLocal {
...
}
Run Code Online (Sandbox Code Playgroud)
之后您可以像之前那样声明变量:
@EJB
private UserManager userManager;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3683 次 |
最近记录: |