Author: drobiazko
Date: Sun Jul 17 20:05:55 2011
New Revision: 1147707
URL: http://svn.apache.org/viewvc?rev=1147707&view=rev
Log:
TAP5-1576: JPA Integration 5.3.0 with Primary Key Entity Classes Fails
Modified:
tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java
Modified:
tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java?rev=1147707&r1=1147706&r2=1147707&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java
Sun Jul 17 20:05:55 2011
@@ -14,26 +14,9 @@
package org.apache.tapestry5.jpa;
-import java.util.Collection;
-import java.util.Map;
-
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.metamodel.EntityType;
-import javax.persistence.metamodel.Metamodel;
-import javax.persistence.spi.PersistenceUnitInfo;
-
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.internal.jpa.CommitAfterWorker;
-import
org.apache.tapestry5.internal.jpa.EntityApplicationStatePersistenceStrategy;
-import org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl;
-import org.apache.tapestry5.internal.jpa.EntityManagerObjectProvider;
-import org.apache.tapestry5.internal.jpa.EntityManagerSourceImpl;
-import org.apache.tapestry5.internal.jpa.EntityPersistentFieldStrategy;
-import org.apache.tapestry5.internal.jpa.JpaTransactionAdvisorImpl;
-import org.apache.tapestry5.internal.jpa.JpaValueEncoder;
-import org.apache.tapestry5.internal.jpa.PackageNamePersistenceUnitConfigurer;
-import org.apache.tapestry5.internal.jpa.PersistenceContextWorker;
+import org.apache.tapestry5.internal.jpa.*;
import org.apache.tapestry5.internal.services.PersistentFieldManager;
import org.apache.tapestry5.ioc.Configuration;
import org.apache.tapestry5.ioc.LoggerSource;
@@ -65,9 +48,16 @@ import org.apache.tapestry5.services.Val
import org.apache.tapestry5.services.ValueEncoderSource;
import org.slf4j.Logger;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.metamodel.EntityType;
+import javax.persistence.metamodel.Metamodel;
+import javax.persistence.spi.PersistenceUnitInfo;
+import java.util.Collection;
+import java.util.Map;
+
/**
* Defines core services for JPA support.
- *
+ *
* @since 5.3
*/
public class JpaModule
@@ -81,15 +71,15 @@ public class JpaModule
public static EntityManagerSource buildEntityManagerSource(final Logger
logger,
- @Symbol(JpaSymbols.PERSISTENCE_DESCRIPTOR)
- Resource persistenceDescriptor,
+
@Symbol(JpaSymbols.PERSISTENCE_DESCRIPTOR)
+ Resource
persistenceDescriptor,
- @Local
- PersistenceUnitConfigurer persistenceUnitConfigurer,
+ @Local
+
PersistenceUnitConfigurer persistenceUnitConfigurer,
- final Map<String, PersistenceUnitConfigurer> configuration,
+ final
Map<String, PersistenceUnitConfigurer> configuration,
- final RegistryShutdownHub hub)
+ final
RegistryShutdownHub hub)
{
final EntityManagerSourceImpl ems = new
EntityManagerSourceImpl(logger, persistenceDescriptor,
persistenceUnitConfigurer, configuration);
@@ -112,7 +102,7 @@ public class JpaModule
@Scope(ScopeConstants.PERTHREAD)
public static EntityManagerManager buildEntityManagerManager(final
EntityManagerSource entityManagerSource,
- final PerthreadManager perthreadManager, final Logger logger)
+ final
PerthreadManager perthreadManager, final Logger logger)
{
final EntityManagerManagerImpl service = new
EntityManagerManagerImpl(entityManagerSource, logger);
@@ -124,8 +114,8 @@ public class JpaModule
@Contribute(JpaEntityPackageManager.class)
public static void provideEntityPackages(Configuration<String>
configuration,
- @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
- String appRootPackage)
+
@Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
+ String appRootPackage)
{
configuration.add(appRootPackage + ".entities");
}
@@ -171,10 +161,10 @@ public class JpaModule
@Contribute(ValueEncoderSource.class)
public static void provideValueEncoders(final MappedConfiguration<Class,
ValueEncoderFactory> configuration,
- @Symbol(JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS)
- final boolean provideEncoders, final EntityManagerSource
entityManagerSource,
- final EntityManagerManager entityManagerManager, final TypeCoercer
typeCoercer,
- final PropertyAccess propertyAccess, final LoggerSource
loggerSource)
+
@Symbol(JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS)
+ final boolean provideEncoders,
final EntityManagerSource entityManagerSource,
+ final EntityManagerManager
entityManagerManager, final TypeCoercer typeCoercer,
+ final PropertyAccess
propertyAccess, final LoggerSource loggerSource)
{
if (!provideEncoders)
@@ -184,24 +174,22 @@ public class JpaModule
{
final EntityManagerFactory emf =
entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName());
- for (final String className : info.getManagedClassNames())
- {
- final Metamodel metamodel = emf.getMetamodel();
-
- final Class<?> clazz = loadClass(info, className);
+ final Metamodel metamodel = emf.getMetamodel();
- final EntityType<?> entity = metamodel.entity(clazz);
+ for (final EntityType<?> entity : metamodel.getEntities())
+ {
+ final Class<?> javaType = entity.getJavaType();
final ValueEncoderFactory factory = new ValueEncoderFactory()
{
public ValueEncoder create(final Class type)
{
return new JpaValueEncoder(entity,
entityManagerManager, info.getPersistenceUnitName(),
- propertyAccess, typeCoercer,
loggerSource.getLogger(clazz));
+ propertyAccess, typeCoercer,
loggerSource.getLogger(javaType));
}
};
- configuration.add(clazz, factory);
+ configuration.add(javaType, factory);
}
}
}
@@ -219,12 +207,15 @@ public class JpaModule
for (final PersistenceUnitInfo info :
entityManagerSource.getPersistenceUnitInfos())
{
- for (final String className : info.getManagedClassNames())
- {
- final Class<?> clazz = loadClass(info, className);
+ final EntityManagerFactory emf =
entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName());
+
+ final Metamodel metamodel = emf.getMetamodel();
- configuration.add(clazz, new
ApplicationStateContribution(JpaPersistenceConstants.ENTITY));
+ for (EntityType<?> entity : metamodel.getEntities())
+ {
+ configuration.add(entity.getJavaType(), new
ApplicationStateContribution(JpaPersistenceConstants.ENTITY));
}
+
}
}
@@ -238,16 +229,4 @@ public class JpaModule
entityManagerManager.getEntityManagers();
}
-
- private static Class loadClass(final PersistenceUnitInfo info, final
String className)
- {
- try
- {
- return info.getClassLoader().loadClass(className);
- }
- catch (final ClassNotFoundException e)
- {
- throw new RuntimeException(e);
- }
- }
}