diff --git a/framework/src/play/classloading/ApplicationClassloader.java b/framework/src/play/classloading/ApplicationClassloader.java index baf572ab46..c02c2faae3 100644 --- a/framework/src/play/classloading/ApplicationClassloader.java +++ b/framework/src/play/classloading/ApplicationClassloader.java @@ -255,27 +255,15 @@ public InputStream getResourceAsStream(String name) { @Override public URL getResource(String name) { - try { for (VirtualFile vf : Play.javaPath) { VirtualFile res = vf.child(name); if (res != null && res.exists()) { + try { return res.getRealFile().toURI().toURL(); - } - } - if (Play.usePrecompiled) { - File file = Play.getFile("precompiled/java/" + name); - if (file.exists()) { - return file.toURI().toURL(); - } - } - else if ("true".equals(Play.configuration.getProperty("play.bytecodeCache", "true"))) { - File f = new File(Play.tmpDir, "classes/" + name); - if (f.exists()) { - return f.toURI().toURL(); - } - } } catch (MalformedURLException ex) { throw new UnexpectedException(ex); + } + } } return super.getResource(name); } diff --git a/framework/src/play/db/jpa/JPAPlugin.java b/framework/src/play/db/jpa/JPAPlugin.java index 0f9a343916..ae6e270e18 100644 --- a/framework/src/play/db/jpa/JPAPlugin.java +++ b/framework/src/play/db/jpa/JPAPlugin.java @@ -135,8 +135,8 @@ public void onApplicationStart() { JPQL.instance = new JPQL(); } - private List entityClasses(String dbName) { - List entityClasses = new ArrayList<>(); + private List entityClasses(String dbName) { + List entityClasses = new ArrayList<>(); List classes = Play.classloader.getAnnotatedClasses(Entity.class); for (Class clazz : classes) { @@ -144,9 +144,9 @@ private List entityClasses(String dbName) { // Do we have a transactional annotation matching our dbname? PersistenceUnit pu = clazz.getAnnotation(PersistenceUnit.class); if (pu != null && pu.name().equals(dbName)) { - entityClasses.add(clazz.getName()); + entityClasses.add(clazz); } else if (pu == null && JPA.DEFAULT.equals(dbName)) { - entityClasses.add(clazz.getName()); + entityClasses.add(clazz); } } } @@ -162,9 +162,9 @@ private List entityClasses(String dbName) { // Do we have a transactional annotation matching our dbname? PersistenceUnit pu = clazz.getAnnotation(PersistenceUnit.class); if (pu != null && pu.name().equals(dbName)) { - entityClasses.add(clazz.getName()); + entityClasses.add(clazz); } else if (pu == null && JPA.DEFAULT.equals(dbName)) { - entityClasses.add(clazz.getName()); + entityClasses.add(clazz); } } catch (Exception e) { Logger.warn(e, "JPA -> Entity not found: %s", entity); @@ -184,8 +184,11 @@ protected EntityManagerFactory newEntityManagerFactory(String dbName, Configurat } protected PersistenceUnitInfoImpl persistenceUnitInfo(String dbName, Configuration dbConfig) { - return new PersistenceUnitInfoImpl(dbName, - entityClasses(dbName), mappingFiles(dbConfig), properties(dbName, dbConfig)); + final List managedClasses = entityClasses(dbName); + final Properties properties = properties(dbName, dbConfig); + properties.put(org.hibernate.jpa.AvailableSettings.LOADED_CLASSES,managedClasses); + return new PersistenceUnitInfoImpl(dbName, + managedClasses, mappingFiles(dbConfig), properties); } private List mappingFiles(Configuration dbConfig) { diff --git a/framework/src/play/db/jpa/PersistenceUnitInfoImpl.java b/framework/src/play/db/jpa/PersistenceUnitInfoImpl.java index 1394fe1b0d..0f4a2bf063 100644 --- a/framework/src/play/db/jpa/PersistenceUnitInfoImpl.java +++ b/framework/src/play/db/jpa/PersistenceUnitInfoImpl.java @@ -12,6 +12,7 @@ import java.util.Collections; import java.util.List; import java.util.Properties; +import java.util.stream.Collectors; /** * @author Vlad Mihalcea @@ -24,7 +25,7 @@ public class PersistenceUnitInfoImpl implements PersistenceUnitInfo { private PersistenceUnitTransactionType transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL; - private final List managedClassNames; + private final List managedClasses; private final List mappingFileNames; private final Properties properties; @@ -33,9 +34,9 @@ public class PersistenceUnitInfoImpl implements PersistenceUnitInfo { private DataSource nonJtaDataSource; - public PersistenceUnitInfoImpl(String persistenceUnitName, List managedClassNames, List mappingFileNames, Properties properties) { + public PersistenceUnitInfoImpl(String persistenceUnitName, List managedClasses, List mappingFileNames, Properties properties) { this.persistenceUnitName = persistenceUnitName; - this.managedClassNames = managedClassNames; + this.managedClasses = managedClasses; this.mappingFileNames = mappingFileNames; this.properties = properties; } @@ -96,7 +97,7 @@ public URL getPersistenceUnitRootUrl() { @Override public List getManagedClassNames() { - return managedClassNames; + return managedClasses.stream().map(Class::getName).collect(Collectors.toList()); } @Override