From adafac34e6f9e1ab4d035a65706c5f6b12174d0b Mon Sep 17 00:00:00 2001
From: kmoore
Date: Tue, 6 Mar 2012 19:05:41 +0000
Subject: Bug 373414 - [EclipseLink] support DDL generation for dynamic classes
using the DynamicClassLoader
---
.../META-INF/MANIFEST.MF | 3 +-
.../jpt/jpa/eclipselink/core/ddlgen/Main.java | 38 ++++++++++------
.../ddlgen/AbstractEclipseLinkDDLGenerator.java | 50 ++++++++++++++--------
3 files changed, 58 insertions(+), 33 deletions(-)
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/META-INF/MANIFEST.MF
index c1ce439fe4..079058f613 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/META-INF/MANIFEST.MF
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/META-INF/MANIFEST.MF
@@ -6,6 +6,7 @@ Bundle-SymbolicName: org.eclipse.jpt.jpa.eclipselink.core.ddlgen;singleton:=true
Bundle-Version: 2.0.100.qualifier
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Require-Bundle: org.eclipse.jpt.jpa.eclipselink.core;bundle-version="[2.0.0,3.0.0)"
+Require-Bundle: org.eclipse.jpt.jpa.eclipselink.core;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.persistence.core;bundle-version="[2.4.0,3.0.0)"
Import-Package: javax.persistence
Export-Package: org.eclipse.jpt.jpa.eclipselink.core.ddlgen
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/src/org/eclipse/jpt/jpa/eclipselink/core/ddlgen/Main.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/src/org/eclipse/jpt/jpa/eclipselink/core/ddlgen/Main.java
index 3fd03400c8..6a4e5af92a 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/src/org/eclipse/jpt/jpa/eclipselink/core/ddlgen/Main.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core.ddlgen/src/org/eclipse/jpt/jpa/eclipselink/core/ddlgen/Main.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2007, 2011 Oracle. All rights reserved.
+* Copyright (c) 2007, 2012 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
@@ -19,6 +19,8 @@ import java.util.Set;
import java.util.Map.Entry;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.eclipse.persistence.dynamic.DynamicClassLoader;
/**
* This class creates a EclipseLink EntityManagerFactory
,
@@ -29,6 +31,8 @@ import javax.persistence.Persistence;
* Current command-line arguments:
* [-pu puName] - persistence unit name
* [-p propertiesFilePath] - properties for EclipseLink EntityManager
+ * [-debug] - debug mode
+ * [-dynamic] - use the org.eclipse.persistence.dynamic.DynamicClassLoader
*
* Example of a properties file:
* eclipselink.jdbc.bind-parameters=false
@@ -49,7 +53,7 @@ import javax.persistence.Persistence;
public class Main
{
protected EntityManagerFactory emf;
- private Map eclipseLinkProperties;
+ private Map eclipseLinkProperties;
private String eclipseLinkPropertiesPath;
private boolean isDebugMode;
@@ -86,22 +90,30 @@ public class Main
}
private void initializeWith(String[] args) {
-
this.eclipseLinkPropertiesPath = this.getEclipseLinkPropertiesPath(args);
this.eclipseLinkProperties = this.getProperties(this.eclipseLinkPropertiesPath);
+ this.setDynamicClassLoaderProperty(args);
this.isDebugMode = this.getDebugMode(args);
}
-
- private void dispose() {
+ private void setDynamicClassLoaderProperty(String[] args) {
+ if (this.getEclipseLinkDynamic(args)) {
+ this.eclipseLinkProperties.put(PersistenceUnitProperties.CLASSLOADER, this.buildDynamicClassLoader());
+ }
+ }
+
+ private ClassLoader buildDynamicClassLoader() {
+ return new DynamicClassLoader(Thread.currentThread().getContextClassLoader());
+ }
+
+ private void dispose() {
if( ! this.isDebugMode) {
new File(this.eclipseLinkPropertiesPath).delete();
}
}
- private Map getProperties(String eclipseLinkPropertiesPath) {
-
+ private Map getProperties(String eclipseLinkPropertiesPath) {
Set> propertiesSet = null;
try {
propertiesSet = this.loadEclipseLinkProperties(eclipseLinkPropertiesPath);
@@ -110,15 +122,14 @@ public class Main
throw new RuntimeException("Missing: " + eclipseLinkPropertiesPath, e); //$NON-NLS-1$
}
- Map properties = new HashMap();
+ Map properties = new HashMap();
for(Entry