[hibernate-commits] Hibernate SVN: r10912 - in branches/Branch_3_2/HibernateExt/ejb: . lib src/java/org/hibernate/ejb src/java/org/hibernate/ejb/packaging src/test/org/hibernate/ejb/test src/test/org/hibernate/ejb/test/pack src/test/org/hibernate/ejb/test/pack/overridenpar src/test-resources src/test-resources/overridenpar src/test-resources/overridenpar/META-INF

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Dec 4 12:10:38 EST 2006


Author: epbernard
Date: 2006-12-04 12:10:27 -0500 (Mon, 04 Dec 2006)
New Revision: 10912

Added:
   branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/
   branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/META-INF/
   branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/META-INF/persistence.xml
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/overridenpar/
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java
Modified:
   branches/Branch_3_2/HibernateExt/ejb/build.xml
   branches/Branch_3_2/HibernateExt/ejb/lib/hibernate-annotations.jar
   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/PersistenceMetadata.java
   branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java
Log:
EJB-254 overriding DS is possible

Modified: branches/Branch_3_2/HibernateExt/ejb/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/build.xml	2006-12-01 21:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/build.xml	2006-12-04 17:10:27 UTC (rev 10912)
@@ -109,6 +109,10 @@
             <param name="extension" value="par"/>
             <param name="jarname" value="cfgxmlpar"/>
         </antcall>
+		<antcall target="packjar" inheritall="true">
+            <param name="extension" value="jar"/>
+            <param name="jarname" value="overridenpar"/>
+        </antcall>
 
 		<antcall target="packexploded" inheritall="true">
             <param name="extension" value="par"/>

Modified: branches/Branch_3_2/HibernateExt/ejb/lib/hibernate-annotations.jar
===================================================================
(Binary files differ)

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:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java	2006-12-04 17:10:27 UTC (rev 10912)
@@ -174,7 +174,12 @@
 		}
 		Properties props = new Properties();
 		props.putAll( metadata.getProps() );
-		if ( overrides != null ) props.putAll( overrides ); //yuk!
+		if ( overrides != null ) {
+			for ( Map.Entry entry : (Set<Map.Entry>) overrides.entrySet() ) {
+				Object value = entry.getValue();
+				props.put( entry.getKey(), value == null ? "" :  value ); //alter null, not allowed in properties
+			}
+		}
 		configure( props, workingVars );
 		return this;
 	}
@@ -358,14 +363,14 @@
 			//datasources
 			Boolean isJTA = null;
 			boolean overridenDatasource = false;
-			String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE );
-			if ( dataSource != null ) {
+			if ( integration.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
+				String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE );
 				overridenDatasource = true;
 				properties.setProperty( Environment.DATASOURCE, dataSource );
 				isJTA = Boolean.TRUE;
 			}
