我有簡單耳(GF 4.0,JDK 7;與EE6粘現在)@耳朵的'lib'中的jar中的資源注入;爲什麼不工作?
耳包含:
EJBJar
WAR
LIB/Shared.jar
Shared有一個@Qualifier(@UserDS)(它也有META-INF/beans.xml)。
我有一個@Producer這樣的:
package fhw.producers;
import fhw.qaulifiers.ListingDS;
import fhw.qaulifiers.UserDS;
import javax.annotation.Resource;
import javax.sql.DataSource;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Produces;
@Default
public class DataSourceProducer
{
@Resource(lookup = "Member")
private DataSource userDS;
public DataSourceProducer()
{
System.err.println("DataSourceProducer.DataSourceProducer -- CONSTRUCTION");
}
@Produces
@UserDS
public DataSource getUserDataSource()
{
System.err.println("******DataSourceProducer.getUserDataSource; am I null? " + (null == userDS)) ;
return userDS;
}
}
我有一個簡單的EJB(它有一個beans.xml文件),其通過使用它:
@Inject
@UserDS
private DataSource userDS;
問題:當我將DataSourceProducer放入EJBJAR中並進行部署;我的打印聲明出來了,我的@Resource解決了,一切都很好。當我把DataSourceProducer放入Shared.jar時;打印語句仍然出來,但@Resource不起作用,生產者方法返回的空DS上的EJB NPE等。在兩次測試中,限定符都停留在Shared.jar中。無論如何,我沒有任何DD(很好的戰爭的web.xml - 所有其他都是隱含的)
我的一部分認爲這有點道理; @Resource是一種面向EE的(或不是?);並且應該在可部署EE的情況下最有意義。爲什麼我不能讓所有EJBJars和WARs(在EAR中)的EAR的lib目錄中的共享JAR中的限定符和一些生產者手工充滿?
有沒有辦法讓這項工作?
如果你真的想 - 你可以在這裏看到一個完整的例子:如果你使用的是GlassFish 4,你使用的是Java EE 7 https://github.com/fwelland/ResJect
好耶(RE:EE6 v EE7) - 我想我真正的意思是,我希望堅持EE6的規格和功能,儘管我可能在EE7服務器上運行。 – fwelland
無論如何,我認爲我在另一個SO帖子中發現了一個類似的東西,但是對於另一個問題。你指的是' shared.jar '正確嗎?我以爲' shared.jar '只是爲了EE應用程序客戶端? –
fwelland
對,它需要被定義爲一個EJB模塊而不是一個應用程序客戶端模塊,即使您沒有定義任何EJB(實際上使用ejb模塊在這一點上是錯誤的)。 RE ee6 vs ee7,無論何時您使用eeX應用程序服務器,都需要遵循該ee規範的規則,而不管您希望遵循哪些規則。 –