私は単純な耳を持っています (GF 4.0、JDK 7; 今のところ EE6 にこだわっています)
耳には以下が含まれます:
EJBJar
戦争
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 に入れると、print ステートメントは引き続き出力されますが、@Resource は機能せず、EJB NPE はプロデューサ メソッドなどによって返された null DS にありました。両方のテストで、修飾子は Shared.jar にとどまりました。とにかく、どこにもDDはありません(まあ、戦争のためのweb.xml-他のすべては暗黙的です)
私の一部は、これは少し理にかなっていると思います。@Resource は一種の EE 指向です (またはいいえ?)。ほとんどの場合、展開可能な EE 内で意味をなすはずです。
OTOH、(EAR 内の) すべての EJBJar と WAR が使用できる EAR の lib ディレクトリにある共有 JAR に、修飾子といくつかのプロデューサーを一握り持つことができないのはなぜですか?
これを機能させる方法はありますか?
本当に必要な場合は、ここで例全体を見ることができます: https://github.com/fwelland/ResJect