-			dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE );
-			if ( dataSource != null ) {
+			if ( integration.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
+				String dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE );
 				overridenDatasource = true;
 				properties.setProperty( Environment.DATASOURCE, dataSource );
 				if (isJTA == null) isJTA = Boolean.FALSE;

Modified: branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2006-12-01 21:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2006-12-04 17:10:27 UTC (rev 10912)
@@ -21,7 +21,7 @@
 	private String nonJtaDatasource;
 	private String jtaDatasource;
 	private String provider;
-	private PersistenceUnitTransactionType transactionType = PersistenceUnitTransactionType.JTA;
+	private PersistenceUnitTransactionType transactionType;
 	private List<String> classes = new ArrayList<String>();
 	private List<String> packages = new ArrayList<String>();
 	private List<String> mappingFiles = new ArrayList<String>();

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:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java	2006-12-04 17:10:27 UTC (rev 10912)
@@ -81,22 +81,48 @@
 				if ( tag.equals( "persistence-unit" ) ) {
 					PersistenceMetadata metadata = parsePersistenceUnit( element );
 					//override properties of metadata if needed
-					String provider = (String) overrides.get( HibernatePersistence.PROVIDER );
-					if ( provider != null ) {
+					if ( overrides.containsKey( HibernatePersistence.PROVIDER ) ) {
+						String provider = (String) overrides.get( HibernatePersistence.PROVIDER );
 						metadata.setProvider( provider );
 					}
-					String transactionType = (String) overrides.get( HibernatePersistence.TRANSACTION_TYPE );
-					if ( StringHelper.isNotEmpty( transactionType ) ) {
+					if ( overrides.containsKey( HibernatePersistence.TRANSACTION_TYPE ) ) {
+						String transactionType = (String) overrides.get( HibernatePersistence.TRANSACTION_TYPE );
 						metadata.setTransactionType( PersistenceXmlLoader.getTransactionType( transactionType ) );
 					}
-					String dataSource = (String) overrides.get( HibernatePersistence.JTA_DATASOURCE );
-					if ( dataSource != null ) {
+					if ( overrides.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
+						String dataSource = (String) overrides.get( HibernatePersistence.JTA_DATASOURCE );
 						metadata.setJtaDatasource( dataSource );
 					}
-					dataSource = (String) overrides.get( HibernatePersistence.NON_JTA_DATASOURCE );
-					if ( dataSource != null ) {
+					if ( overrides.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
+						String dataSource = (String) overrides.get( HibernatePersistence.NON_JTA_DATASOURCE );
 						metadata.setNonJtaDatasource( dataSource );
 					}
+					/*
+					 * if explicit => use it
+					 * if JTA DS => JTA transaction
+					 * if non JTA DA => RESOURCE_LOCAL transaction
+					 * else default JavaSE => RESOURCE_LOCAL
+					 */
+					PersistenceUnitTransactionType transactionType = metadata.getTransactionType();
+					Boolean isJTA = null;
+					if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) {
+						isJTA = Boolean.TRUE;
+					}
+					else if ( StringHelper.isNotEmpty( metadata.getNonJtaDatasource() ) ) {
+						isJTA = Boolean.FALSE;
+					}
+					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 );
 					Properties properties = metadata.getProps();
 					ConfigurationHelper.overrideProperties( properties, overrides );
 					units.add( metadata );
@@ -116,7 +142,6 @@
 			metadata.setName( puName );
 		}
 		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 );
@@ -129,11 +154,9 @@
 //				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 ) );
@@ -169,25 +192,8 @@
 				}
 			}
 		}
-		/*
-		 * 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 );
+		if (transactionType != null) metadata.setTransactionType( transactionType );
 
 		return metadata;
 	}

Modified: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	2006-12-01 21:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	2006-12-04 17:10:27 UTC (rev 10912)
@@ -8,6 +8,7 @@
 import javax.persistence.PersistenceException;
 
 import org.hibernate.ejb.HibernateEntityManagerFactory;
+import org.hibernate.ejb.HibernatePersistence;
 import org.hibernate.ejb.test.pack.cfgxmlpar.Morito;
 import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
 import org.hibernate.ejb.test.pack.defaultpar.IncrementListener;
@@ -190,6 +191,27 @@
 		emf.close();
 	}
 
+	public void testOverridenPar() throws Exception {
+		HashMap properties = new HashMap();
+		properties.put( HibernatePersistence.JTA_DATASOURCE, null );
+		properties.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDriver" );
+		properties.put( "hibernate.connection.username", "sa" );
+		properties.put( "hibernate.connection.password", "" );
+		properties.put( "hibernate.connection.url", "jdbc:hsqldb:." );
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "overridenpar", properties );
+		EntityManager em = emf.createEntityManager();
+		org.hibernate.ejb.test.pack.overridenpar.Bug bug = new org.hibernate.ejb.test.pack.overridenpar.Bug();
+		bug.setSubject( "Allow DS overriding");
+		em.getTransaction().begin();
+		em.persist( bug );
+		em.flush();
+		em.remove( bug );
+		assertNotNull( bug.getId() );
+		em.getTransaction().rollback();
+		em.close();
+		emf.close();
+	}
+
 	public void testListenersOverridingCfgXmlPar() throws Exception {
 		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "cfgxmlpar", new HashMap() );
 		EntityManager em = emf.createEntityManager();

Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	2006-12-01 21:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	2006-12-04 17:10:27 UTC (rev 10912)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.overridenpar;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Bug {
+	@Id
+	@GeneratedValue
+	private Long id;
+	private String subject;
+	private String comment;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}

Added: branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/META-INF/persistence.xml	2006-12-01 21:57:11 UTC (rev 10911)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test-resources/overridenpar/META-INF/persistence.xml	2006-12-04 17:10:27 UTC (rev 10912)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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="overridenpar">
+        <jta-data-source>java:/unreachableDS</jta-data-source>
+		<properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+        </properties>
+    </persistence-unit>
+</persistence>




More information about the hibernate-commits mailing list