我现在一直在努力为此挣扎。

我试图为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注入中获取null引用。在努力完成一天左右后,我终于尝试了丑陋的ejb 2.x jndi查找方法,而不是@EJB注释,在jndi.properties文件中指定的jndi配置,它没有任何其他更改!

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

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

有帮助吗?

解决方案

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

实际上,我建议检查章节11. EJB注射介绍在Servlet jboss ejb3教程,他们描述了一个详细的例子和一步一步。

并特别注意以下注释:

用于注射到a中 Web模块,您的Web.xml应该使用 2.5版本的Web应用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">
.

其他提示

我使用远程EJB有一个类似的问题,但它不是由于网络应用程序版本,而是我的客户如何查找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项目中,然后将其包裹在耳朵项目中。JNDI映射发生在JBOSS.XML中,这些映射在EJB项目中生存(在我的项目中,SRC / MAIN / REMORY / 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”>“列表”下,然后单击“调用”按钮。如果您的服务已正确部署,则应在“ProxyFactory”下查看JNDI名称(在我的示例中,myjndinameforxxxx)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top