Tabla de contenidos
Objetivo
Mostrar las diferentes formas de configurar Hibernate dentro del JBoss
Pasos para configurar Hibernate en JBoss-4.0.2 sin EJBs
Crear un Data Source para la BD
Configurar hibernate.cfg.xml:
- Se debe configurar a Hibernate para que tome el DataSource? del application server
<property name="connection.datasource">java:/MySqlDS</property>
- Seleccionar JTA como Transaction Factory
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
De esta manera, la transaccionabilidad es manejada por JBoss. Se utiliza CMT. Esta funcionalidad es debida a que la interface Transaction de Hibernate implementa la funcionalidad de JTA y JDBC (se podría haber optado por este factory (JDBCTransactionFactory) pero la transaccionabilidad no sería manejada por el application server).
También es necesario setear el transaction manager lookup:
<property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
- Se pueden setear las siguientes propiedades tambien:
<property name="transaction.flush_before_completion">true</property> <property name="transaction.auto_close_session">true</property>
Conectar el session factory name con JNDI
<property name="session_factory_name">hibernate/HibernateFactory</property>
- Cambiar el ClassLoader WEB de Tomcat al de JBoss
Este es uno de los cambios de JBoss-4.0.1 a JBoss-4.0.2 . De esta manera se esta volviendo a lo anterior... Editar jboss-service.xml de ../JBOSS/xxxx/deploy/jbossweb-tomcat55.sar/META-INF: Pasar los dos atributos siguientes a true como se ve a continuación
<attribute name="Java2ClassLoadingCompliance">true</attribute> <attribute name="UseJBossWebLoader">true</attribute>Thread del foro oficial de Hibernate donde se encontró la solución
Pasos para configurar Hibernate en JBoss-4.0.2 con EJBs
- Crear un DataSource para la BD. Es aconsejable que sea del tipo xa-datasource
- Configuración propia de hibernate
<hibernate-configuration> <session-factory> <property name="session_factory_name">hibernate/HibernateFactory</property> <property name="hibernate.connection.datasource">java:/EbankSQLServer</property> <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.transaction.flush_before_completion">true</property> <property name="hibernate.transaction.auto_close_session">true</property> <property name="transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property> <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <mapping resource="path_a_los_hbm/miMapeo.hbm.xml" /> </session-factory> </hibernate-configuration> - ejb-jar.xml : hay que configurarlo para que los EJBs usen transacciones manejadas por el contenedor y para definir los atributos de la transacción. Para conocer un poco más, aca hay un articulo sobre Ejbs y Transacciones
- Todos los EJB deben tener <transaction-type>Container</transaction-type>. XDoclet usa este tipo por defecto
- Indicar para todos los session beans el atributo de la transaccion. Ej:
<container-transaction > <method > <ejb-name>TestSession</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction>
Se puede agregar con el tag @ejb.transaction type="tipo_de_transaccion" de XDoclet. Creo que por defecto es Required que es el tipo mas usado
Referencias
- Capítulo 2.3.3 de Hibernate in Action: Configuración de Hibernate 3 y JBoss
Contribuyentes a esta página: flor
y
diegom
.
Page last modified on Viernes 14 de Julio, 2006 18:58:37 EDT by flor
.
El contenido de esta página esta licenciado bajo los términos del http://creativecommons.org/licenses/by-sa/2.5/legalcode.
