JPA、CDI(OpenWebBeans + Deltaspike JPAモジュール)、JSFを使用してアプリケーションを作成しようとしています。私はSpringフレームワークを使用するのと同じ方法でTomcatにデプロイされたCDIを使用しています。 EntityManagerのはDeltaSpike JPAのmodulehttpを用いて注入されどのCDIスコープをDAOクラスとサービスクラスに使用するか
public abstract class GenericDaoJpa<T> implements GenericDao<T> {
private static final Log logger = LogFactory.getLog(GenericDaoJpa.class);
@Inject
protected EntityManager entityManager;
private Class<T> type;
://deltaspike.apache.org/jpa.html私はDAOは、このようなGenericDAOImpl(最初の数行)と呼ばれています。このGenericDaoは、サービスクラスによって使用される具体的なDAO(UserDaoなど)によって継承されます。このようDAOとサービスクラスの両方が、彼らはシングルトンだろう春とは異なり依存スコープを持つことになりますCDIを使用して
public class UserServiceImpl implements UserService {
private static final Log logger = LogFactory.getLog(UserServiceImpl.class);
@Inject
private UserDao userDao;
@Transactional
public void saveUser(UserDto user) throws UserServiceException {
try {
User u = new User(user);
userDao.create(u);
} catch (Exception e) {
logger.error("Error while creating user.", e);
throw new UserServiceException("Error while creating user.");
}
}
}
:たとえばUserServiceImplについては
。したがって、すべてのクライアントには新しいインスタンスが注入されます。 DAOクラスとサービスクラスのスコープをApplicationScopeに変更する必要がありますか?しかし、仕様では、直列化可能なすべてのクラスを作成する必要があります。 Daoクラスの場合、これが問題になる可能性があり、EntityManagerに一時的なマークを付ける必要がありますか? A
私はどんな勧告についてもうれしいでしょう。
あなたの答えをありがとう。私が@ApplicationScopedを使用する場合、私はSpringのようにBean(春にスコットされたシングルトン)が同時に何度もアクセスされることを期待しています。したがって、パフォーマンス上の問題はありません。クラスのスレッドを安全にすることだけが私の考え方です。または、並行処理はCDIコンテナによって自動的に処理されませんか? –
並行処理はCDIコンテナによって処理されません。 –