Java ee 7 (glassfish 4) でデコレータ パターンを使用しています。
私はこのデコレータを持っています
@Decorator
public class FooIndexer implements FooService {
@Inject
@Delegate
FooService fooService;
private Logger logger = Logger.getLogger(FooIndexer.class.getName());
//@Inject
//Indexer indexer;
@Override
public Foo create(Foo foo, boolean index) {
fooService.create(foo, index);
if (index) {
System.out.println("Im in");
}
return foo;
}
}
そして、この EJB クラス
@Stateless(name = "fooService")
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
@DeclareRoles({"ADMINISTRATOR", "USER"})
public class FooServiceImpl implements FooService {
@PersistenceContext(unitName = "foo")
private EntityManager em;
@Resource(lookup="java:comp/EJBContext")
private SessionContext ctx;
/** CRUD **/
@RolesAllowed("ADMINISTRATOR")
public Foo create(Foo foo, boolean index) {
Principal cp = ctx.getCallerPrincipal();
System.out.println(cp.getName());
em.persist(foo);
return foo;
}
}
このデコレーター パターンを使用すると、EJB の EntityManager が null になります (デコレーターがないと、すべてうまくいきます)。デコレーターが @EJB アノテーションの代わりに @Inject を使用しているためであり (@EJB アノテーションは @Decorator では使用できません)、EntityManager が注入されていないためだと思います。
しかし、@decorator を使用して entitymanager が注入されるようにするにはどうすればよいですか?
ありがとうございました