私が取り組んでいるプロジェクトは、次のような構造になっていDAOs
ます。
/**
* Base DAO class
*/
@Transactional
public class JPABase {
@PersistenceContext
private EntityManager entityManager;
public void persist(Object entity) {
entityManager.persist(entity);
}
//some more methods in here
}
と
/**
* Generic DAO class implementation
*/
@Transactional
public abstract class GenericDao extends JpaBase {
//some methods in here
}
と
/**
* Specialized DAO class
*/
@Repository
@Transactional
public class PersonDao extends GenericDao {
//some methods in here
}
これまで、プロジェクトはコンパイル時ウィービングを使用<context:load-time-weaver/>
していましたが、構成が変更され、 -javaagent:/opt/tomcat7-1/lib/spring-instrument.jar
.
この変更が適用されたため、JpaBase
とGenericDao
の@Transactional
注釈は織り込まれなくなりました。サービス クラスがオブジェクトのpersist
メソッドを呼び出すたびに、トランザクションは開始されません。PersonDao
注目すべき:
- これは、コンパイル時のウィービングを使用するときに、過去に機能していました。
- で定義されているすべてのメソッドは
PersonDao
正しく織り込まれていますが、継承されたもの (例:persist(Object entity)
) は織り込まれていません。
コンパイル時ウィービングとロード時ウィービングは同じことを行うことになっていますが、異なる時点で行われます。織り方が変わったのはなぜですか?