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