Move JpaModule into a modules package
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/27d95cc8 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/27d95cc8 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/27d95cc8 Branch: refs/heads/master Commit: 27d95cc889051f9d1d2f64f94cdb286414f13ebc Parents: a6b5576 Author: Howard M. Lewis Ship <[email protected]> Authored: Mon Apr 22 17:06:32 2013 -0700 Committer: Howard M. Lewis Ship <[email protected]> Committed: Mon Apr 22 17:06:32 2013 -0700 ---------------------------------------------------------------------- tapestry-jpa/build.gradle | 2 +- .../java/org/apache/tapestry5/jpa/JpaModule.java | 189 --------------- .../apache/tapestry5/jpa/modules/JpaModule.java | 189 +++++++++++++++ .../java/org/example/app1/services/AppModule.java | 10 +- .../java/org/example/app2/services/AppModule.java | 4 +- .../java/org/example/app3/services/AppModule.java | 11 +- .../java/org/example/app4/services/AppModule.java | 4 +- .../java/org/example/app5/services/AppModule.java | 4 +- 8 files changed, 208 insertions(+), 205 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/build.gradle ---------------------------------------------------------------------- diff --git a/tapestry-jpa/build.gradle b/tapestry-jpa/build.gradle index 62d21bb..9ec388d 100644 --- a/tapestry-jpa/build.gradle +++ b/tapestry-jpa/build.gradle @@ -23,6 +23,6 @@ test { jar { manifest { - attributes 'Tapestry-Module-Classes': 'org.apache.tapestry5.jpa.JpaModule' + attributes 'Tapestry-Module-Classes': 'org.apache.tapestry5.jpa.modules.JpaModule' } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java deleted file mode 100644 index 2b01f57..0000000 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaModule.java +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2011 The Apache Software Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.tapestry5.jpa; - -import org.apache.tapestry5.ValueEncoder; -import org.apache.tapestry5.internal.InternalConstants; -import org.apache.tapestry5.internal.jpa.*; -import org.apache.tapestry5.internal.services.PersistentFieldManager; -import org.apache.tapestry5.ioc.*; -import org.apache.tapestry5.ioc.annotations.*; -import org.apache.tapestry5.ioc.services.*; -import org.apache.tapestry5.services.*; -import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; -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 -{ - public static void bind(final ServiceBinder binder) - { - binder.bind(JpaTransactionAdvisor.class, JpaTransactionAdvisorImpl.class); - binder.bind(PersistenceUnitConfigurer.class, PackageNamePersistenceUnitConfigurer.class).withSimpleId(); - binder.bind(EntityManagerSource.class, EntityManagerSourceImpl.class); - } - - public static JpaEntityPackageManager buildJpaEntityPackageManager(final Collection<String> packageNames) - { - return new JpaEntityPackageManager() - { - public Collection<String> getPackageNames() - { - return packageNames; - } - }; - } - - @Scope(ScopeConstants.PERTHREAD) - public static EntityManagerManager buildEntityManagerManager(final EntityManagerSource entityManagerSource, - final PerthreadManager perthreadManager, final Logger logger) - { - final EntityManagerManagerImpl service = new EntityManagerManagerImpl(entityManagerSource, logger); - - perthreadManager.addThreadCleanupListener(service); - - return service; - } - - @Contribute(JpaEntityPackageManager.class) - public static void provideEntityPackages(Configuration<String> configuration, - - @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM) - String appRootPackage) - { - configuration.add(appRootPackage + ".entities"); - } - - @Contribute(PersistentFieldManager.class) - public static void provideEntityPersistentFieldStrategies( - final MappedConfiguration<String, PersistentFieldStrategy> configuration) - { - configuration.addInstance(JpaPersistenceConstants.ENTITY, EntityPersistentFieldStrategy.class); - } - - @Contribute(ApplicationStatePersistenceStrategySource.class) - public void provideApplicationStatePersistenceStrategies( - final MappedConfiguration<String, ApplicationStatePersistenceStrategy> configuration) - { - configuration.addInstance(JpaPersistenceConstants.ENTITY, EntityApplicationStatePersistenceStrategy.class); - } - - @Contribute(ComponentClassTransformWorker2.class) - @Primary - public static void provideClassTransformWorkers(OrderedConfiguration<ComponentClassTransformWorker2> configuration) - { - configuration.addInstance("PersistenceContext", PersistenceContextWorker.class, "after:Property"); - configuration.addInstance("JPACommitAfter", CommitAfterWorker.class, "after:Log"); - } - - @Contribute(MasterObjectProvider.class) - public static void provideObjectProviders(final OrderedConfiguration<ObjectProvider> configuration) - { - configuration.addInstance("EntityManager", EntityManagerObjectProvider.class, - "before:AnnotationBasedContributions"); - } - - @Contribute(SymbolProvider.class) - @FactoryDefaults - public static void provideFactoryDefaults(final MappedConfiguration<String, String> configuration) - { - configuration.add(JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS, "true"); - configuration.add(JpaSymbols.EARLY_START_UP, "true"); - configuration.add(JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, "true"); - configuration.add(JpaSymbols.PERSISTENCE_DESCRIPTOR, "/META-INF/persistence.xml"); - } - - @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) - { - - if (!provideEncoders) - return; - - for (final PersistenceUnitInfo info : entityManagerSource.getPersistenceUnitInfos()) - { - final EntityManagerFactory emf = entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName()); - - final Metamodel metamodel = emf.getMetamodel(); - - 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(javaType)); - } - }; - - configuration.add(javaType, factory); - } - } - } - - @Contribute(ApplicationStateManager.class) - public static void provideApplicationStateContributions( - final MappedConfiguration<Class, ApplicationStateContribution> configuration, - final EntityManagerSource entityManagerSource, - @Symbol(JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED) - final boolean entitySessionStatePersistenceStrategyEnabled) - { - - if (!entitySessionStatePersistenceStrategyEnabled) - return; - - for (final PersistenceUnitInfo info : entityManagerSource.getPersistenceUnitInfos()) - { - final EntityManagerFactory emf = entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName()); - - final Metamodel metamodel = emf.getMetamodel(); - - for (EntityType<?> entity : metamodel.getEntities()) - { - configuration.add(entity.getJavaType(), new ApplicationStateContribution(JpaPersistenceConstants.ENTITY)); - } - - } - } - - @Startup - public static void startupEarly(final EntityManagerManager entityManagerManager, @Symbol(JpaSymbols.EARLY_START_UP) - final boolean earlyStartup) - { - if (!earlyStartup) - return; - - entityManagerManager.getEntityManagers(); - - } -} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java new file mode 100644 index 0000000..ff4be4f --- /dev/null +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java @@ -0,0 +1,189 @@ +// Copyright 2011-2013 The Apache Software Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.apache.tapestry5.jpa.modules; + +import org.apache.tapestry5.ValueEncoder; +import org.apache.tapestry5.internal.InternalConstants; +import org.apache.tapestry5.internal.jpa.*; +import org.apache.tapestry5.internal.services.PersistentFieldManager; +import org.apache.tapestry5.ioc.*; +import org.apache.tapestry5.ioc.annotations.*; +import org.apache.tapestry5.ioc.services.*; +import org.apache.tapestry5.jpa.*; +import org.apache.tapestry5.services.*; +import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; +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; + +/** + * Defines core services for JPA support. + * + * @since 5.3 + */ +public class JpaModule +{ + public static void bind(final ServiceBinder binder) + { + binder.bind(JpaTransactionAdvisor.class, JpaTransactionAdvisorImpl.class); + binder.bind(PersistenceUnitConfigurer.class, PackageNamePersistenceUnitConfigurer.class).withSimpleId(); + binder.bind(EntityManagerSource.class, EntityManagerSourceImpl.class); + } + + public static JpaEntityPackageManager buildJpaEntityPackageManager(final Collection<String> packageNames) + { + return new JpaEntityPackageManager() + { + public Collection<String> getPackageNames() + { + return packageNames; + } + }; + } + + @Scope(ScopeConstants.PERTHREAD) + public static EntityManagerManager buildEntityManagerManager(final EntityManagerSource entityManagerSource, + final PerthreadManager perthreadManager, final Logger logger) + { + final EntityManagerManagerImpl service = new EntityManagerManagerImpl(entityManagerSource, logger); + + perthreadManager.addThreadCleanupListener(service); + + return service; + } + + @Contribute(JpaEntityPackageManager.class) + public static void provideEntityPackages(Configuration<String> configuration, + + @Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM) + String appRootPackage) + { + configuration.add(appRootPackage + ".entities"); + } + + @Contribute(PersistentFieldManager.class) + public static void provideEntityPersistentFieldStrategies( + final MappedConfiguration<String, PersistentFieldStrategy> configuration) + { + configuration.addInstance(JpaPersistenceConstants.ENTITY, EntityPersistentFieldStrategy.class); + } + + @Contribute(ApplicationStatePersistenceStrategySource.class) + public void provideApplicationStatePersistenceStrategies( + final MappedConfiguration<String, ApplicationStatePersistenceStrategy> configuration) + { + configuration.addInstance(JpaPersistenceConstants.ENTITY, EntityApplicationStatePersistenceStrategy.class); + } + + @Contribute(ComponentClassTransformWorker2.class) + @Primary + public static void provideClassTransformWorkers(OrderedConfiguration<ComponentClassTransformWorker2> configuration) + { + configuration.addInstance("PersistenceContext", PersistenceContextWorker.class, "after:Property"); + configuration.addInstance("JPACommitAfter", CommitAfterWorker.class, "after:Log"); + } + + @Contribute(MasterObjectProvider.class) + public static void provideObjectProviders(final OrderedConfiguration<ObjectProvider> configuration) + { + configuration.addInstance("EntityManager", EntityManagerObjectProvider.class, + "before:AnnotationBasedContributions"); + } + + @Contribute(SymbolProvider.class) + @FactoryDefaults + public static void provideFactoryDefaults(final MappedConfiguration<String, String> configuration) + { + configuration.add(JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS, "true"); + configuration.add(JpaSymbols.EARLY_START_UP, "true"); + configuration.add(JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, "true"); + configuration.add(JpaSymbols.PERSISTENCE_DESCRIPTOR, "/META-INF/persistence.xml"); + } + + @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) + { + + if (!provideEncoders) + return; + + for (final PersistenceUnitInfo info : entityManagerSource.getPersistenceUnitInfos()) + { + final EntityManagerFactory emf = entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName()); + + final Metamodel metamodel = emf.getMetamodel(); + + 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(javaType)); + } + }; + + configuration.add(javaType, factory); + } + } + } + + @Contribute(ApplicationStateManager.class) + public static void provideApplicationStateContributions( + final MappedConfiguration<Class, ApplicationStateContribution> configuration, + final EntityManagerSource entityManagerSource, + @Symbol(JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED) + final boolean entitySessionStatePersistenceStrategyEnabled) + { + + if (!entitySessionStatePersistenceStrategyEnabled) + return; + + for (final PersistenceUnitInfo info : entityManagerSource.getPersistenceUnitInfos()) + { + final EntityManagerFactory emf = entityManagerSource.getEntityManagerFactory(info.getPersistenceUnitName()); + + final Metamodel metamodel = emf.getMetamodel(); + + for (EntityType<?> entity : metamodel.getEntities()) + { + configuration.add(entity.getJavaType(), new ApplicationStateContribution(JpaPersistenceConstants.ENTITY)); + } + + } + } + + @Startup + public static void startupEarly(final EntityManagerManager entityManagerManager, @Symbol(JpaSymbols.EARLY_START_UP) + final boolean earlyStartup) + { + if (!earlyStartup) + return; + + entityManagerManager.getEntityManagers(); + + } +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java index 617c3b4..e819aed 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011-2013 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,14 +23,16 @@ import org.apache.tapestry5.ioc.annotations.Match; import org.apache.tapestry5.ioc.annotations.SubModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.*; +import org.apache.tapestry5.jpa.EntityManagerSource; +import org.apache.tapestry5.jpa.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.modules.JpaModule; import org.example.app1.AppConstants; import org.example.app1.entities.Thang; import org.example.app1.entities.User; import org.example.app1.services.impl.UserDAOImpl; -import java.util.Properties; - @SubModule(JpaModule.class) public class AppModule { http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/test/java/org/example/app2/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/test/java/org/example/app2/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app2/services/AppModule.java index 6d42130..308bce7 100644 --- a/tapestry-jpa/src/test/java/org/example/app2/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app2/services/AppModule.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011-2013 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.SubModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.JpaModule; import org.apache.tapestry5.jpa.JpaSymbols; +import org.apache.tapestry5.jpa.modules.JpaModule; import org.example.app2.services.impl.UserDAOImpl; @SubModule(JpaModule.class) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java index a017d03..9e703a6 100644 --- a/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011-2013 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,10 +19,11 @@ import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.SubModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.*; -import org.example.app1.AppConstants; -import org.example.app1.entities.Thang; -import org.example.app1.entities.User; +import org.apache.tapestry5.jpa.EntityManagerSource; +import org.apache.tapestry5.jpa.JpaSymbols; +import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.modules.JpaModule; @SubModule(JpaModule.class) public class AppModule http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/test/java/org/example/app4/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/test/java/org/example/app4/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app4/services/AppModule.java index f25771c..0ead9ab 100644 --- a/tapestry-jpa/src/test/java/org/example/app4/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app4/services/AppModule.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011-2013 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,8 +19,8 @@ import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.SubModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.JpaModule; import org.apache.tapestry5.jpa.JpaSymbols; +import org.apache.tapestry5.jpa.modules.JpaModule; @SubModule(JpaModule.class) public class AppModule http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/27d95cc8/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java ---------------------------------------------------------------------- diff --git a/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java index ebf0eba..785b6ca 100644 --- a/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java @@ -1,4 +1,4 @@ -// Copyright 2012 The Apache Software Foundation +// Copyright 2012, 2013 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,9 +19,9 @@ import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.SubModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.JpaModule; import org.apache.tapestry5.jpa.JpaSymbols; import org.apache.tapestry5.jpa.integration.app5.DummyPersistenceProvider; +import org.apache.tapestry5.jpa.modules.JpaModule; import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceProviderResolver;
