JBoss 5.1.0 GA中的@EJB?

时间:2010-07-20 11:48:41

标签: java jboss java-ee ejb-3.0

我一直在努力争取这一段时间。

我正在尝试为EJB 3.0做好准备。我正在使用JBoss 5.1.0 GA作为我的应用程序服务器。我从非常简单的无状态会话bean开始,使用本地接口和一个简单的jsp-servlet客户端调用会话bean方法。所有这一切,我一直在尝试使用@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的配置,它没有任何其他更改! / p>

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

可能应该把它放在JBoss论坛中,但是......我沉迷于这个地方; - )

2 个答案:

答案 0 :(得分:5)

JBoss 5.x肯定支持这一点,因为它已通过Java EE 5认证。

实际上,我建议查看Chapter 11. Introduction to EJB injection in ServletsJBoss EJB3 Tutorials,它们会详细介绍一步一步的示例。

并特别注意以下注释:

  

注射用于注射   web模块,你的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">

答案 1 :(得分: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构建),客户端位于webapp中,EJB位于EJB项目中,然后将其包装在EAR项目中。 JNDI映射发生在jboss.xml中,它存在于EJB项目中(在我的项目中,在src / main / resources / 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'&gt;'service = JNDIview'&gt;'list'下查看并点击'invoke'按钮。如果您的服务部署正确,您应该在'ProxyFactory'下看到JNDI名称(在我的示例中,myJndiNameForxxxx)。

相关问题