2010-07-20 64 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

相關問題