You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/08/11 23:55:54 UTC
svn commit: r1372032 -
/openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java
Author: rmannibucau
Date: Sat Aug 11 21:55:54 2012
New Revision: 1372032
URL: http://svn.apache.org/viewvc?rev=1372032&view=rev
Log:
better management of prefix with eclipselinks for manytomany, embedded collection and default sequence
Modified:
openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java
Modified: openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java?rev=1372032&r1=1372031&r2=1372032&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java (original)
+++ openejb/trunk/openejb/container/openejb-jpa-integration/src/main/java/org/apache/openejb/jpa/integration/eclipselink/PrefixSessionCustomizer.java Sat Aug 11 21:55:54 2012
@@ -20,8 +20,20 @@ import org.apache.openejb.jpa.integratio
import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.helper.DatabaseTable;
+import org.eclipse.persistence.internal.sequencing.SequencingHome;
+import org.eclipse.persistence.internal.sequencing.SequencingServer;
+import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
+import org.eclipse.persistence.mappings.DatabaseMapping;
+import org.eclipse.persistence.mappings.DirectCollectionMapping;
+import org.eclipse.persistence.mappings.ManyToManyMapping;
+import org.eclipse.persistence.sequencing.Sequence;
+import org.eclipse.persistence.sequencing.SequencingControl;
+import org.eclipse.persistence.sequencing.TableSequence;
import org.eclipse.persistence.sessions.Session;
+import org.eclipse.persistence.sessions.server.ServerSession;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
public class PrefixSessionCustomizer implements SessionCustomizer {
@@ -29,11 +41,32 @@ public class PrefixSessionCustomizer imp
public void customize(final Session session) throws Exception {
if (JPAThreadContext.infos.containsKey("properties")) {
final String prefix = ((Properties) JPAThreadContext.infos.get("properties")).getProperty("openejb.jpa.table_prefix");
+ final List<DatabaseTable> tables = new ArrayList<DatabaseTable>();
for (ClassDescriptor cd : session.getDescriptors().values()) {
for (DatabaseTable table : cd.getTables()) {
- table.setName(prefix + table.getName());
+ update(prefix, tables, table);
}
+ for (DatabaseMapping mapping : cd.getMappings()) {
+ if (mapping instanceof ManyToManyMapping) {
+ update(prefix, tables, ((ManyToManyMapping) mapping).getRelationTable());
+ } else if (mapping instanceof DirectCollectionMapping) {
+ update(prefix, tables, ((DirectCollectionMapping) mapping).getReferenceTable());
+ } // TODO: else check we need to update something
+ }
+ }
+
+ final Sequence sequence = session.getDatasourcePlatform().getDefaultSequence();
+ if (sequence instanceof TableSequence) {
+ final TableSequence ts = ((TableSequence) sequence);
+ ts.setTableName(prefix + ts.getName());
}
}
}
+
+ private void update(final String prefix, final List<DatabaseTable> tables, final DatabaseTable table) {
+ if (!tables.contains(table)) {
+ table.setName(prefix + table.getName());
+ tables.add(table);
+ }
+ }
}