JBoss 6:将 EJB 注入 servlet

2024-01-12

Folks,

每次新版本的 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

我需要在 servlet 中使用此 EJB,该 servlet 是 war 的一部分,而 war 是包含 EJB 的 EAR 的一部分。我想使用注射来做到这一点。

当我用最直观的记法时:

@EJB
private UserManager userManager;

我在 JBoss 日志中遇到异常。

当我使用更华丽的符号时,例如:

@EJB( mappedName = "UserManager" )
private UserManager userManager;

Or

@EJB( mappedName = "DTalk/UserManager/local" ) // EAR is called DTalk
private UserManager userManager;

我在 jboss 中没有收到任何注入错误,但注入的 bean 为空。

这令人抓狂,而且浪费大量时间,让我质疑为什么我不放弃 Eclipse/jboss 工具专营权而转而使用 NetBeans 和 GlassFish。

任何见解表示赞赏。

Thanks.


您正在尝试注入(代理)bean 实例本身,而不是其接口。

然而,根据您显示的部署日志记录,您仅通过其(本地)接口声明了要在 JNDI 中绑定的 bean。为了进行注入,您应该将要注入的变量声明为接口:

@EJB
private UserManagerLocal userManager;

或者声明一个no-interface应该为您的 bean 创建视图:

@Stateless
@LocalBean
public class UserManager implements UserManagerLocal {
    ...
}

之后您可以像之前一样声明变量:

@EJB
private UserManager userManager;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JBoss 6:将 EJB 注入 servlet 的相关文章

随机推荐