Author: epbernard
Date: 2006-10-03 22:45:35 -0400 (Tue, 03 Oct 2006)
New Revision: 10552
Added:
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Kitchen.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Oven.java
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/XmlHelper.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/AssociationTest.java
Log:
Code cleaning, potential bug fixes and more tests
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-10-04
02:42:01 UTC (rev 10551)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -114,9 +114,11 @@
private AnnotationConfiguration cfg;
private SettingsFactory settingsFactory;
+ //made transient and not restored in deserialization on purpose, should no longer be
called after restoration
private transient EventListenerConfigurator listenerConfigurator;
private PersistenceUnitTransactionType transactionType;
private boolean discardOnClose;
+ //made transient and not restored in deserialization on purpose, should no longer be
called after restoration
private transient ClassLoader overridenClassLoader;
@@ -191,7 +193,7 @@
try {
log.debug( "Look up for persistence unit: " + persistenceUnitName );
integration = integration == null ?
- integration = CollectionHelper.EMPTY_MAP :
+ CollectionHelper.EMPTY_MAP :
Collections.unmodifiableMap( integration );
Enumeration<URL> xmls = Thread.currentThread()
.getContextClassLoader()
@@ -344,6 +346,7 @@
new Properties();
ConfigurationHelper.overrideProperties( properties, integration );
+ //FIXME entities is used to enhance classes and to collect annotated entities this
should not be mixed
//fill up entities with the on found in xml files
addXMLEntities( xmlFiles, info, entities );
@@ -449,7 +452,7 @@
}
}
else if ( rootElement != null && "hibernate-mappings".equals(
rootElement.getName() ) ) {
- //TODO
+ //FIXME include hbm xml entities to enhance them but entities is also used to
collect annotated entities
}
}
catch (DocumentException e) {
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-10-04 02:42:01 UTC
(rev 10551)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-10-04 02:45:35 UTC
(rev 10552)
@@ -8,7 +8,7 @@
* @author Emmanuel Bernard
*/
public class Version {
- public static String VERSION = "3.2.0.CR2";
+ public static final String VERSION = "3.2.0.CR2";
private static Log log = LogFactory.getLog( Version.class );
static {
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java
===================================================================
---
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -2,6 +2,8 @@
package org.hibernate.ejb.connection;
import java.util.Properties;
+import java.sql.Connection;
+import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
@@ -18,6 +20,7 @@
* @see org.hibernate.connection.ConnectionProvider
*/
public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProvider {
+ //TODO make datasource connection provider properties protected in 3.3
private String user;
private String pass;
@@ -35,4 +38,13 @@
log.info( "Using provided datasource" );
}
+ @Override
+ public Connection getConnection() throws SQLException {
+ if (user != null || pass != null) {
+ return getDataSource().getConnection(user, pass);
+ }
+ else {
+ return getDataSource().getConnection();
+ }
+ }
}
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java 2006-10-04
02:42:01 UTC (rev 10551)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -25,7 +25,7 @@
catch (InvocationTargetException e) {
//keep runtime exceptions as is
if ( e.getTargetException() instanceof RuntimeException ) {
- throw (RuntimeException) e.getCause();
+ throw (RuntimeException) e.getTargetException();
}
else {
throw new RuntimeException( e.getTargetException() );
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java
===================================================================
---
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -14,16 +14,14 @@
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
+import javax.persistence.ExcludeDefaultListeners;
import javax.persistence.ExcludeSuperclassListeners;
import javax.persistence.MappedSuperclass;
import javax.persistence.PersistenceException;
-import javax.persistence.ExcludeDefaultListeners;
+import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XMethod;
-import org.hibernate.reflection.ReflectionManager;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* @author <a href="mailto:kabir.khan@jboss.org">Kabir Khan</a>
@@ -32,7 +30,7 @@
public final class CallbackResolver {
private static boolean useAnnotationAnnotatedByListener;
- {
+ static {
//check whether reading annotations of annotations is useful or not
useAnnotationAnnotatedByListener = false;
Target target = (Target) EntityListeners.class.getAnnotation( Target.class );
@@ -42,7 +40,6 @@
}
}
}
- private static Log log = LogFactory.getLog( CallbackResolver.class );
private CallbackResolver() {
}
@@ -107,13 +104,13 @@
while ( currentClazz != null );
//handle default listeners
- if (! stopDefaultListeners) {
+ if ( ! stopDefaultListeners ) {
List<Class> defaultListeners = (List<Class>)
reflectionManager.getDefaults().get( EntityListeners.class );
- if (defaultListeners != null) {
+ if ( defaultListeners != null ) {
int defaultListenerSize = defaultListeners.size();
- for (int i = defaultListenerSize - 1 ; i >= 0 ; i--) {
- orderedListeners.add( defaultListeners.get(i) );
+ for ( int i = defaultListenerSize - 1; i >= 0 ; i-- ) {
+ orderedListeners.add( defaultListeners.get( i ) );
}
}
}
@@ -127,13 +124,13 @@
List<XMethod> methods = xListener.getDeclaredMethods();
final int size = methods.size();
for ( int i = 0; i < size ; i++ ) {
- final XMethod xMethod = methods.get(i);
+ final XMethod xMethod = methods.get( i );
if ( xMethod.isAnnotationPresent( annotation ) ) {
final Method method = reflectionManager.toMethod( xMethod );
final String methodName = method.getName();
if ( ! callbacksMethodNames.contains( methodName ) ) {
//overriden method, remove the superclass overriden method
- if ( callback == null ) {
+ if ( callback == null ) {
try {
callback = new ListenerCallback( method, listener.newInstance() );
}
@@ -174,7 +171,7 @@
}
xListener = null; //xListener.getSuperclass();
}
- while (xListener != null);
+ while ( xListener != null );
}
}
return callbacks.toArray( new Callback[ callbacks.size() ] );
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java
===================================================================
---
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -33,7 +33,7 @@
catch (InvocationTargetException e) {
//keep runtime exceptions as is
if ( e.getTargetException() instanceof RuntimeException ) {
- throw (RuntimeException) e.getCause();
+ throw (RuntimeException) e.getTargetException();
}
else {
throw new RuntimeException( e.getTargetException() );
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java
===================================================================
---
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -3,14 +3,12 @@
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.cfg.Environment;
import org.hibernate.bytecode.util.ClassFilter;
import org.hibernate.bytecode.util.FieldFilter;
+import org.hibernate.cfg.Environment;
/**
* Enhance the classes allowing them to implements InterceptFieldEnabled
@@ -19,7 +17,6 @@
* @author Emmanuel Bernard
*/
public class InterceptFieldClassFileTransformer implements
javax.persistence.spi.ClassTransformer {
- Log log = LogFactory.getLog( InterceptFieldClassFileTransformer.class.getName() );
private org.hibernate.bytecode.ClassTransformer classTransformer;
public InterceptFieldClassFileTransformer(List<String> entities) {
@@ -29,11 +26,13 @@
final List<String> copyEntities = new ArrayList<String>( entities.size()
);
copyEntities.addAll( entities );
classTransformer = Environment.getBytecodeProvider().getTransformer(
+ //TODO change it to a static class to make it faster?
new ClassFilter() {
public boolean shouldInstrumentClass(String className) {
return copyEntities.contains( className );
}
},
+ //TODO change it to a static class to make it faster?
new FieldFilter() {
public boolean shouldInstrumentField(String className, String fieldName) {
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/XmlHelper.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/XmlHelper.java 2006-10-04
02:42:01 UTC (rev 10551)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/packaging/XmlHelper.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -144,17 +144,17 @@
}
NodeList children = element.getChildNodes();
- String result = "";
+ StringBuilder result = new StringBuilder("");
for ( int i = 0; i < children.getLength() ; i++ ) {
if ( children.item( i ).getNodeType() == Node.TEXT_NODE ||
children.item( i ).getNodeType() == Node.CDATA_SECTION_NODE ) {
- result += children.item( i ).getNodeValue();
+ result.append( children.item( i ).getNodeValue() );
}
- else if ( children.item( i ).getNodeType() == Node.COMMENT_NODE ) {
- // Ignore comment nodes
- }
+// else if ( children.item( i ).getNodeType() == Node.COMMENT_NODE ) {
+// // Ignore comment nodes
+// }
}
- return result.trim();
+ return result.toString().trim();
}
/**
Modified:
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/AssociationTest.java
===================================================================
---
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/AssociationTest.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/AssociationTest.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -29,10 +29,31 @@
em.close();
}
+ public void testMergeAndBidirOneToOne() throws Exception {
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+ Oven oven = new Oven();
+ Kitchen kitchen = new Kitchen();
+ em.persist( oven );
+ em.persist( kitchen );
+ kitchen.setOven( oven );
+ oven.setKitchen( kitchen );
+ em.flush();
+ em.clear();
+ //oven = em.find(Oven.class, oven.getId() );
+ oven = em.merge( oven );
+ em.flush();
+
+ em.getTransaction().rollback();
+ em.close();
+ }
+
public Class[] getAnnotatedClasses() {
return new Class[]{
Incident.class,
- IncidentStatus.class
+ IncidentStatus.class,
+ Kitchen.class,
+ Oven.class
};
}
}
Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Kitchen.java
===================================================================
---
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Kitchen.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Kitchen.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Kitchen {
+ @Id @GeneratedValue
+ private Long id;
+
+ @OneToOne(mappedBy = "kitchen")
+ private Oven oven;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Oven getOven() {
+ return oven;
+ }
+
+ public void setOven(Oven oven) {
+ this.oven = oven;
+ }
+}
Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Oven.java
===================================================================
---
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Oven.java 2006-10-04
02:42:01 UTC (rev 10551)
+++
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/association/Oven.java 2006-10-04
02:45:35 UTC (rev 10552)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Oven {
+ @Id @GeneratedValue
+ private Long id;
+
+ @OneToOne(fetch= FetchType.LAZY)
+ @JoinColumn
+ private Kitchen kitchen;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Kitchen getKitchen() {
+ return kitchen;
+ }
+
+ public void setKitchen(Kitchen kitchen) {
+ this.kitchen = kitchen;
+ }
+}