[hibernate-commits] Hibernate SVN: r10911 - in branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb: . packaging

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Dec 1 16:57:11 EST 2006


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;
 	}




More information about the hibernate-commits mailing list