2010-07-20 53 views
4

我一直在努力争取一段时间。@ JBoss 5.1.0 GA中的@EJB?

我正在尝试为EJB 3.0做好准备。我使用JBoss 5.1.0 GA作为我的应用程序服务器。我开始使用非常简单的无状态会话bean,它具有本地接口和一个调用会话Bean方法的简单jsp-servlet客户端。尽管我一直在尝试使用@EJB注释将会话bean注入到servlet类中。

public class SampleServlet extends HttpServlet { 

    @EJB 
    private PersonLocal person; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     System.out.println("In servlet");  
     response.getWriter().write("Person Name : "+person.getName()); 
     System.out.println(person.getName());  
    } 
} 

我使用JBoss 5.1.0 GA与默认配置。 (我也试过用全部配置)

但是,我用来获得会话bean注入的空引用。经过一天左右的努力,我终于尝试了丑陋的EJB 2.x JNDI查找方法,而不是@EJB注释,其配置文件为jndi.properties文件中指定的jndi,并且其工作没有任何其他更改!

现在,我试图在JBoss文档中找出JBoss 5.1.0 GA是否支持注入@EJB注释,但找不到具体答案。那么有人可以告诉我它是否可以吗?因为我真的更喜欢注释比JNDI查找(我的意思是,谁不会?)。我错过了什么..?

大概应该在JBoss论坛都提出这一点,但..我沉迷于这个地方;-)

+0

您正在使用哪种JBoss服务器配置? 'all','default','minimal'等。 – skaffman 2010-07-20 11:59:53

+2

此外,请向我们展示一些代码,例如servlet – skaffman 2010-07-20 12:00:52

+0

向该问题添加了代码和服务器配置。 :) – Nikhil 2010-07-21 07:25:06

回答

5

这绝对是一个JBoss 5.x的支持,因为它是Java EE 5的认证。

实际上,我建议检查JBoss EJB3 TutorialsChapter 11. Introduction to EJB injection in Servlets,他们描述了一个详细的和一步一步的例子。

,并支付特别注意以下注意事项:

对于注射到发生在 网络模块,你的web.xml应该使用 2.5版本在web-app为xsd:

<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
+3

我想知道有多少servlet/jsp问题已经通过修复'web-app version' ..... – skaffman 2010-07-21 07:13:16

+1

解决了! :)我应该在潜水之前阅读教程,但无论如何..我学到了很好的一课。非常感谢! :) – Nikhil 2010-07-21 07:21:27

+0

当使用普通的Java客户端时,还有没有其他的gotacha?或者我们可以按原样插入Java客户端? – Nikhil 2010-07-21 10:58:43

1

我不得不使用远程EJB一个类似的问题,但它不是由于web应用程序的版本,而是如何我的客户一直在寻找了EJB。

下面是我工作:

//bean 
@Stateless(name="xxxxService") 
@Remote(xxxxRemote.class) 
public class xxxxService implements xxxxRemote { 

//interface - note that no annnotation is required 
public interface xxxxRemote { 

//in the client 
    @EJB(mappedName="myJndiNameForxxxx") //for a local ejb, you could use 'beanName=' 
    private xxxxRemote xxxx; 

我的项目(使用Maven构建),客户端是一个Web应用程序,以及EJB是EJB项目,然后包裹在一个EAR项目。发生在jboss.xml中的JNDI映射,它生活在EJB项目(在我的项目,SRC /主/资源/ META-INF),看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema" 
     xs:schemaLocation="http://www.jboss.org/j2ee/schema/jboss_5_0.xsd" 
     version="5.0"> 
    <enterprise-beans> 
    <session> 
     <ejb-name>xxxxService</ejb-name> 
     <jndi-name>myJndiNameForxxxx</jndi-name> 
    </session> 
    </enterprise-beans> 
</jboss> 

这就是它了,现在我可以从客户端访问EJB。希望这可以帮助某人。

如果您仍然遇到问题,可以查看JMX控制台以确保显示JNDI条目。查看'jboss'>'service = JNDIview'>'list'并点击'invoke'按钮。如果您的服务部署正确,您应该在'ProxyFactory'下看到JNDI名称(在我的示例中,myJndiNameForxxxx)。

+0

您的回答与所提问题不太相关,但仍如您所说,可能对某人有所帮助! – Nikhil 2013-04-15 08:20:15

相关问题