Author: epbernard
Date: 2006-12-01 16:57:11 -0500 (Fri, 01 Dec 2006)
New Revision: 10911
Modified:
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
Log:
EJB-246 adjust transaction type if jta-ds or non-jta-ds is used and not tx type is
explicitly set
Modified:
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-12-01
21:03:43 UTC (rev 10910)
+++
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-12-01
21:57:11 UTC (rev 10911)
@@ -325,13 +325,8 @@
// defineTransactionType( overridenTxType, info.getPersistenceUnitName() );
// }
// else {
+ // }
- PersistenceUnitTransactionType transactionType = info.getTransactionType();
- //in JavaEE the default is JTA
- transactionType = transactionType != null ? transactionType :
PersistenceUnitTransactionType.JTA;
- defineTransactionType( transactionType, workingVars );
- // }
- //workingVars.put( HibernatePersistence.TRANSACTION_TYPE, transactionType );
boolean[] detectArtifactForOtherJars = getDetectedArtifacts( info.getProperties(),
null, false );
boolean[] detectArtifactForMainJar = getDetectedArtifacts( info.getProperties(), null,
info.excludeUnlistedClasses() );
for ( URL jar : info.getJarFileUrls() ) {
@@ -361,27 +356,49 @@
if ( hbmFiles.size() > 0 ) workingVars.put( HibernatePersistence.HBXML_FILES,
hbmFiles );
//datasources
+ Boolean isJTA = null;
boolean overridenDatasource = false;
String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE );
if ( dataSource != null ) {
overridenDatasource = true;
properties.setProperty( Environment.DATASOURCE, dataSource );
+ isJTA = Boolean.TRUE;
}
dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE );
if ( dataSource != null ) {
overridenDatasource = true;
properties.setProperty( Environment.DATASOURCE, dataSource );
+ if (isJTA == null) isJTA = Boolean.FALSE;
}
if ( ! overridenDatasource && ( info.getJtaDataSource() != null ||
info.getNonJtaDataSource() != null ) ) {
+ isJTA = info.getJtaDataSource() != null ? Boolean.TRUE : Boolean.FALSE;
this.setDataSource(
- info.getJtaDataSource() != null ? info.getJtaDataSource() :
info.getNonJtaDataSource()
+ isJTA ? info.getJtaDataSource() : info.getNonJtaDataSource()
);
this.setProperty(
Environment.CONNECTION_PROVIDER,
InjectedDataSourceConnectionProvider.class.getName()
);
}
-
+ /*
+ * If explicit type => use it
+ * If a JTA DS is used => JTA transaction,
+ * if a non JTA DS is used => RESOURCe_LOCAL
+ * if none, set to JavaEE default => JTA transaction
+ */
+ PersistenceUnitTransactionType transactionType = info.getTransactionType();
+ if (transactionType == null) {
+ if (isJTA == Boolean.TRUE) {
+ transactionType = PersistenceUnitTransactionType.JTA;
+ }
+ else if ( isJTA == Boolean.FALSE ) {
+ transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+ }
+ else {
+ transactionType = PersistenceUnitTransactionType.JTA;
+ }
+ }
+ defineTransactionType( transactionType, workingVars );
configure( properties, workingVars );
}
finally {
Modified:
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java 2006-12-01
21:03:43 UTC (rev 10910)
+++
branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java 2006-12-01
21:57:11 UTC (rev 10911)
@@ -115,11 +115,8 @@
log.trace( "Persistent Unit name from persistence.xml: " + puName );
metadata.setName( puName );
}
- PersistenceUnitTransactionType transactionType = getTransactionType( top.getAttribute(
"transaction-type" ) );
- //parsing a persistence.xml means we are in a JavaSE environment
- transactionType = transactionType != null ? transactionType :
PersistenceUnitTransactionType.RESOURCE_LOCAL;
- metadata.setTransactionType( transactionType );
NodeList children = top.getChildNodes();
+ Boolean isJTA = null;
for ( int i = 0; i < children.getLength() ; i++ ) {
if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
Element element = (Element) children.item( i );
@@ -132,9 +129,11 @@
// else
if ( tag.equals( "non-jta-data-source" ) ) {
metadata.setNonJtaDatasource( XmlHelper.getElementContent( element ) );
+ if (isJTA == null) isJTA = Boolean.FALSE;
}
else if ( tag.equals( "jta-data-source" ) ) {
metadata.setJtaDatasource( XmlHelper.getElementContent( element ) );
+ isJTA = Boolean.TRUE;
}
else if ( tag.equals( "provider" ) ) {
metadata.setProvider( XmlHelper.getElementContent( element ) );
@@ -170,6 +169,25 @@
}
}
}
+ /*
+ * if explicit => use it
+ * if JTA DS => JTA transaction
+ * if non JTA DA => RESULRCE_LOCAL transaction
+ * else default JavaSE => RESOURCE_LOCAL
+ */
+ PersistenceUnitTransactionType transactionType = getTransactionType( top.getAttribute(
"transaction-type" ) );
+ if (transactionType == null) {
+ if (isJTA == Boolean.TRUE) {
+ transactionType = PersistenceUnitTransactionType.JTA;
+ }
+ else if (isJTA == Boolean.FALSE) {
+ transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+ }
+ else {
+ transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+ }
+ }
+ metadata.setTransactionType( transactionType );
return metadata;
}
Show replies by thread