javascript
jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程
jboss4.2.3
在花費大量時間在網上搜索之后,嘗試找到對幾個項目使用Spring,JPA和Hibenate的最有效方法,我們得出了將在下面介紹的配置的結論。 將Spring與JPA和Hibernate集成包括幾個步驟:
- Spring容器的配置
- JPA ORM層的配置
- Hibernate Second lvl緩存的配置(如果需要)
請記住,就數據源而言,我們假設我們在J2EE容器中進行操作,因此我們將要從JNDI查找現有數據源并使用它。 我們將要配置的文件如下所述:
下面是一個示例spring.xml文件:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd" ><context:component-scan base-package="com.mycomp.mypackage" /><task:annotation-driven executor="myExecutor" scheduler="myScheduler" /><task:executor id="myExecutor" pool-size="5" /><task:scheduler id="myScheduler" pool-size="10" /><tx:annotation-driven /><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="persistenceUnitName" value="MyPersistenceUnit" /></bean><bean id="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager"><property name="transactionManagerName" value="java:/TransactionManager" /><property name="userTransactionName" value="UserTransaction" /></bean></beans>這里需要注意的幾件事
- 將context:component-scan標記的base-package屬性更改為項目的基本包,以便掃描Spring組件(服務,DAO等)
- 根據persistence.xml文件中的指示,將entityManagerFactory bean的persistentUnitName屬性的value屬性更改為您的持久單元的名稱
下面顯示了一個示例persistence.xml文件:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0"><persistence-unit name="MyPersistenceUnit" transaction-type="JTA"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/MyDataSource</jta-data-source><properties><property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/><property name="hibernate.hbm2ddl.auto" value="update"/><property name="hibernate.show_sql" value="false"/><property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/><!-- Uncomment below to use Hibernate second lvl cache --><!--<property name="hibernate.cache.provider_class" value="org.hibernate.cache.TreeCacheProvider"/><property name="hibernate.treecache.mbean.object_name" value="jboss.cache:service=TreeCache"/><property name="hibernate.cache.use_second_level_cache" value="true"/><property name="hibernate.cache.use_query_cache" value="true"/><property name="hibernate.cache.use_structured_entries" value="true"/>--></properties></persistence-unit></persistence>這里需要注意的幾件事:
- 持久性單元名稱(此處為MyPersistenceUnit)必須與spring.xml文件中的值匹配
- 事務類型可以具有JTA或LOCAL值,我們的假設是我們正在啟用JTA的容器中進行部署,因此我們可以利用全局事務(JTA),在任何其他情況下,都應使用LOCAL值
- 如上所述,我們假設我們正在J2EE容器中進行部署,并且數據源在單獨的文件中聲明并且位于JNDI中,因此我們指示JPA使用在特定JNDI名稱下找到的數據源,您應該根據您的數據源JNDI名稱
- 我們要求Hibernate狀態使用Hypersonic方言,您應該根據數據源更改此值,例如,對于MySQL,此值應為org.hibernate.dialect.MySQLDialect(對于myISAM引擎)或org.hibernate.dialect.MySQLInnoDBDialect(對于InnoDB引擎)
- 我們要求Hibernate狀態查找我們的JTA事務管理器,例如,如果我們在JBoss內部部署,則使用指定的值,您應該根據您的環境更改此值
- 如果要啟用Hibernate第二個lvl緩存,只需取消注釋指定的配置指令
下面顯示了一個示例第二個lvl緩存(JBoss樹緩存– treecache.xml)文件:
<server><classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar" /><mbean code="org.jboss.cache.TreeCache" name="jboss.cache:service=TreeCache"><depends>jboss:service=Naming</depends><depends>jboss:service=TransactionManager</depends><attribute name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute><attribute name="IsolationLevel">REPEATABLE_READ</attribute><attribute name="CacheMode">LOCAL</attribute><attribute name="UseReplQueue">false</attribute><attribute name="ReplQueueInterval">0</attribute><attribute name="ReplQueueMaxElements">0</attribute><attribute name="ClusterName">TreeCache-Cluster</attribute><attribute name="ClusterConfig"><config><UDP mcast_addr="228.1.2.3" mcast_port="48866" ip_ttl="64"ip_mcast="true" mcast_send_buf_size="150000" mcast_recv_buf_size="80000"ucast_send_buf_size="150000" ucast_recv_buf_size="80000" loopback="false" /><PING timeout="2000" num_initial_members="3" up_thread="false"down_thread="false" /><MERGE2 min_interval="10000" max_interval="20000" /><FD_SOCK /><VERIFY_SUSPECT timeout="1500" up_thread="false"down_thread="false" /><pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"max_xmit_size="8192" up_thread="false" down_thread="false" /><UNICAST timeout="600,1200,2400" window_size="100"min_threshold="10" down_thread="false" /><pbcast.STABLE desired_avg_gossip="20000" up_thread="false"down_thread="false" /><FRAG frag_size="8192" down_thread="false" up_thread="false" /><pbcast.GMS join_timeout="5000" join_retry_timeout="2000"shun="true" print_local_addr="true" /><pbcast.STATE_TRANSFER up_thread="true"down_thread="true" /></config></attribute><attribute name="FetchInMemoryState">true</attribute><attribute name="InitialStateRetrievalTimeout">20000</attribute><attribute name="SyncReplTimeout">20000</attribute><attribute name="LockAcquisitionTimeout">15000</attribute><attribute name="EvictionPolicyClass"></attribute><attribute name="UseMarshalling">false</attribute></mbean></server>這里需要注意的幾件事
- 更新類加載器的路徑,以找到兩個必需的文件(jboss-cache.jar,jgroups.jar),JBoss樹緩存才能正常工作
- 該文件將樹緩存配置為JBoss MBean服務,因此必須將其部署在JBoss應用服務器中,其他配置類型不在本教程的討論范圍之內,因此將不作進一步討論。 有關在其他環境中配置JBoss樹緩存的信息,請參考相應的文檔。
就是這樣,現在讓我基于上述配置介紹一個示例DTO和DAO:
首先是DTO類(EmployeeDTO)
package com.mycomp.myproject.dto;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name = "EMPLOYEE") public class EmployeeDTO implements java.io.Serializable {private static final long serialVersionUID = 7440297955003302414L;@Id@Column(name="employee_id")private long employeeId;@Column(name="employee_name", nullable = false, length=30)private String employeeName;@Column(name="employee_surname", nullable = false, length=30)private String employeeSurname;@Column(name="job", length=50)private String job;public EmployeeDTO() {}public EmployeeDTO(int employeeId) {this.employeeId = employeeId; }public EmployeeDTO(long employeeId, String employeeName, String employeeSurname,String job) {this.employeeId = employeeId;this.employeeName = employeeName;this.employeeSurname = employeeSurname;this.job = job;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getEmployeeSurname() {return employeeSurname;}public void setEmployeeSurname(String employeeSurname) {this.employeeSurname = employeeSurname;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}}以下是用于訪問Employee數據(EmployeeDTO)的DAO類
package com.mycomp.myproject.dao;import javax.annotation.PostConstruct; import javax.persistence.EntityManagerFactory;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository;import com.mycomp.myproject.dto.EmployeeDTO;@Repository("employeeDAO") public class EmployeeDAO extends JpaDAO<Long, EmployeeDTO> {@AutowiredEntityManagerFactory entityManagerFactory;@PostConstructpublic void init() {super.setEntityManagerFactory(entityManagerFactory);}}如您所見,EmployeeDAO類擴展了基本的DAO類(JpaDao)。 EmployeeDAO類可以包含有關EmployeeDTO對象的特定查詢,但是所有CRUD操作都可以從下面提供的基本DAO類(JpaDao)中進行處理:
package com.mycomp.myproject.dao; import java.lang.reflect.ParameterizedType; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import javax.persistence.Query; import org.springframework.orm.jpa.JpaCallback; import org.springframework.orm.jpa.support.JpaDaoSupport; public abstract class JpaDAO<K, E> extends JpaDaoSupport { protected Class<E> entityClass; @SuppressWarnings("unchecked") public JpaDAO() { ParameterizedType genericSuperclass = (ParameterizedType) getClass() .getGenericSuperclass(); this.entityClass = (Class<E>) genericSuperclass .getActualTypeArguments()[1]; } public void persist(E entity) { getJpaTemplate().persist(entity); } public void remove(E entity) { getJpaTemplate().remove(entity); } public E merge(E entity) { return getJpaTemplate().merge(entity); } public void refresh(E entity) { getJpaTemplate().refresh(entity); } public E findById(K id) { return getJpaTemplate().find(entityClass, id); } public E flush(E entity) { getJpaTemplate().flush(); return entity; } @SuppressWarnings("unchecked") public List<E> findAll() { Object res = getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query q = em.createQuery("SELECT h FROM " + entityClass.getName() + " h"); return q.getResultList(); } }); return (List<E>) res; } @SuppressWarnings("unchecked") public Integer removeAll() { return (Integer) getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query q = em.createQuery("DELETE FROM " + entityClass.getName() + " h"); return q.executeUpdate(); } }); }}本教程的第二部分總結了我們將在此處討論有關Spring服務創建的內容。
賈斯汀
翻譯自: https://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html
jboss4.2.3
總結
以上是生活随笔為你收集整理的jboss4.2.3_JBoss 4.2.x Spring 3 JPA Hibernate教程的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 西安建筑科技大学研究生招生(西安建筑科技
- 下一篇: weblogic ejb_使用Oracl
