Spring+HibernateEntityManager(とりあえずSpring編)
前回は、HibernateEntityManager を使ったベタなサンプルでした。今回は、とりあえず Spring Framework を使ってみるという程度に拡張します。
拡張点
変更ソース
sample.Service
機能の実行を行うサービスクラス。
package sample; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; public class Service { /** * DI される EntityManagerFactory */ private EntityManagerFactory emf; // $Proxy6 クラス /** * @param emf */ public void setEmf(EntityManagerFactory emf) { this.emf = emf; } public void persistA() { EntityManager em = emf.createEntityManager(); // em は $Proxy7 クラス EntityTransaction tx = em.getTransaction(); // tx は org.hibernate.ejb.TransactionImpl クラス tx.begin(); // DB : SET autocommit=0 em.persist(new A()); // DB : insert into A values ( ) tx.commit(); // DB : commit // DB : SET autocommit=1 } }
beans.xml
ApplicationContextの設定ファイル。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" > <!-- persistence.xml の位置指定や LTW 等の設定も可能な FactoryBean --> <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation" value="persistence.xml" /> </bean> <!-- Service --> <bean id="service" class="sample.Service"> <property name="emf" ref="emf" /> </bean> </beans>
sample.SampleMain
機能の実行を、ApplicationContextから取得したService経由で行うように変更。
package sample; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SampleMain { // A を新規作成し、DB に保存 public static void main(String[] args) throws Exception { // ApplicationContext の取得 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // Service の取得 Service service = (Service) ctx.getBean("service"); // A を新規作成し、DB に保存 service.persistA(); } }
参考
links
第1回 Spring+HibernateEntityManager(HibernateEntityManager単体編)
第2回 Spring+HibernateEntityManager(とりあえずSpring編)
第3回 Spring+HibernateEntityManager(宣言的トランザクション編)
第4回 Spring+HibernateEntityManager(Spring+DDDっぽく編)
第5回 Spring+HibernateEntityManager(Spring+DDDっぽく編 その2)
第6回 Spring+HibernateEntityManager(Spring+DDDっぽく編 その3)
第7回 Spring+HibernateEntityManager(Spring+DDDっぽく編 その4)
第8回 Spring+HibernateEntityManager(@Transactionalアノテーション編)
第9回 Spring+HibernateEntityManager(@Required編)
第10回 Spring+HibernateEntityManager(XMLからの外部リソース参照編)
第11回 Spring+HibernateEntityManager(AspectJ AOP with Load-Time-Weaver編)
第12回 Spring+HibernateEntityManager(DBCPのvalidationQuery編)
第13回 Spring+HibernateEntityManager(@Resource編)
第14回 Spring+HibernateEntityManager(コンポーネント自動検出 with アノテーション編)
第15回 Spring+HibernateEntityManager(コンポーネント自動検出 without アノテーション編)