2010-10-02 63 views
2

我有一個EJB3項目要部署在JBoss 5.1.0 GA上。我將無狀態EJB注入到其他無狀態Bean和Servlet中。我使用的@EJB註釋沒有任何參數注入EJB bean,(我有一個測試項目只是爲了模擬注入,它的工作原理)。解決方案不應通過注入容器錯誤發生

當我嘗試部署我得到下面的錯誤。

"Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Resolution should not happen via injection container" 

我已經搜索,但似乎無法找到/查明錯誤的原因。

更新:1

無論是EJB JAR和WAR被部署在相同的EAR。我使用JEE5 archtype,http://code.google.com/p/javaee5-maven-archetype/來創建主項目和測試。由archtype生成的默認代碼有效,並且不需要在@EJB注入中指定JNDI名稱。

更新:2 全面部署堆棧跟蹤,http://pastebin.com/CknXie13

+0

'由archtype生成的默認代碼有效,並且不需要在@ EJB'中指定JNDI名稱然後添加了什麼?你能發佈完整的堆棧跟蹤嗎? – 2010-10-02 23:20:57

+0

我有一個抽象的DAO,我使用@ @ PersistenceContext注入了持久化上下文。基本DAO由所有DAO實現擴展。感興趣的是我可以在非託管bean中注入「@ PersistenceContext」嗎? – n002213f 2010-10-03 18:07:13

+0

'感興趣的我可以在非託管bean中注入@PersistenceContext嗎?'不,注入不能發生,因爲類是非託管的。 – 2010-10-05 06:05:50

回答

1

使用@EJB註釋的mappedName屬性,同時注入到servlet

屬性應包含EJB的JNDI名稱。

1

請檢查您的web.xml版本。版本2.4或更早版本不支持依賴注入。

這裏是版本= 「2.5」

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 

你把你的servlet的.war文件樣本摘錄?把你的servlet放入.WAR文件並把你的bean放在.JAR文件中。創建和ear文件,然後部署它

4

下面是一個經常忽略的問題:在servlet或Web服務中聲明EJB的類類型時,確保使用本地接口的名稱而不是實現。因此,JBOSS中的mappedName將指向實現的jndi綁定,而聲明中的類類型將指向該接口。例如:

@EJB(mappedName="Foo/EmployeeManagerBean/local") 
EmployeeManagerLocal manager; 

問題2:確保您使用Java 1.6或更高版本進行編譯。在Eclipse中這可能會很棘手。您必須在Project-> Properties中檢查三個位置,以確保:Project Facets,編譯器合規性設置和構建路徑。