首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EJB6:将JBoss注入servlet

EJB6:将JBoss注入servlet
EN

Stack Overflow用户
提问于 2011-07-27 01:17:08
回答 1查看 3.7K关注 0票数 3

各位朋友:

每当新版本的JBoss面世时,我都不得不重新学习并浪费时间在这些东西上,这让我非常恼火。

我有一个在JNDI空间中发现和声明的无状态EJB:

代码语言:javascript
运行
复制
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的一部分。我想用注入来做。

当我使用最直观的符号时:

代码语言:javascript
运行
复制
@EJB
private UserManager userManager;

我在JBoss日志中得到一个异常。

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

代码语言:javascript
运行
复制
@EJB( mappedName = "UserManager" )
private UserManager userManager;

代码语言:javascript
运行
复制
@EJB( mappedName = "DTalk/UserManager/local" ) // EAR is called DTalk
private UserManager userManager;

我在jboss中没有得到注入错误,但是注入的bean是空的。

这令人抓狂,也是对时间的巨大浪费,这让我不禁要问,为什么我不抛弃Eclipse工具,转而使用NetBeans和GlsssFish。

任何见解都很感谢。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-27 02:42:46

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

然而,根据您所展示的部署日志,您只需通过其(本地)接口将bean声明为在JNDI中绑定。为了使注入发生,你应该将你注入的变量声明为接口:

代码语言:javascript
运行
复制
@EJB
private UserManagerLocal userManager;

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

代码语言:javascript
运行
复制
@Stateless
@LocalBean
public class UserManager implements UserManagerLocal {
    ...
}

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

代码语言:javascript
运行
复制
@EJB
private UserManager userManager;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6833935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档