JAX-RS、CDI、およびEJBを備えたWebアプリケーションがあります。各リソースでステートレスセッションビーンを挿入しました。私の質問は、JAX-RSのプロバイダとステートレスSesionBeanに同じインスタンスを挿入できるかどうかです。私は、ContainerRequestFilterからステートレスSesionBeanに各リクエストに含まれるいくつかのデータを渡そうとしています。すべてのEJBコンポーネントは、jax rsリソースによってのみアクセスされます。CDIを使用して同じインスタンスを伝播する方法
例:
public class Bean {
private String attr;
// getter and setter
}
@Stateless
public class BeanService {
@Inject
Bean bean;
public void doStuff() {
bean.getAttr();
// do something with bean.attr
}
}
@Path("/bean")
public class BeanResource {
@Inject
BeanService service;
@GET
public void doStuff() {
service.doStuff():
}
}
@Provider
public class BeanRequestFilter implements ContainerRequestFilter {
@Inject
Bean bean;
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
String data = null; // <- get data from request
bean.setAttr(data);
}
}
更新
変更POJOのための豆、私の唯一の目的は、すべてのリクエストに来て、各呼び出しでtransmitedすることができますいくつかの状態を保持するクラスを使用していますPojoResourceからPojoServiceまですべてのサービスがこのデータを取得し、すべてのメソッドのパラメータとしてこれを渡したくないため、このようにしたいと思います。
感謝BeanクラスのスコープをRequestScopedの動作に変更する提案。 – ffcc