diff options
author | Martin Taal | 2011-05-12 09:07:09 +0000 |
---|---|---|
committer | Martin Taal | 2011-05-12 09:07:09 +0000 |
commit | 1d51ff38dbbc07736b0486ec6471a15e8bde6f4d (patch) | |
tree | c573c4c64cbd49001c4dda2c96fdecf6a29b0017 /plugins/org.eclipse.emf.cdo.server.hibernate | |
parent | 37b119d9b81c213d9d0c8e96e34e005160899f6d (diff) | |
download | cdo-1d51ff38dbbc07736b0486ec6471a15e8bde6f4d.tar.gz cdo-1d51ff38dbbc07736b0486ec6471a15e8bde6f4d.tar.xz cdo-1d51ff38dbbc07736b0486ec6471a15e8bde6f4d.zip |
Fixes bugzilla 345432 - [Hibernate] Small robustness change
Fixes bugzilla 345550 - [Hibernate] solve compile warnings and implement remove of system propertie
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.hibernate')
10 files changed, 141 insertions, 31 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java index 02e2425b8f..fc51c2c4ea 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java @@ -127,8 +127,11 @@ public class HibernateCDOPackageUnitDTO } } + @SuppressWarnings("deprecation") public Blob getEPackageBlob() { + // deprecated usage, non-deprecated api uses a session + // TODO: research which session to use return Hibernate.createBlob(getEPackageByteArray()); } diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java index ca873d6d70..25b0e1ba7a 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java @@ -35,12 +35,12 @@ import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.emf.ecore.EClass; -import org.hibernate.Hibernate; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; import org.hibernate.mapping.PersistentClass; import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.type.StandardBasicTypes; import java.io.InputStream; import java.sql.Connection; @@ -324,11 +324,11 @@ public class HibernateStore extends Store implements IHibernateStore } final String idTypeStr = typeEAnnotation.getDetails().get(ID_TYPE_EANNOTATION_KEY); - if (Hibernate.STRING.getName().equals(idTypeStr)) + if (StandardBasicTypes.STRING.getName().equals(idTypeStr)) { return HibernateUtil.getInstance().createCDOID(classifierRef, idPart); } - else if (Hibernate.LONG.getName().equals(idTypeStr)) + else if (StandardBasicTypes.LONG.getName().equals(idTypeStr)) { return HibernateUtil.getInstance().createCDOID(classifierRef, new Long(idPart)); } @@ -352,7 +352,20 @@ public class HibernateStore extends Store implements IHibernateStore public Map<String, String> getPersistentProperties(Set<String> names) { - return packageHandler.getSystemProperties(); + final Map<String, String> result = packageHandler.getSystemProperties(); + if (names == null || names.isEmpty()) + { + return result; + } + final Map<String, String> filteredResult = new HashMap<String, String>(); + for (String name : names) + { + if (result.containsKey(name)) + { + filteredResult.put(name, result.get(name)); + } + } + return filteredResult; } public void setPersistentProperties(Map<String, String> properties) @@ -362,8 +375,12 @@ public class HibernateStore extends Store implements IHibernateStore public void removePersistentProperties(Set<String> names) { - // TODO: implement HibernateStore.removePropertyValues(names) - throw new UnsupportedOperationException(); + final Map<String, String> props = getPersistentProperties(null); + for (String name : names) + { + props.remove(name); + } + setPersistentProperties(props); } public synchronized int getNextPackageID() diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java index 160ac9050c..6a8d50f2a8 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java @@ -56,6 +56,7 @@ import org.eclipse.net4j.util.om.monitor.OMMonitor; import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; @@ -75,7 +76,9 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; +import java.io.Writer; import java.sql.Clob; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -401,7 +404,7 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler) { // TODO: implement HibernateStoreAccessor.loadCommitInfos(branch, startTime, endTime, handler) - throw new UnsupportedOperationException(); + // throw new UnsupportedOperationException(); } public Set<CDOID> readChangeSet(OMMonitor monitor, CDOChangeSetSegment... segments) @@ -413,8 +416,48 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler) { - // TODO: implement HibernateStoreAccessor.handleRevisions(eClass, branch, timeStamp, exactTime, handler) - throw new UnsupportedOperationException(); + if (eClass != null) + { + handleRevisionsByEClass(eClass, handler); + } + else + { + for (EPackage ePackage : getStore().getPackageHandler().getEPackages()) + { + for (EClassifier eClassifier : ePackage.getEClassifiers()) + { + if (eClassifier instanceof EClass) + { + final EClass eClazz = (EClass)eClassifier; + try + { + getStore().getEntityName(eClazz); + } + catch (IllegalArgumentException ex) + { + // a non-mapped eclass + continue; + } + handleRevisionsByEClass(eClazz, handler); + } + } + } + } + } + + private void handleRevisionsByEClass(EClass eClass, CDORevisionHandler handler) + { + // get a transaction, the hibernateStoreAccessor is placed in a threadlocal + // so all db access uses the same session. + final Session session = getHibernateSession(); + + // create the query + final Query query = session.createQuery("select e from " + getStore().getEntityName(eClass) + " e"); + for (Object o : query.list()) + { + handler.handleRevision((CDORevision)o); + } + session.clear(); } /** @@ -724,7 +767,8 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS qry.setParameter("id", HibernateUtil.getInstance().getIdValue(id)); //$NON-NLS-1$ if (qry.executeUpdate() != 1) { - throw new IllegalStateException("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ + OM.LOG.error("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ + // throw new IllegalStateException("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ } } } @@ -743,7 +787,8 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS qry.setParameter("id", HibernateUtil.getInstance().getIdValue(id)); //$NON-NLS-1$ if (qry.executeUpdate() != 1) { - throw new IllegalStateException("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ + OM.LOG.error("Not able to update resources ids of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ + // throw new IllegalStateException("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$ } } } @@ -828,8 +873,53 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS public void handleLobs(long fromTime, long toTime, CDOLobHandler handler) throws IOException { - // TODO: implement HibernateStoreAccessor.enclosing_method(enclosing_method_arguments) - throw new UnsupportedOperationException(); + final Session session = getHibernateSession(); + final Query qry = session.createQuery("select c from " + HibernateStoreLob.class.getName() + " as c"); + + try + { + for (Object o : qry.list()) + { + final HibernateStoreLob lob = (HibernateStoreLob)o; + if (lob.getBlob() != null) + { + final OutputStream out = handler.handleBlob(HexUtil.hexToBytes(lob.getId()), lob.getSize()); + if (out != null) + { + final InputStream in = lob.getBlob().getBinaryStream(); + try + { + IOUtil.copyBinary(in, out, lob.getSize()); + } + finally + { + IOUtil.close(out); + } + } + } + else + { + final Clob clob = lob.getClob(); + Reader in = clob.getCharacterStream(); + Writer out = handler.handleClob(HexUtil.hexToBytes(lob.getId()), lob.getSize()); + if (out != null) + { + try + { + IOUtil.copyCharacter(in, out, lob.getSize()); + } + finally + { + IOUtil.close(out); + } + } + } + } + } + catch (SQLException ex) + { + throw new IllegalStateException(ex); + } } public void loadLob(byte[] id, OutputStream out) throws IOException @@ -864,6 +954,7 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } } + @SuppressWarnings("deprecation") @Override protected void writeBlob(byte[] id, long size, InputStream inputStream) throws IOException { @@ -874,6 +965,8 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } else { + // deprecated usage, non-deprecated api uses a session + // TODO: research which session to use lob.setBlob(Hibernate.createBlob(inputStream, (int)size)); lob.setSize((int)size); lob.setClob(null); @@ -881,6 +974,7 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } } + @SuppressWarnings("deprecation") @Override protected void writeClob(byte[] id, long size, Reader reader) throws IOException { @@ -891,6 +985,8 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } else { + // deprecated usage, non-deprecated api uses a session + // TODO: research which session to use lob.setClob(Hibernate.createClob(reader, (int)size)); lob.setSize((int)size); lob.setBlob(null); diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java index b06bb906fc..0cf6a26e9b 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java @@ -11,7 +11,7 @@ */ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; -import org.hibernate.Hibernate; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.ParameterizedType; import org.hibernate.usertype.UserType; @@ -72,7 +72,7 @@ public class CDOCustomTypeUserType implements UserType, ParameterizedType { try { - final String value = (String)Hibernate.STRING.nullSafeGet(rs, names[0]); + final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0]); if (rs.wasNull()) { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java index 1546d22c09..4a3a176578 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java @@ -15,7 +15,7 @@ import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.net4j.util.WrappedException; -import org.hibernate.Hibernate; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; import java.io.Serializable; @@ -79,7 +79,7 @@ public class CDOIDAnyUserType implements UserType public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException { - final String value = (String)Hibernate.STRING.nullSafeGet(rs, names[0]); + final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0]); if (rs.wasNull()) { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java index 341d45dc50..391a9ca194 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java @@ -17,7 +17,7 @@ import org.eclipse.emf.cdo.common.id.CDOIDTemp; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil; -import org.hibernate.Hibernate; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; import java.io.Serializable; @@ -74,7 +74,7 @@ public class CDOIDUserType implements UserType public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException { - final String value = (String)Hibernate.STRING.nullSafeGet(rs, names[0]); + final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0]); if (rs.wasNull()) { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java index 3a30549cf4..678ea3803f 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java @@ -17,7 +17,7 @@ import org.eclipse.emf.cdo.common.lob.CDOLob; import org.eclipse.net4j.util.HexUtil; -import org.hibernate.Hibernate; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.ParameterizedType; import org.hibernate.usertype.UserType; @@ -79,7 +79,7 @@ public abstract class CDOLobUserType implements UserType, ParameterizedType { try { - final String value = (String)Hibernate.STRING.nullSafeGet(rs, names[0]); + final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0]); if (rs.wasNull()) { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java index 1bc27af673..80004e677a 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java @@ -14,7 +14,6 @@ import org.hibernate.HibernateException; import org.hibernate.engine.SessionImplementor; import org.hibernate.proxy.HibernateProxy; import org.hibernate.proxy.ProxyFactory; -import org.hibernate.type.AbstractComponentType; import org.hibernate.type.CompositeType; import java.io.Serializable; @@ -34,7 +33,7 @@ public class CDORevisionProxyFactory implements ProxyFactory @SuppressWarnings("rawtypes") public void postInstantiate(String entityName, Class persistentClass, Set interfaces, Method getIdentifierMethod, - Method setIdentifierMethod, AbstractComponentType componentIdType) throws HibernateException + Method setIdentifierMethod, CompositeType componentIdType) throws HibernateException { this.entityName = entityName; } @@ -44,11 +43,6 @@ public class CDORevisionProxyFactory implements ProxyFactory return new CDORevisionProxyHibernate(new CDORevisionLazyInitializer(entityName, id, session)); } - public void postInstantiate(String arg0, Class arg1, Set arg2, Method arg3, Method arg4, CompositeType arg5) - throws HibernateException - { - } - public String getEntityName() { return entityName; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java index 66da1d1e83..d7c939ea4b 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java @@ -14,7 +14,7 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; import org.eclipse.emf.cdo.common.model.CDOModelUtil; import org.eclipse.emf.cdo.common.model.CDOType; -import org.hibernate.Hibernate; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; import java.io.Serializable; @@ -71,7 +71,7 @@ public class CDOTypeUserType implements UserType public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException { - Integer value = (Integer)Hibernate.INTEGER.nullSafeGet(rs, names[0]); + Integer value = StandardBasicTypes.INTEGER.nullSafeGet(rs, names[0]); if (rs.wasNull()) { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java index 2f956150d9..998818cdf1 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java @@ -38,7 +38,7 @@ public class CDOUUIDHexGenerator extends UUIDHexGenerator } final EntityPersister entityPersister = session.getEntityPersister(null, obj); - final Serializable id = entityPersister.getIdentifier(obj, session.getEntityMode()); + final Serializable id = entityPersister.getIdentifier(obj, session); if (id != null) { return id; |