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);
+        }
+    }
 }


Reply via email to