我在java ee 7(glassfish 4)中使用裝飾器模式。Java EE 7 - @Decorator,@Stateless和@PersistenceContext = nullpointerException
我有這個裝飾
@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;
}
}
當我使用此裝飾圖案,在的EntityManager EJB爲空(無裝飾,一切順利精細)。我supose是因爲裝飾器使用@Inject而不是@EJB註釋(@EJB註釋不能在@Decorator中使用),並且EntityManager沒有被注入。
但是,我能做些什麼來獲得entitymanager將被注入使用@decorator?
謝謝
你在混合概念。 ['@ Decorator'來自CDI管理的bean](http://docs.oracle.com/javaee/6/tutorial/doc/gkhqf.html),而'@ EJB'用於EJB注入。 –
因此,Luiggi門多薩,重複我的提示。我能做些什麼來獲得entitymanager將使用@decorator注入這個代碼? –
@LuiggiMendoza根據CDI 1.1規範,EJB也是一個託管bean。參見[3.1.1節。 CDI 1.1規範的哪些Java類是託管的bean?](http://docs.jboss.org/cdi/spec/1.1/cdi-spec.html#what_classes_are_beans)。 – Oliver