From c1fdfac8b1421ab6359d50cc24de2de5e4f2b129 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 25 Jun 2012 10:48:29 +0200 Subject: [PATCH] OO-292: upgrade hibernate to version 4.1.4 and expose the entity manager --- pom.xml | 23 +- .../de/bps/olat/modules/cl/Checklist.hbm.xml | 4 +- .../de/bps/olat/modules/cl/Checkpoint.hbm.xml | 2 +- .../olat/modules/cl/CheckpointResult.hbm.xml | 2 +- .../basesecurity/AuthenticationImpl.hbm.xml | 2 +- .../olat/basesecurity/IdentityImpl.hbm.xml | 2 +- .../olat/basesecurity/InvitationImpl.hbm.xml | 2 +- .../olat/basesecurity/NamedGroupImpl.hbm.xml | 2 +- .../org/olat/basesecurity/PolicyImpl.hbm.xml | 2 +- .../basesecurity/SecurityGroupImpl.hbm.xml | 2 +- .../SecurityGroupMembershipImpl.hbm.xml | 2 +- .../org/olat/bookmark/BookmarkImpl.hbm.xml | 2 +- .../org/olat/catalog/CatalogEntryImpl.hbm.xml | 2 +- .../coordinate/cluster/lock/LockImpl.hbm.xml | 2 +- .../info/model/InfoMessageImpl.hbm.xml | 2 +- .../commons/lifecycle/LifeCycleEntry.hbm.xml | 2 +- .../commons/persistence/AuditInterceptor.java | 57 +-- .../org/olat/core/commons/persistence/DB.java | 15 +- .../olat/core/commons/persistence/DBImpl.java | 66 ++-- .../core/commons/persistence/DBManager.java | 52 ++- .../core/commons/persistence/DBQuery.java | 3 + .../core/commons/persistence/DBQueryImpl.java | 10 + .../core/commons/persistence/DBSession.java | 34 +- .../commons/persistence/DBTransaction.java | 20 +- .../OLATLocalSessionFactoryBean.java | 90 ----- .../OLATPersistenceUnitManager.java | 51 +++ .../persistence/_spring/core_persistence.xml | 69 ++++ .../_spring/databaseCorecontext.xml | 326 +++++++----------- .../impl/UserCommentImpl.hbm.xml | 2 +- .../impl/UserRatingImpl.hbm.xml | 2 +- .../services/mark/impl/MarkImpl.hbm.xml | 2 +- .../services/tagging/model/TagImpl.hbm.xml | 2 +- .../logging/activity/LoggingObject.hbm.xml | 2 +- .../olat/core/util/mail/model/DBMail.hbm.xml | 2 +- .../util/mail/model/DBMailAttachment.hbm.xml | 2 +- .../util/mail/model/DBMailRecipient.hbm.xml | 2 +- .../model/UserCourseInfosImpl.hbm.xml | 2 +- .../model/UserEfficiencyStatementImpl.hbm.xml | 2 +- .../EfficiencyStatementArtefact.hbm.xml | 2 +- .../projectbroker/datamodel/Project.hbm.xml | 2 +- .../datamodel/ProjectBroker.hbm.xml | 2 +- .../course/statistic/daily/DailyStat.hbm.xml | 2 +- .../statistic/homeorg/HomeOrgStat.hbm.xml | 2 +- .../statistic/hourofday/HourOfDayStat.hbm.xml | 2 +- .../statistic/orgtype/OrgTypeStat.hbm.xml | 2 +- .../studybranch3/StudyBranch3Stat.hbm.xml | 2 +- .../studylevel/StudyLevelStat.hbm.xml | 2 +- .../statistic/weekly/WeeklyStat.hbm.xml | 2 +- .../org/olat/modules/fo/ForumImpl.hbm.xml | 2 +- .../org/olat/modules/fo/MessageImpl.hbm.xml | 2 +- .../org/olat/modules/fo/ReadMessage.hbm.xml | 2 +- .../fo/portfolio/ForumArtefact.hbm.xml | 2 +- .../webFeed/portfolio/BlogArtefact.hbm.xml | 2 +- .../portfolio/LiveBlogArtefact.hbm.xml | 2 +- .../wiki/portfolio/WikiArtefact.hbm.xml | 2 +- src/main/java/org/olat/note/NoteImpl.hbm.xml | 2 +- .../olat/notifications/PublisherImpl.hbm.xml | 2 +- .../olat/notifications/SubscriberImpl.hbm.xml | 2 +- .../model/notification/Notifications.hbm.xml | 2 +- .../restriction/CollectRestriction.hbm.xml | 2 +- .../model/structel/StructureElement.hbm.xml | 2 +- .../java/org/olat/properties/Property.hbm.xml | 2 +- .../registration/TemporaryKeyImpl.hbm.xml | 2 +- .../olat/repository/MetaDataElement.hbm.xml | 2 +- .../olat/repository/RepositoryEntry.hbm.xml | 2 +- .../accesscontrol/model/AccessMethod.hbm.xml | 2 +- .../model/AccessTransaction.hbm.xml | 2 +- .../accesscontrol/model/Offer.hbm.xml | 2 +- .../accesscontrol/model/OfferAccess.hbm.xml | 2 +- .../accesscontrol/model/Order.hbm.xml | 2 +- .../lock/pessimistic/PLockImpl.hbm.xml | 2 +- .../pessimistic/PessimisticLockManager.java | 8 +- .../resource/references/ReferenceImpl.hbm.xml | 2 +- src/main/java/org/olat/user/UserImpl.hbm.xml | 2 +- .../olat/core/commons/persistence/DBTest.java | 136 ++++---- .../commons/persistence/TestTable.hbm.xml | 2 +- .../resource/lock/pessimistic/PLockTest.java | 6 +- 77 files changed, 543 insertions(+), 547 deletions(-) delete mode 100644 src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java create mode 100644 src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java create mode 100644 src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml diff --git a/pom.xml b/pom.xml index cbb3d77cfa7..090f23be568 100644 --- a/pom.xml +++ b/pom.xml @@ -1393,7 +1393,7 @@ <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> - <version>3.3.2.GA</version> + <version>4.1.4.Final</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> @@ -1402,14 +1402,24 @@ </exclusions> </dependency> <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + <version>4.1.4.Final</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-ehcache</artifactId> + <version>4.1.4.Final</version> + </dependency> + <!-- <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jmx</artifactId> <version>3.3.2.GA</version> - </dependency> + </dependency> --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> - <version>3.3.2.GA</version> + <version>4.1.1.Final</version> <exclusions> <!-- includes an old version of c3p0 --> <exclusion> @@ -1432,15 +1442,12 @@ <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.6.4</version> - </dependency> + </dependency><!-- <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>1.3.0</version> - <!-- Needed by axis2 --> - <!-- <exclusions> <exclusion> <groupId>backport-util-concurrent</groupId> - <artifactId>backport-util-concurrent</artifactId> </exclusion> </exclusions> --> - </dependency> + </dependency> --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> diff --git a/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml b/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml index 0283b9eb7dd..d72847b06fe 100644 --- a/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml +++ b/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="de.bps.olat.modules.cl.Checklist" table="o_checklist"> @@ -15,7 +15,7 @@ <column name="description" length="16777210" unique="false" not-null="false" /> </property> - <bag name="checkpoints" table="o_checkpoint" lazy="false" cascade="all,delete-orphan"> + <bag name="checkpoints" lazy="false" cascade="all,delete-orphan"> <key column="checklist_fk" /> <one-to-many class="de.bps.olat.modules.cl.Checkpoint" /> </bag> diff --git a/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml b/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml index dadc703104e..707c06d4763 100644 --- a/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml +++ b/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="de.bps.olat.modules.cl.Checkpoint" table="o_checkpoint"> diff --git a/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml b/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml index a09ad3ffd52..c8f11303f39 100644 --- a/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml +++ b/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="de.bps.olat.modules.cl.CheckpointResult" table="o_checkpoint_results"> diff --git a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml index f63502f297f..d82b1a094b9 100644 --- a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.AuthenticationImpl" table="o_bs_authentication"> diff --git a/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml b/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml index b9640f8506d..7fcc94d0f58 100644 --- a/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.IdentityImpl" table="o_bs_identity"> diff --git a/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml b/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml index 3f210634677..90aa24dfcc4 100644 --- a/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml b/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml index 217f23144fc..77efc20f09d 100644 --- a/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.NamedGroupImpl" table="o_bs_namedgroup"> diff --git a/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml b/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml index c195eed6d39..55c2f4db35e 100644 --- a/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.PolicyImpl" table="o_bs_policy"> diff --git a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml index 55eb566b168..fb3f0f62647 100644 --- a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.SecurityGroupImpl" table="o_bs_secgroup"> diff --git a/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml b/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml index 808f7f2b747..e3099279059 100644 --- a/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.basesecurity.SecurityGroupMembershipImpl" table="o_bs_membership"> diff --git a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml b/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml index d19c274dc89..94670c26fcd 100644 --- a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml +++ b/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.bookmark.BookmarkImpl" table="o_bookmark"> diff --git a/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml b/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml index e1094ad19f0..339de1044bc 100644 --- a/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml +++ b/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml b/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml index 4ae28165d5e..d6f29756f17 100644 --- a/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml +++ b/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.commons.coordinate.cluster.lock.LockImpl" table="oc_lock"> diff --git a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml index 9b7afa7c080..9647d60616d 100644 --- a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml +++ b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.commons.info.model.InfoMessageImpl" table="o_info_message"> <cache usage="read-write" /> diff --git a/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml b/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml index 1158639547e..6fc24da0158 100644 --- a/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml +++ b/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java b/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java index b1a47238cd8..c77928280b6 100644 --- a/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java +++ b/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java @@ -31,53 +31,33 @@ import java.util.Arrays; import java.util.Date; import java.util.Iterator; -import org.hibernate.CallbackException; import org.hibernate.EmptyInterceptor; -import org.hibernate.EntityMode; -import org.hibernate.Interceptor; import org.hibernate.type.Type; import org.olat.core.id.CreateInfo; +import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; /** * @author Andreas Ch. Kapp * */ -public class AuditInterceptor extends EmptyInterceptor implements Interceptor, Serializable { +public class AuditInterceptor extends EmptyInterceptor { + + private static final long serialVersionUID = 7210083323938075881L; + private final OLog log = Tracing.createLoggerFor(AuditInterceptor.class); private int updates; private int creates; - public Object instantiate(String arg0, EntityMode arg1, Serializable arg2) throws CallbackException { - // TODO Auto-generated method stub - return null; - } - - /** - * @see org.hibernate.Interceptor#onDelete(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], org.hibernate.type.Type[]) - */ - public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { - // nothing to do here. - } - /** * @see org.hibernate.Interceptor#onFlushDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[]) */ public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { - if (Tracing.isDebugEnabled(AuditInterceptor.class)) - Tracing.logDebug("\nflush:" + entity + "\npre:" + if (log.isDebug()) + log.debug("\nflush:" + entity + "\npre:" + (previousState == null ? "-" : Arrays.asList(previousState).toString()) + "\ncur:" - + (currentState == null ? "-" : Arrays.asList(currentState).toString()), AuditInterceptor.class); - /*if (entity instanceof Auditable) { - updates++; - for (int i = 0; i < propertyNames.length; i++) { - if ("lastModified".equals(propertyNames[i])) { - currentState[i] = new Date(); - return true; - } - } - }*/ + + (currentState == null ? "-" : Arrays.asList(currentState).toString())); return false; } @@ -106,36 +86,23 @@ public class AuditInterceptor extends EmptyInterceptor implements Interceptor, S return false; } - /** - * @see org.hibernate.Interceptor#findDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[]) - */ - public int[] findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, - String[] propertyNames, Type[] types) { - return null; - } /** * @see org.hibernate.Interceptor#postFlush(java.util.Iterator) */ + @SuppressWarnings("rawtypes") public void postFlush(Iterator entities) { - if (Tracing.isDebugEnabled(AuditInterceptor.class)){ - Tracing.logDebug("AuditInterceptor - Creations: " + creates + ", Updates: " + updates, AuditInterceptor.class); + if (log.isDebug()){ + log.debug("AuditInterceptor - Creations: " + creates + ", Updates: " + updates); } } /** * @see org.hibernate.Interceptor#preFlush(java.util.Iterator) */ + @SuppressWarnings("rawtypes") public void preFlush(Iterator entities) { updates = 0; creates = 0; } - - /** - * @see org.hibernate.Interceptor#isUnsaved(java.lang.Object) - */ - public Boolean isUnsaved(Object entity) { - return null; - } - } \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/persistence/DB.java b/src/main/java/org/olat/core/commons/persistence/DB.java index 1456a3fac1b..3e69bd5b28c 100644 --- a/src/main/java/org/olat/core/commons/persistence/DB.java +++ b/src/main/java/org/olat/core/commons/persistence/DB.java @@ -28,7 +28,8 @@ package org.olat.core.commons.persistence; import java.util.List; -import org.hibernate.Query; +import javax.persistence.EntityManager; + import org.hibernate.stat.Statistics; import org.hibernate.type.Type; import org.olat.core.id.Persistable; @@ -127,7 +128,7 @@ public interface DB { * @param key * @return Object. */ - public Object loadObject(Class theClass, Long key); + public Object loadObject(Class<?> theClass, Long key); /** * Save an object. @@ -215,6 +216,8 @@ public interface DB { * @return Return Hibernates statistics object. */ public Statistics getStatistics(); + + public String getDbVendor(); /** * Call this to intermediate commit current changes. @@ -243,5 +246,13 @@ public interface DB { * @return the query or NULL if no such named query exists */ public DBQuery createNamedQuery(final String queryName, boolean vendorSpecific); + + /** + * + * Return the current entity manager to work with JPA2 + * + * @return + */ + public EntityManager getCurrentEntityManager(); } \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/persistence/DBImpl.java b/src/main/java/org/olat/core/commons/persistence/DBImpl.java index f582cb71895..7e1b53ffea6 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBImpl.java +++ b/src/main/java/org/olat/core/commons/persistence/DBImpl.java @@ -26,7 +26,6 @@ package org.olat.core.commons.persistence; -import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; @@ -43,10 +42,12 @@ import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; import org.hibernate.HibernateException; -import org.hibernate.Session; import org.hibernate.SessionFactory; +import org.hibernate.ejb.HibernateEntityManagerFactory; import org.hibernate.jmx.StatisticsService; import org.hibernate.stat.Statistics; import org.hibernate.type.Type; @@ -59,6 +60,8 @@ import org.olat.core.logging.DBRuntimeException; import org.olat.core.logging.LogDelegator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupImpl; import org.olat.testutils.codepoints.server.Codepoint; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.jmx.support.MBeanServerFactoryBean; @@ -74,7 +77,7 @@ import org.springframework.jmx.support.MBeanServerFactoryBean; public class DBImpl extends LogDelegator implements DB, Destroyable { private static final int MAX_DB_ACCESS_COUNT = 500; private static DBImpl INSTANCE; - private SessionFactory sessionFactory = null; + private EntityManagerFactory emf = null; private final ThreadLocal<ThreadLocalData> data = new ThreadLocal<ThreadLocalData>(); private OLog forcedLogger; @@ -217,6 +220,14 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { if (isLogDebugEnabled() && dbm == null) logDebug("DB manager ist null.", null); return (dbm == null) ? null : dbm.getDbSession(); } + + @Override + public EntityManager getCurrentEntityManager() { + DBImpl current = getInstance(true); + DBManager dbm = current.getData().getManager(); + if (isLogDebugEnabled() && dbm == null) logDebug("DB manager ist null.", null); + return (dbm == null) ? null : dbm.getDbSession().getEntityManager(); + } protected void setManager(DBManager manager) { getData().setManager(manager); @@ -246,25 +257,25 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { DBSession dbs = getDBSession(); if (dbs == null) { if (isLogDebugEnabled()) logDebug("createSession start...", null); - Session session = null; + EntityManager em = null; Codepoint.codepoint(DBImpl.class, "initializeSession"); if (isLogDebugEnabled()) logDebug("initializeSession", null); try { - session = sessionFactory.openSession(); + em = emf.createEntityManager(); } catch (HibernateException e) { logError("could not open database session!", e); } - setManager(new DBManager(session)); + setManager(new DBManager(em)); getData().resetAccessCounter(); getData().resetCommitCounter(); } else if (!dbs.isOpen()) { - Session session = null; + EntityManager em = null; try { - session = sessionFactory.openSession(); + em = emf.createEntityManager(); } catch (HibernateException e) { logError("could not open database session!", e); } - setManager(new DBManager(session)); + setManager(new DBManager(em)); getData().resetAccessCounter(); getData().resetCommitCounter(); } @@ -550,6 +561,16 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { beginTransaction(object); getDBManager().updateObject(getTransaction(), object); } + + public void updateObject(BusinessGroup object) { + beginTransaction(object); + getDBManager().updateObject(getTransaction(), object); + } + + public void updateObject(BusinessGroupImpl object) { + beginTransaction(object); + getDBManager().updateObject(getTransaction(), object); + } /** * Get any errors from a previous DB call. @@ -580,13 +601,6 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { return null == getTransaction() ? false : getTransaction().isInTransaction(); } - /** - * @return a JDBC java.sql.Connection. - */ - protected Connection getConnection() { - return getData().getManager().getConnection(); - } - /** * see DB.loadObject(Persistable persistable, boolean forceReloadFromDB) * @@ -748,7 +762,10 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { * @return Return Hibernates statistics object. */ public Statistics getStatistics() { - return sessionFactory.getStatistics(); + if(emf instanceof HibernateEntityManagerFactory) { + return ((HibernateEntityManagerFactory)emf).getSessionFactory().getStatistics(); + } + return null; } /** @@ -875,7 +892,11 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { * @param sessionFactory */ public void setSessionFactory(SessionFactory sessionFactory) { - this.sessionFactory = sessionFactory; + //this.sessionFactory = sessionFactory; + } + + public void setEntityManagerFactory(EntityManagerFactory emf) { + this.emf = emf; } @Override @@ -896,12 +917,17 @@ public class DBImpl extends LogDelegator implements DB, Destroyable { // fxdiff qti-statistics (praktikum MK) // Extensions used for native SQL queries // - String dbVendor = null; + private String dbVendor = null; + + @Override + public String getDbVendor() { + return dbVendor; + } /** * [used by spring] * @param dbVendor */ - public void setDbvendor(String dbVendor) { + public void setDbVendor(String dbVendor) { this.dbVendor = dbVendor; } diff --git a/src/main/java/org/olat/core/commons/persistence/DBManager.java b/src/main/java/org/olat/core/commons/persistence/DBManager.java index 98cd12b99d6..3c472c5790a 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBManager.java +++ b/src/main/java/org/olat/core/commons/persistence/DBManager.java @@ -26,16 +26,16 @@ package org.olat.core.commons.persistence; -import java.sql.Connection; import java.util.List; +import javax.persistence.EntityManager; + import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.type.Type; import org.olat.core.logging.AssertException; import org.olat.core.logging.DBRuntimeException; -import org.olat.core.logging.Tracing; import org.olat.core.manager.BasicManager; /** @@ -48,8 +48,8 @@ class DBManager extends BasicManager { private boolean error; private DBSession dbSession = null; - DBManager(Session hibernateSession) { - setDbSession(new DBSession(hibernateSession)); + DBManager(EntityManager em) { + setDbSession(new DBSession(em)); } /** @@ -74,8 +74,8 @@ class DBManager extends BasicManager { } try { getSession().update(o); - if (Tracing.isDebugEnabled(DBManager.class)) { - Tracing.logDebug("update (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class); + if (isLogDebugEnabled()) { + logDebug("update (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString()); } } catch (HibernateException e) { // we have some error trx.setErrorAndRollback(e); @@ -97,8 +97,8 @@ class DBManager extends BasicManager { } try { getSession().delete(o); - if (Tracing.isDebugEnabled(DBManager.class)) { - Tracing.logDebug("delete (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class); + if (isLogDebugEnabled()) { + logDebug("delete (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString()); } } catch (HibernateException e) { // we have some error trx.setErrorAndRollback(e); @@ -120,8 +120,8 @@ class DBManager extends BasicManager { } try { hibernateSession.save(o); - if (Tracing.isDebugEnabled(DBManager.class)) { - Tracing.logDebug("save (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class); + if (isLogDebugEnabled()) { + logDebug("save (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString()); } } catch (HibernateException e) { // we have some error @@ -142,8 +142,8 @@ class DBManager extends BasicManager { Object o = null; try { o = getSession().load(theClass, pK); - if (Tracing.isDebugEnabled(DBManager.class)) { - Tracing.logDebug("load (res " +(o == null? "null": "ok")+")(trans "+trx.hashCode()+") key "+pK+" class "+theClass.getName(),DBManager.class); + if (isLogDebugEnabled()) { + logDebug("load (res " +(o == null? "null": "ok")+")(trans "+trx.hashCode()+") key "+pK+" class "+theClass.getName()); } } catch (HibernateException e) { @@ -165,7 +165,7 @@ class DBManager extends BasicManager { List find(DBTransaction trx, String query, Object value, Type type) { List li = null; try { - boolean doLog = Tracing.isDebugEnabled(DBManager.class); + boolean doLog = isLogDebugEnabled(); long start = 0; if (doLog) start = System.currentTimeMillis(); @@ -198,7 +198,7 @@ class DBManager extends BasicManager { List find(DBTransaction trx, String query, Object [] values, Type [] types) { List li = null; try { - boolean doLog = Tracing.isDebugEnabled(DBManager.class); + boolean doLog = isLogDebugEnabled(); long start = 0; if (doLog) start = System.currentTimeMillis(); // old: li = getSession().find(query, values, types); @@ -230,7 +230,7 @@ class DBManager extends BasicManager { List find(DBTransaction trx, String query) { List li = null; try { - boolean doLog = Tracing.isDebugEnabled(DBManager.class); + boolean doLog = isLogDebugEnabled(); long start = 0; if (doLog) start = System.currentTimeMillis(); // old: li = getSession().find(query); @@ -353,16 +353,6 @@ class DBManager extends BasicManager { boolean isError() { return error; } - - Connection getConnection() { - try { - return getSession().connection(); - } catch (HibernateException he) { - setError(he); - throw new DBRuntimeException("Error in getting sql.Connection.", he); - - } - } int delete(String query, Object value, Type type) { int deleted = 0; @@ -379,7 +369,7 @@ class DBManager extends BasicManager { //// getSession().flush(); - if (Tracing.isDebugEnabled(DBManager.class)) { + if (isLogDebugEnabled()) { logQuery("delete", new Object[] {value}, new Type[] {type}, query); } } catch (HibernateException e) { @@ -407,7 +397,7 @@ class DBManager extends BasicManager { si.delete( foundToDel.get(i) ); } - if (Tracing.isDebugEnabled(DBManager.class)) { + if (isLogDebugEnabled()) { logQuery("delete (trans "+trx.hashCode()+")",new Object[] {value}, new Type[] {type}, query); } } catch (HibernateException e) { // we have some error @@ -434,7 +424,7 @@ class DBManager extends BasicManager { si.delete( foundToDel.get(i) ); } - if (Tracing.isDebugEnabled(DBManager.class)) { + if (isLogDebugEnabled()) { logQuery("delete (trans "+trx.hashCode()+")", values, types, query); } } catch (HibernateException e) { // we have some error @@ -470,8 +460,8 @@ class DBManager extends BasicManager { //try { //Object o = getSession().load(theClass, key); Object o = getSession().get(theClass, key); - if (Tracing.isDebugEnabled(DBManager.class)) { - Tracing.logDebug("findload (res " +(o == null? "null": "ok")+") key "+key+" class "+theClass.getName(),DBManager.class); + if (isLogDebugEnabled()) { + logDebug("findload (res " +(o == null? "null": "ok")+") key "+key+" class "+theClass.getName()); } return o; //} catch (HibernateException e) { @@ -507,7 +497,7 @@ class DBManager extends BasicManager { } } sb.append(", query: ").append(query); - Tracing.logDebug(sb.toString(),DBManager.class); + logDebug(sb.toString()); } } \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/persistence/DBQuery.java b/src/main/java/org/olat/core/commons/persistence/DBQuery.java index 6dff358c905..f2aba72a968 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBQuery.java +++ b/src/main/java/org/olat/core/commons/persistence/DBQuery.java @@ -33,6 +33,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Map; import org.hibernate.FlushMode; import org.hibernate.LockMode; @@ -430,6 +431,8 @@ public interface DBQuery { * @see org.hibernate.Query */ public abstract DBQuery setProperties(Object bean); + + public DBQuery setProperties(Map map); /** * @param position diff --git a/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java b/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java index c0e712c594e..4c535f23008 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java +++ b/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java @@ -600,6 +600,16 @@ public class DBQueryImpl implements DBQuery { } return this; } + + public DBQuery setProperties(Map map) { + try { + query.setProperties(map); + } + catch (HibernateException e) { + throw new DBRuntimeException("DBQuery error. ", e); + } + return this; + } /** * @see org.olat.core.commons.persistence.DBQuery#setSerializable(int, java.io.Serializable) diff --git a/src/main/java/org/olat/core/commons/persistence/DBSession.java b/src/main/java/org/olat/core/commons/persistence/DBSession.java index 516605e1ae0..3e346944f03 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBSession.java +++ b/src/main/java/org/olat/core/commons/persistence/DBSession.java @@ -26,9 +26,12 @@ package org.olat.core.commons.persistence; +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; + import org.hibernate.HibernateException; import org.hibernate.Session; -import org.hibernate.Transaction; +import org.hibernate.ejb.HibernateEntityManager; import org.olat.core.logging.AssertException; import org.olat.core.logging.DBRuntimeException; import org.olat.testutils.codepoints.server.Codepoint; @@ -40,18 +43,18 @@ import org.olat.testutils.codepoints.server.Codepoint; * @author Felix Jost */ class DBSession { - private Session hibernateSession; + private EntityManager em; private DBTransaction trxWrapper = null; - protected DBSession(Session hibernateSession) { - this.hibernateSession = hibernateSession; + protected DBSession(EntityManager em) { + this.em = em; } /** * OLAT-3652: allow clearing of transaction - needed to avoid side-effects of subsequent session usage with error-in-transaction */ protected void clearTransaction() { - if ( (hibernateSession != null) && hibernateSession.isOpen()) { + if ( (em != null) && em.isOpen()) { throw new DBRuntimeException("clearTransaction expected session to be closed at this point!"); } trxWrapper = null; @@ -60,7 +63,8 @@ class DBSession { protected DBTransaction beginDbTransaction() { if (trxWrapper == null || trxWrapper.isCommitted()) { try { - Transaction trx = hibernateSession.beginTransaction(); + EntityTransaction trx = em.getTransaction(); + trx.begin(); trxWrapper = new DBTransaction(trx); return trxWrapper; } catch (HibernateException e) { @@ -73,12 +77,16 @@ class DBSession { ); } } + + protected EntityManager getEntityManager() { + return em; + } /** * @return Session */ protected Session getHibernateSession() { - return hibernateSession; + return em.unwrap(HibernateEntityManager.class).getSession(); } @@ -87,13 +95,13 @@ class DBSession { */ protected void close() { try { - if ( (hibernateSession != null) && hibernateSession.isOpen()) { + if ( (em != null) && em.isOpen()) { Codepoint.codepoint(DBImpl.class, "closeSession"); if ( (getTransaction() != null) && getTransaction().isInTransaction() && !getTransaction().isRolledBack()) { throw new AssertException("Try to close un-committed session"); } - hibernateSession.close(); + em.close(); } } catch (HibernateException e) { throw new DBRuntimeException("Close Session error.", e); @@ -101,8 +109,8 @@ class DBSession { throw new DBRuntimeException("Error in dbsession.close: ", e); } finally { try { - if (hibernateSession != null) { - if (hibernateSession.isOpen()) hibernateSession.close(); + if (em != null) { + if (em.isOpen()) em.close(); } } catch (Exception e) { // we did our best to close the hibernate session @@ -112,7 +120,7 @@ class DBSession { } boolean contains(Object object) { - return this.hibernateSession.contains(object); + return this.em.contains(object); } /** @@ -126,7 +134,7 @@ class DBSession { * @return true if session is open */ boolean isOpen() { - return hibernateSession.isOpen(); + return em.isOpen(); } } diff --git a/src/main/java/org/olat/core/commons/persistence/DBTransaction.java b/src/main/java/org/olat/core/commons/persistence/DBTransaction.java index 14034b874e9..e6fe3ef8b6c 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBTransaction.java +++ b/src/main/java/org/olat/core/commons/persistence/DBTransaction.java @@ -27,9 +27,11 @@ package org.olat.core.commons.persistence; +import javax.persistence.EntityTransaction; + import org.hibernate.HibernateException; -import org.hibernate.Transaction; import org.olat.core.logging.DBRuntimeException; +import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; /** @@ -41,13 +43,15 @@ import org.olat.core.logging.Tracing; */ final class DBTransaction { - private Transaction hibernateTransaction = null; + private final OLog log = Tracing.createLoggerFor(DBTransaction.class); + + private EntityTransaction hibernateTransaction = null; private boolean rolledBack = false; private boolean committed = false; private Exception error = null; private boolean inTransaction = false; - DBTransaction(Transaction t) { + DBTransaction(EntityTransaction t) { this.hibernateTransaction = t; setInTransaction(true); } @@ -55,10 +59,10 @@ final class DBTransaction { protected void commit() { try { if (hibernateTransaction.isActive() - && !hibernateTransaction.wasCommitted()) { + /* && !hibernateTransaction.wasCommitted() */) { hibernateTransaction.commit(); } else { - Tracing.logWarn("Could not call hibernateTransaction.commit() because is not Active or already committed",this.getClass()); + log.warn("Could not call hibernateTransaction.commit() because is not Active or already committed"); } setInTransaction(false); this.committed = true; @@ -74,11 +78,11 @@ final class DBTransaction { protected void rollback() { try { if (hibernateTransaction.isActive() - && !hibernateTransaction.wasRolledBack()) { + /* && !hibernateTransaction.wasRolledBack() */) { hibernateTransaction.rollback(); }else { // OLAT-3621: raising log level from WARN to ERROR to have this pop up in tests more. plus added a stacktrace for debugging ease. - Tracing.logError("Could not call hibernateTransaction.rollback() because is not Active or already rolledback", new Exception("DBTransaction.rollback()"), this.getClass()); + log.error("Could not call hibernateTransaction.rollback() because is not Active or already rolledback", new Exception("DBTransaction.rollback()")); } this.rolledBack = true; } catch (HibernateException e) { @@ -120,7 +124,7 @@ final class DBTransaction { */ protected void setErrorAndRollback(Exception exception) { error = exception; - Tracing.logDebug("Hibernate Error, rolling back", error.toString(), DBTransaction.class); + log.debug("Hibernate Error, rolling back", error.toString()); rollback(); } diff --git a/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java b/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java deleted file mode 100644 index 00289b65b80..00000000000 --- a/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.core.commons.persistence; - -import java.util.List; - -import org.hibernate.HibernateException; -import org.hibernate.cfg.Configuration; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.orm.hibernate3.LocalSessionFactoryBean; - -/** - * - * Description:<br> - * Extends the Spring LocalSessionFactoryBean to allow additional mappings - * for Hibernate. The additional mappings are defined in beans of the - * org.olat.core.commons.persistence.AdditionalDBMappings. These beans must be - * <strong>singleton</strong> and not use lazy-init. - * <P> - * <bean id="markingMapping" class="org.olat.core.commons.persistence.AdditionalDBMappings"> - * <property name="xmlFiles"> - * <list> - * <value>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</value> - * </list> - * </property> - * </bean> - * - * <P> - * Initial Date: 23 jul. 2010 <br> - * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com - */ -public class OLATLocalSessionFactoryBean extends LocalSessionFactoryBean { - - private OLog log = Tracing.createLoggerFor(OLATLocalSessionFactoryBean.class); - - private AdditionalDBMappings[] additionalDBMappings; - - public void setAdditionalDBMappings(AdditionalDBMappings[] additionalDBMappings) { - this.additionalDBMappings = additionalDBMappings; - } - - @Override - protected void postProcessMappings(Configuration config) throws HibernateException { - try { - if(additionalDBMappings != null && additionalDBMappings.length > 0) { - for(AdditionalDBMappings addMapping:additionalDBMappings) { - List<String> xmlFiles = addMapping.getXmlFiles(); - if(xmlFiles != null) { - for (String mapping : xmlFiles) { - //we cannot access the classloader magic used by the LocalSessionFactoryBean - Resource resource = new ClassPathResource(mapping.trim()); - config.addInputStream(resource.getInputStream()); - } - } - - List<Class<?>> annotatedClasses = addMapping.getAnnotatedClasses(); - if(annotatedClasses != null) { - for(Class<?> annotatedClass:annotatedClasses) { - config.addClass(annotatedClass); - } - } - } - } - super.postProcessMappings(config); - } catch (Exception e) { - log.error("Error during the post processing of the hibernate session factory.", e); - } - } -} diff --git a/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java b/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java new file mode 100644 index 00000000000..f3b3dbc30a9 --- /dev/null +++ b/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java @@ -0,0 +1,51 @@ +package org.olat.core.commons.persistence; + +import java.util.List; + +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; +import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class OLATPersistenceUnitManager extends DefaultPersistenceUnitManager { + + private OLog log = Tracing.createLoggerFor(OLATPersistenceUnitManager.class); + + private AdditionalDBMappings[] additionalDBMappings; + + public void setAdditionalDBMappings(AdditionalDBMappings[] additionalDBMappings) { + this.additionalDBMappings = additionalDBMappings; + } + + @Override + protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) { + try { + if(additionalDBMappings != null && additionalDBMappings.length > 0) { + for(AdditionalDBMappings addMapping:additionalDBMappings) { + List<String> xmlFiles = addMapping.getXmlFiles(); + if(xmlFiles != null) { + for (String mapping : xmlFiles) { + pui.addMappingFileName(mapping.trim()); + } + } + + List<Class<?>> annotatedClasses = addMapping.getAnnotatedClasses(); + if(annotatedClasses != null) { + for(Class<?> annotatedClass:annotatedClasses) { + pui.addManagedClassName(annotatedClass.getName()); + } + } + } + } + } catch (Exception e) { + log.error("Error during the post processing of the hibernate session factory.", e); + } + + super.postProcessPersistenceUnitInfo(pui); + } + +} diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml new file mode 100644 index 00000000000..bf2eabbab45 --- /dev/null +++ b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<persistence version="2.0" + xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://java.sun.com/xml/ns/persistence + http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> + <persistence-unit name="default"> + <provider>org.hibernate.ejb.HibernatePersistence</provider> + + <mapping-file>de/bps/olat/modules/cl/Checklist.hbm.xml</mapping-file> + <mapping-file>de/bps/olat/modules/cl/CheckpointResult.hbm.xml</mapping-file> + <mapping-file>de/bps/olat/modules/cl/Checkpoint.hbm.xml</mapping-file> + <mapping-file>org/olat/ims/qti/QTIResult.hbm.xml</mapping-file> + <mapping-file>org/olat/ims/qti/QTIResultSet.hbm.xml</mapping-file> + <mapping-file>org/olat/note/NoteImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/user/UserImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml</mapping-file> + <mapping-file>org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/commons/info/model/InfoMessageImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/group/area/BGAreaImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/group/area/BGtoAreaRelationImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/group/context/BGContextImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/group/context/BGContext2Resource.hbm.xml</mapping-file> + <mapping-file>org/olat/group/BusinessGroupImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/group/model/BGResourceRelation.hbm.xml</mapping-file> + <mapping-file>org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/resource/references/ReferenceImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/resource/OLATResourceImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/AuthenticationImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/PolicyImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/InvitationImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/IdentityImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/NamedGroupImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/SecurityGroupImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/repository/RepositoryEntry.hbm.xml</mapping-file> + <mapping-file>org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml</mapping-file> + <mapping-file>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</mapping-file> + <mapping-file>org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/modules/fo/ForumImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/modules/fo/MessageImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/modules/fo/ReadMessage.hbm.xml</mapping-file> + <mapping-file>org/olat/properties/Property.hbm.xml</mapping-file> + <mapping-file>org/olat/catalog/CatalogEntryImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/bookmark/BookmarkImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/notifications/PublisherImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/notifications/SubscriberImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/registration/TemporaryKeyImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/daily/DailyStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/dayofweek/DayOfWeekStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/weekly/WeeklyStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml</mapping-file> + <mapping-file>org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml</mapping-file> + <mapping-file>org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml</mapping-file> + <mapping-file>org/olat/core/logging/activity/LoggingObject.hbm.xml</mapping-file> + + <properties> + <property name="hibernate.archive.autodetection" value=""/> + <property name="hibernate.ejb.interceptor" value="org.olat.core.commons.persistence.AuditInterceptor"/> + </properties> + </persistence-unit> +</persistence> \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml index 7653c49a47f..b3b26e794a1 100644 --- a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml +++ b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml @@ -7,202 +7,134 @@ <bean id="collectingAdditionalDBMappings" class="org.olat.core.commons.persistence.AdditionalMappingsListFactoryBean"/> - - <!-- Hibernate SessionFactory --> - <!-- taken from: http://www.shoesobjects.com/blog/2004/11/21/1101083542880.html --> - <bean id="sessionFactory" class="org.olat.core.commons.persistence.OLATLocalSessionFactoryBean" - depends-on="databaseUpgrader"> - <!-- Setting datasource let Spring using the LocalDataSourceConnectionProvider. Some JUnit Tests fail if not the hibernate C3P0ConnectionProvider is used. - Not using the dataSource property in the sessionFactory means setting the connection in the hibernateProperties. - DataSources are still defined for the Upgrader and the Statistics feature. - <property name="dataSource" ref="${db.vendor}DataSource" /> --> - <property name="additionalDBMappings" ref="collectingAdditionalDBMappings"/> - <property name="mappingResources"> - <list> - <!-- OLAT tables --> - <value>de/bps/olat/modules/cl/Checklist.hbm.xml</value> - <value>de/bps/olat/modules/cl/CheckpointResult.hbm.xml</value> - <value>de/bps/olat/modules/cl/Checkpoint.hbm.xml</value> - <value>org/olat/ims/qti/QTIResult.hbm.xml</value> - <value>org/olat/ims/qti/QTIResultSet.hbm.xml</value> - <value>org/olat/note/NoteImpl.hbm.xml</value> - <value>org/olat/user/UserImpl.hbm.xml</value> - <value>org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml</value> - <value>org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml</value> - <value>org/olat/commons/info/model/InfoMessageImpl.hbm.xml</value> - <value>org/olat/group/area/BGAreaImpl.hbm.xml</value> - <value>org/olat/group/area/BGtoAreaRelationImpl.hbm.xml</value> - <value>org/olat/group/context/BGContextImpl.hbm.xml</value> - <value>org/olat/group/context/BGContext2Resource.hbm.xml</value> - <value>org/olat/group/BusinessGroupImpl.hbm.xml</value> - <value>org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml</value> - <value>org/olat/resource/references/ReferenceImpl.hbm.xml</value> - <value>org/olat/resource/OLATResourceImpl.hbm.xml</value> - <value>org/olat/basesecurity/AuthenticationImpl.hbm.xml</value> - <value>org/olat/basesecurity/PolicyImpl.hbm.xml</value> - <value>org/olat/basesecurity/InvitationImpl.hbm.xml</value> - <value>org/olat/basesecurity/IdentityImpl.hbm.xml</value> - <value>org/olat/basesecurity/NamedGroupImpl.hbm.xml</value> - <value>org/olat/basesecurity/SecurityGroupImpl.hbm.xml</value> - <value>org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml</value> - <value>org/olat/repository/RepositoryEntry.hbm.xml</value> - <value>org/olat/repository/MetaDataElement.hbm.xml</value> - <value>org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml</value> - <value>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</value> - <value>org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml</value> - <value>org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml</value> - <value>org/olat/modules/fo/ForumImpl.hbm.xml</value> - <value>org/olat/modules/fo/MessageImpl.hbm.xml</value> - <value>org/olat/modules/fo/ReadMessage.hbm.xml</value> - <value>org/olat/properties/Property.hbm.xml</value> - <value>org/olat/catalog/CatalogEntryImpl.hbm.xml</value> - <value>org/olat/bookmark/BookmarkImpl.hbm.xml</value> - <value>org/olat/notifications/PublisherImpl.hbm.xml</value> - <value>org/olat/notifications/SubscriberImpl.hbm.xml</value> - <value>org/olat/registration/TemporaryKeyImpl.hbm.xml</value> - <value>org/olat/course/statistic/daily/DailyStat.hbm.xml</value> - <value>org/olat/course/statistic/dayofweek/DayOfWeekStat.hbm.xml</value> - <value>org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml</value> - <value>org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml</value> - <value>org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml</value> - <value>org/olat/course/statistic/weekly/WeeklyStat.hbm.xml</value> - <value>org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml</value> - <value>org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml</value> - - <!-- why is this one not found? --> - <!-- <value>test/java/org/olat/core/commons/persistence/TestTable.hbm.xml</value> --> - - <!-- core tables --> - <value>org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml</value> - <value>org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml</value> - <value>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</value> - <value>org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml</value> - <value>org/olat/core/logging/activity/LoggingObject.hbm.xml</value> - </list> - </property> - <!-- DB Connection is defined in mysqlHibernateProperties, postgresqlHibernateProperites, etc. and the other hibernate properties in the bean "commonHibernateProperties" --> - <property name="hibernateProperties" ref="${db.vendor}HibernateProperties" /> - <property name="entityInterceptor" ref="AuditInterceptor" /> - </bean> - + + <!-- Persistence unit manager --> + <bean id="pum" class="org.olat.core.commons.persistence.OLATPersistenceUnitManager"> + <property name="additionalDBMappings" ref="collectingAdditionalDBMappings" /> + <property name="persistenceXmlLocations"> + <list> + <value>classpath:/org/olat/core/commons/persistence/_spring/core_persistence.xml</value> + </list> + </property> + <property name="defaultDataSource" ref="${db.vendor}PooledDataSource"/> + </bean> + + <!-- EntityManagerFactory --> + <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="persistenceUnitManager" ref="pum"/> + <property name="jpaProperties" ref="${db.vendor}HibernateProperties"/> + </bean> + <bean id="AuditInterceptor" class="org.olat.core.commons.persistence.AuditInterceptor" /> + <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> + <property name="dataSource" ref="${db.vendor}PooledDataSource"/> + </bean> -<bean id="database" class="org.olat.core.commons.persistence.DBImpl" destroy-method="destroy"> - <property name="sessionFactory" ref="sessionFactory"/> - <property name="dbvendor" value="${db.vendor}" /> -</bean> - -<bean id="persistenceHelper" class="org.olat.core.commons.persistence.PersistenceHelper"> - <constructor-arg> - <props> - <prop key="dbvendor">${db.vendor}</prop> - <prop key="mysqloptions">${db.url.options.mysql}</prop> - </props> - </constructor-arg> -</bean> - -<bean id="mysqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> - <constructor-arg> - <props> - <!-- Using datasource of hibernate --> - <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop> - <prop key="hibernate.connection.url">jdbc:mysql://${db.host}:${db.host.port}/${db.name}${db.url.options.mysql}</prop> - <prop key="hibernate.connection.username">${db.user}</prop> - <prop key="hibernate.connection.password">${db.pass}</prop> - <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> - </props> - </constructor-arg> - <property name="addMoreProperties" ref="c3p0HibernateProperties" /> -</bean> + <bean id="database" class="org.olat.core.commons.persistence.DBImpl" destroy-method="destroy"> + <property name="entityManagerFactory" ref="emf"/> + <property name="dbVendor" value="${db.vendor}" /> + </bean> -<bean id="postgresqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> - <constructor-arg> - <props> - <!-- Using datasource of hibernate --> - <prop key="hibernate.connection.driver_class">org.postgresql.Driver</prop> - <prop key="hibernate.connection.url">jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</prop> - <prop key="hibernate.connection.username">${db.user}</prop> - <prop key="hibernate.connection.password">${db.pass}</prop> - <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> - </props> - </constructor-arg> - <property name="addMoreProperties" ref="c3p0HibernateProperties" /> -</bean> + <bean id="persistenceHelper" class="org.olat.core.commons.persistence.PersistenceHelper"> + <constructor-arg> + <props> + <prop key="dbvendor">${db.vendor}</prop> + <prop key="mysqloptions">${db.url.options.mysql}</prop> + </props> + </constructor-arg> + </bean> -<bean id="c3p0HibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> - <constructor-arg> - <props> - <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> - <!-- Min pool size --> - <prop key="hibernate.c3p0.min_size">${db.hibernate.c3p0.minsize}</prop> - <!-- Max pool size , mysql-default value is 100, If you need to support more connections, you should set a larger value for this variable in mysql config --> - <prop key="hibernate.c3p0.max_size">${db.hibernate.c3p0.maxsize}</prop> - <!-- Connection timeout in sec --> - <prop key="hibernate.c3p0.timeout">1800</prop> - <!-- Size of prepared statements --> - <prop key="hibernate.c3p0.max_statements">10000</prop> - <!-- Commit on connection close --> - <prop key="hibernate.c3p0.autoCommitOnClose">false</prop> - <!-- Number of connection acquired when pool is exhausted --> - <prop key="hibernate.c3p0.acquire_increment">2</prop> - <!-- Idle time (in sec) before pooled connection is validated --> - <prop key="hibernate.c3p0.idle_test_period">500</prop> + <bean id="mysqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> + <constructor-arg> + <props> + <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> + </props> + </constructor-arg> + <property name="addMoreProperties" ref="hibernateProps" /> + </bean> - <!-- OLAT-5528: under heavy load situations threads have been seen to deadlock on acquire/release of a connection. - increasing number of helper threads from 3 to 10 plus limiting the max time for administrative tasks to 2min - is expected to allow these situations to resolve themselves --> - <!-- Number of c3p0 helper threads - default is 3 --> - <prop key="hibernate.c3p0.numHelperThreads">10</prop> - <!-- Maximum time spent by c3p0 for administrative tasks in seconds - default infinity=0 --> - <prop key="hibernate.c3p0.maxAdministrativeTaskTime">120</prop> - </props> - </constructor-arg> - <property name="addMoreProperties" ref="commonHibernateProperties" /> -</bean> + <bean id="postgresqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> + <constructor-arg> + <props> + <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> + </props> + </constructor-arg> + <property name="addMoreProperties" ref="hibernateProps" /> + </bean> -<bean id="commonHibernateProperties" class="java.util.HashMap"> - <constructor-arg> - <map> - <!-- "validate, update, create, create-drop" are valid entries for hibernate.hbm2ddl.auto--> - <entry key="hibernate.hbm2ddl.auto"><value>${db.hibernate.ddl.auto}</value></entry> - <entry key="hibernate.show_sql"><value>${db.show_sql}</value></entry> - <entry key="hibernate.query.factory_class"><value>org.hibernate.hql.ast.ASTQueryTranslatorFactory</value></entry> - <!-- <entry key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</value></entry> --> - <entry key="hibernate.query.substitutions"><value>true 1, false 0, yes 'Y', no 'N'</value></entry> - <!-- for development phase only: --> - <entry key="hibernate.c3p0.debugUnreturnedConnectionStackTraces"><value>true</value></entry> - <entry key="hibernate.c3p0.unreturnedConnectionTimeout"><value>${hibernate.connection.timeout}</value></entry> - <!-- end for development phase only --> + <bean id="hibernateProps" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> + <constructor-arg> + <props> + <!-- "validate, update, create, create-drop" are valid entries for hibernate.hbm2ddl.auto--> + <prop key="hibernate.hbm2ddl.auto">${db.hibernate.ddl.auto}</prop> + <prop key="hibernate.show_sql">${db.show_sql}</prop> + <!-- <entry key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</value></entry> --> + <prop key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</prop> + <!-- for development phase only: --> + <!-- end for development phase only --> + + <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop> + <prop key="hibernate.jdbc.batch_size">0</prop> + <prop key="hibernate.jdbc.use_streams_for_binary">true</prop> + <prop key="hibernate.use_outer_join">true</prop> + <prop key="hibernate.max_fetch_depth">10</prop> + <prop key="hibernate.cache.provider_class">${hibernate.caching.singlevm.class}</prop> + <prop key="hibernate.cache.use_query_cache">${hibernate.caching.use.query.cache}</prop> + <prop key="hibernate.cache.use_second_level_cache">${hibernate.use.second.level.cache}</prop> + <prop key="hibernate.cache.region.factory_class">${hibernate.caching.cluster.class}</prop> + <prop key="hibernate.cache.region.jbc2.query.localonly">true</prop> + <prop key="hibernate.cache.region_prefix">olat</prop> + <!-- from java.sql.Connection + int TRANSACTION_READ_UNCOMMITTED = 1; + int TRANSACTION_READ_COMMITTED = 2; + int TRANSACTION_REPEATABLE_READ = 4; + int TRANSACTION_SERIALIZABLE = 8; + olat works only with level 2; the database must support level 2 + --> + <prop key="hibernate.connection.isolation">2</prop> + <prop key="javax.persistence.lock.timeout">30000</prop> + </props> + </constructor-arg> + </bean> - <entry key="hibernate.transaction.factory_class"><value>org.hibernate.transaction.JDBCTransactionFactory</value></entry> - <entry key="hibernate.jdbc.batch_size"><value>0</value></entry> - <entry key="hibernate.jdbc.use_streams_for_binary"><value>true</value></entry> - <entry key="hibernate.use_outer_join"><value>true</value></entry> - <entry key="hibernate.max_fetch_depth"><value>10</value></entry> - <!-- TODO: may update to version 2.x of ehcache which only has the region.factory_class property--> - <!-- <entry key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</value></entry> --> - <entry key="hibernate.cache.provider_class"><value>${hibernate.caching.singlevm.class}</value></entry> - <entry key="hibernate.cache.use_query_cache"><value>${hibernate.caching.use.query.cache}</value></entry> - <entry key="hibernate.cache.use_second_level_cache"><value>${hibernate.use.second.level.cache}</value></entry> <!-- TODO: ask christian, does this need to be false on SV mode? --> - <!-- <entry key="hibernate.cache.region.factory_class">org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory</value></entry> --> - <entry key="hibernate.cache.region.factory_class"><value>${hibernate.caching.cluster.class}</value></entry> - - <entry key="hibernate.cache.region.jbc2.query.localonly"><value>true</value></entry> - <entry key="hibernate.cache.region_prefix"><value>olat</value></entry> - <!-- to disable caching use this class --> - <!-- <hibernate.cache.region.factory_class>org.hibernate.cache.NoCacheProvider</hibernate.cache.region.factory_class> --> - <!-- from java.sql.Connection - int TRANSACTION_READ_UNCOMMITTED = 1; - int TRANSACTION_READ_COMMITTED = 2; - int TRANSACTION_REPEATABLE_READ = 4; - int TRANSACTION_SERIALIZABLE = 8; - olat works only with level 2; the database must support level 2 - --> - <entry key="hibernate.connection.isolation"><value>2</value></entry> - </map> - </constructor-arg> -</bean> + <!-- c3p0 pooled JDBC connection --> + <bean id="mysqlPooledDataSource" + class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close"> + <!-- connection settings --> + <property name="driverClass"><value>com.mysql.jdbc.Driver</value></property> + <property name="jdbcUrl"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&characterEncoding=UTF-8</value></property> + <property name="user" value="${db.user}" /> + <property name="password" value="${db.pass}" /> + <property name="minPoolSize" value="${db.hibernate.c3p0.minsize}" /> + <property name="maxPoolSize" value="${db.hibernate.c3p0.maxsize}" /> + <property name="maxIdleTime" value="1800" /> + <property name="maxStatements" value="10000" /> + <property name="autoCommitOnClose" value="false" /> + <property name="acquireIncrement" value="2" /> + <property name="idleConnectionTestPeriod" value="500" /> + <!-- property name="hibernate.c3p0.numHelperThreads" value="10" --> + <property name="maxAdministrativeTaskTime" value="120" /> + </bean> + + <!-- c3p0 pooled JDBC connection --> + <bean id="postgresqlPooledDataSource" + class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close"> + <!-- connection settings --> + <property name="driverClass"><value>org.postgresql.Driver</value></property> + <property name="jdbcUrl"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property> + <property name="user" value="${db.user}" /> + <property name="password" value="${db.pass}" /> + <property name="minPoolSize" value="${db.hibernate.c3p0.minsize}" /> + <property name="maxPoolSize" value="${db.hibernate.c3p0.maxsize}" /> + <property name="maxIdleTime" value="1800" /> + <property name="maxStatements" value="10000" /> + <property name="autoCommitOnClose" value="false" /> + <property name="acquireIncrement" value="2" /> + <property name="idleConnectionTestPeriod" value="500" /> + <!-- property name="hibernate.c3p0.numHelperThreads" value="10" --> + <property name="maxAdministrativeTaskTime" value="120" /> + </bean> <!-- The following dataresources are referenced from the statisticContext.xml and upgradeContext.xml, but are not used in the SessionFactory! The SessionFactory's DB Connection is configured with the bean "${db.vendor}HibernateProperties".--> @@ -210,18 +142,18 @@ <!-- The mysql datasource checks upon startup whether the tables are of type InnoDB, if not it will not start. If you have an other type of transactional tables just switch back the spring config to the normal org.springframework.jdbc.datasource.DriverManagerDataSource and the check is gone.--> <bean id="mysqlDataSource" class="org.olat.core.commons.persistence.InnoDBAwareDriverManagerDataSource" lazy-init="true" init-method="init"> - <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> - <property name="url"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&characterEncoding=UTF-8</value></property> - <property name="username" value="${db.user}" /> - <property name="password" value="${db.pass}" /> - <property name="dbVendor" value="${db.vendor}" /> + <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> + <property name="url"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&characterEncoding=UTF-8</value></property> + <property name="username" value="${db.user}" /> + <property name="password" value="${db.pass}" /> + <property name="dbVendor" value="${db.vendor}" /> </bean> <bean id="postgresqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="true"> - <property name="driverClassName"><value>org.postgresql.Driver</value></property> - <property name="url"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property> - <property name="username" value="${db.user}" /> - <property name="password" value="${db.pass}" /> + <property name="driverClassName"><value>org.postgresql.Driver</value></property> + <property name="url"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property> + <property name="username" value="${db.user}" /> + <property name="password" value="${db.pass}" /> </bean> </beans> diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml index fe8ceaf27f3..09a2ca0dfb4 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.commons.services.commentAndRating.impl.UserCommentImpl" table="o_usercomment"> diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml index 1a5002ace1d..4373b40ee83 100644 --- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml +++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.commons.services.commentAndRating.impl.UserRatingImpl" table="o_userrating"> diff --git a/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml index b7892e67cba..89830f06f48 100644 --- a/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml +++ b/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.commons.services.mark.impl.MarkImpl" table="o_mark"> <cache usage="read-write" /> diff --git a/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml index 7cc29501dd7..3e17aef314f 100644 --- a/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml +++ b/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.commons.services.tagging.model.TagImpl" table="o_tag"> <cache usage="read-write" /> diff --git a/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml b/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml index 3cc598e67ff..d407060ed4b 100644 --- a/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml +++ b/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.logging.activity.LoggingObject" diff --git a/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml index d97fdd2c354..7d494e85658 100644 --- a/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml +++ b/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.util.mail.model.DBMailImpl" mutable="false" table="o_mail"> diff --git a/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml index 49a26127fcf..49956e12f29 100644 --- a/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml +++ b/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.util.mail.model.DBMailAttachment" table="o_mail_attachment"> diff --git a/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml index 14a7d437994..99a64c0e2bf 100644 --- a/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml +++ b/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.util.mail.model.DBMailRecipient" table="o_mail_recipient"> diff --git a/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml b/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml index c8374f7e5a0..f9ec0fe3dfc 100644 --- a/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml +++ b/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.assessment.model.UserCourseInfosImpl" table="o_as_user_course_infos"> diff --git a/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml b/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml index 44af35f69b8..099f3e2ebc4 100644 --- a/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml +++ b/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.assessment.model.UserEfficiencyStatementImpl" table="o_as_eff_statement"> diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml index e5b063deff6..9b23245e924 100644 --- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml +++ b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <subclass name="org.olat.course.assessment.portfolio.EfficiencyStatementArtefact" diff --git a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml index d7e0d83cba4..1da2d604a85 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml +++ b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml index 20b651a7a7d..0358920d5e3 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml +++ b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.nodes.projectbroker.datamodel.ProjectBrokerImpl" table="o_projectbroker"> diff --git a/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml b/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml index 7c0bfc186e3..72580864bf9 100644 --- a/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.daily.DailyStat" diff --git a/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml b/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml index c689f6c4db2..8b279f2afc6 100644 --- a/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.homeorg.HomeOrgStat" diff --git a/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml b/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml index 8c7ea8e153b..158c616da48 100644 --- a/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.hourofday.HourOfDayStat" diff --git a/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml b/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml index fdb87f1fdf7..2b7ea21c237 100644 --- a/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.orgtype.OrgTypeStat" diff --git a/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml b/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml index cceb8294cf2..2268b2336d2 100644 --- a/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.studybranch3.StudyBranch3Stat" diff --git a/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml b/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml index 2f95b43f812..48b66cd46d3 100644 --- a/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.studylevel.StudyLevelStat" diff --git a/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml b/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml index a808b565238..474830595ad 100644 --- a/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml +++ b/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.course.statistic.weekly.WeeklyStat" diff --git a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml b/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml index 64bd8c87dc3..5e0b21f1ce0 100644 --- a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml +++ b/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.modules.fo.ForumImpl" table="o_forum"> diff --git a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml b/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml index 51217b7f862..b3d67af3a9a 100644 --- a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml +++ b/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml b/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml index 0a4c0c80c7c..0f93993e90a 100644 --- a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml +++ b/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.modules.fo.ReadMessageImpl" table="o_readmessage"> diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml index 08ad99a5aef..d560ca00297 100644 --- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml +++ b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <subclass name="org.olat.modules.fo.portfolio.ForumArtefact" diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml index 96c8d1bfde7..564dcc178f6 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml +++ b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <subclass name="org.olat.modules.webFeed.portfolio.BlogArtefact" diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml index 51219126023..a9ab49ae6f9 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml +++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <subclass name="org.olat.modules.webFeed.portfolio.LiveBlogArtefact" diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml index b5aaabb693a..f556fd577a2 100644 --- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml +++ b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <subclass name="org.olat.modules.wiki.portfolio.WikiArtefact" diff --git a/src/main/java/org/olat/note/NoteImpl.hbm.xml b/src/main/java/org/olat/note/NoteImpl.hbm.xml index 03c6e65cb86..1599526c201 100644 --- a/src/main/java/org/olat/note/NoteImpl.hbm.xml +++ b/src/main/java/org/olat/note/NoteImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml b/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml index 0d5bb061add..d7147d81771 100644 --- a/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml +++ b/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.notifications.PublisherImpl" table="o_noti_pub"> diff --git a/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml b/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml index fcf6f4de107..21f742ed230 100644 --- a/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml +++ b/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.notifications.SubscriberImpl" table="o_noti_sub"> diff --git a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml b/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml index c6d6553d054..d6e41e43583 100644 --- a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml +++ b/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.portfolio.model.notification.EPStructureElementNotification" table="o_ep_notifications_struct_v" mutable="false"> diff --git a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml index 67c692f065b..54b93bd7e8b 100644 --- a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml +++ b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.portfolio.model.restriction.CollectRestriction" table="o_ep_collect_restriction"> diff --git a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml b/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml index c425d254f58..6f5ebaaf94d 100644 --- a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml +++ b/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.portfolio.model.structel.EPStructureElement" table="o_ep_struct_el" discriminator-value="element"> diff --git a/src/main/java/org/olat/properties/Property.hbm.xml b/src/main/java/org/olat/properties/Property.hbm.xml index ec201254362..817247ec355 100644 --- a/src/main/java/org/olat/properties/Property.hbm.xml +++ b/src/main/java/org/olat/properties/Property.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> diff --git a/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml b/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml index 3bb03258da7..12318d9269a 100644 --- a/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml +++ b/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.registration.TemporaryKeyImpl" table="o_temporarykey"> diff --git a/src/main/java/org/olat/repository/MetaDataElement.hbm.xml b/src/main/java/org/olat/repository/MetaDataElement.hbm.xml index 21fc99e6532..be8e3e1476f 100644 --- a/src/main/java/org/olat/repository/MetaDataElement.hbm.xml +++ b/src/main/java/org/olat/repository/MetaDataElement.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.repository.MetaDataElement" table="o_repositorymetadata"> diff --git a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml index 010bdb22e92..9685912506e 100644 --- a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml +++ b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.repository.RepositoryEntry" table="o_repositoryentry"> diff --git a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml index e20faa29f58..7f958f89f2b 100644 --- a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml +++ b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.accesscontrol.model.AbstractAccessMethod" table="o_ac_method"> diff --git a/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml index dbe0210db3e..4d23f8abf6e 100644 --- a/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml +++ b/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.accesscontrol.model.AccessTransactionImpl" table="o_ac_transaction"> diff --git a/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml index 5709d22a24b..e3a5c97abd2 100644 --- a/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml +++ b/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.accesscontrol.model.OfferImpl" table="o_ac_offer"> <id name="key" column="offer_id" type="long" unsaved-value="null"> diff --git a/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml index 1747f312242..6ff83c07e75 100644 --- a/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml +++ b/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.accesscontrol.model.OfferAccessImpl" table="o_ac_offer_access"> <id name="key" column="offer_method_id" type="long" unsaved-value="null"> diff --git a/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml index 7bae9efdf43..6147d39de9d 100644 --- a/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml +++ b/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.accesscontrol.model.OrderImpl" table="o_ac_order"> diff --git a/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml b/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml index a6c931df45d..dacf5745f57 100644 --- a/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml +++ b/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.lock.pessimistic.PLockImpl" table="o_plock"> diff --git a/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java b/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java index e79a1653682..9785f7190b7 100644 --- a/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java +++ b/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java @@ -24,7 +24,9 @@ */ package org.olat.resource.lock.pessimistic; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.hibernate.LockMode; import org.olat.core.commons.persistence.DBFactory; @@ -77,7 +79,11 @@ public class PessimisticLockManager extends BasicManager implements Initializabl private PLock findPLock(String asset) { DBQuery q = DBFactory.getInstance().createQuery("select plock from org.olat.resource.lock.pessimistic.PLockImpl as plock where plock.asset = :asset"); q.setParameter("asset", asset); - q.setLockMode("plock", LockMode.UPGRADE); + q.setLockMode("plock", LockMode.PESSIMISTIC_WRITE); + + Map<String,Object> props = new HashMap<String, Object>(); + props.put("javax.persistence.lock.timeout", new Integer(30000)); + q.setProperties(props); List res = q.list(); if (res.size() == 0) { return null; diff --git a/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml b/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml index 9fb1a35b444..a828613f43a 100644 --- a/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml +++ b/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.resource.references.ReferenceImpl" table="o_references"> diff --git a/src/main/java/org/olat/user/UserImpl.hbm.xml b/src/main/java/org/olat/user/UserImpl.hbm.xml index 7ace2e77abe..1f71d3f50ed 100644 --- a/src/main/java/org/olat/user/UserImpl.hbm.xml +++ b/src/main/java/org/olat/user/UserImpl.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.user.UserImpl" table="o_user"> diff --git a/src/test/java/org/olat/core/commons/persistence/DBTest.java b/src/test/java/org/olat/core/commons/persistence/DBTest.java index 0439a25fa0a..f49c28dbe41 100644 --- a/src/test/java/org/olat/core/commons/persistence/DBTest.java +++ b/src/test/java/org/olat/core/commons/persistence/DBTest.java @@ -35,6 +35,7 @@ import static org.junit.Assert.fail; import org.junit.After; import org.junit.Test; import org.olat.core.logging.DBRuntimeException; +import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.properties.Property; import org.olat.properties.PropertyManager; @@ -48,6 +49,8 @@ import org.olat.test.OlatTestCase; * */ public class DBTest extends OlatTestCase { + + private final OLog log = Tracing.createLoggerFor(DBTest.class); /** @@ -107,11 +110,11 @@ public class DBTest extends OlatTestCase { PropertyManager pm = PropertyManager.getInstance(); Property p1 = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null); pm.saveProperty(p1); - String propertyKey2 = "testRollback-2"; String testValue2 = "testRollback-2"; // name is null => generated DB error => rollback Property p2 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue2, null); pm.saveProperty(p2); + db.commit(); fail("Should generate error for rollback."); } catch (Exception ex) { db.closeSession(); @@ -129,7 +132,6 @@ public class DBTest extends OlatTestCase { String testValue1 = "testMixed-1"; String propertyKey2 = "testMixed-2"; String testValue2 = "testMixed-2"; - String propertyKey3 = "testMixed-3"; String testValue3 = "testMixed-3"; try { // outside of transaction @@ -142,6 +144,7 @@ public class DBTest extends OlatTestCase { // name is null => generated DB error => rollback Property p3 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue3, null); pm.saveProperty(p3); + db.commit(); fail("Should generate error for rollback."); db.closeSession(); } catch (Exception ex) { @@ -161,7 +164,6 @@ public class DBTest extends OlatTestCase { String testValue1 = "testNonTransactional-1"; String propertyKey2 = "testNonTransactional-2"; String testValue2 = "testNonTransactional-2"; - String propertyKey3 = "testNonTransactional-3"; String testValue3 = "testNonTransactional-3"; try { PropertyManager pm = PropertyManager.getInstance(); @@ -172,6 +174,7 @@ public class DBTest extends OlatTestCase { // name is null => generated DB error => rollback ? Property p3 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue3, null); pm.saveProperty(p3); + db.commit(); fail("Should generate error for rollback."); db.closeSession(); } catch (Exception ex) { @@ -193,7 +196,7 @@ public class DBTest extends OlatTestCase { public void testConcurrentUpdate() { int maxWorkers = 5; int loops = 100; - Tracing.logInfo("start testConcurrentUpdate maxWorkers=" + maxWorkers + " loops=" + loops, this.getClass()); + log.info("start testConcurrentUpdate maxWorkers=" + maxWorkers + " loops=" + loops); DbWorker[] dbWorkers = new DbWorker[maxWorkers]; for (int i=0; i<maxWorkers; i++) { dbWorkers[i] = new DbWorker(i,loops); @@ -207,21 +210,21 @@ public class DBTest extends OlatTestCase { } } try { - Thread.currentThread().sleep(1000); + Thread.sleep(1000); } catch (InterruptedException e) { - Tracing.logWarn("testConcurrentUpdate InterruptedException=" + e, this.getClass()); + log.warn("testConcurrentUpdate InterruptedException=" + e); } } for (int i=0; i<maxWorkers; i++) { assertEquals(0,dbWorkers[i].getErrorCounter()); } - Tracing.logInfo("finished testConcurrentUpdate " , this.getClass()); + log.info("finished testConcurrentUpdate "); } @Test public void testDbPerf() { int loops = 1000; long timeWithoutTransction = 0; - Tracing.logInfo("start testDbPerf with loops=" + loops, this.getClass()); + log.info("start testDbPerf with loops=" + loops); try { long startTime = System.currentTimeMillis(); for (int loopCounter=0; loopCounter<loops; loopCounter++) { @@ -237,7 +240,7 @@ public class DBTest extends OlatTestCase { } long endTime = System.currentTimeMillis(); timeWithoutTransction = endTime - startTime; - Tracing.logInfo("testDbPerf without transaction takes :" + timeWithoutTransction + "ms", this.getClass()); + log.info("testDbPerf without transaction takes :" + timeWithoutTransction + "ms"); } catch (Exception ex) { fail("Exception in testDbPerf without transaction ex="+ ex); } @@ -258,16 +261,15 @@ public class DBTest extends OlatTestCase { } long endTime = System.currentTimeMillis(); long timeWithTransction = endTime - startTime; - Tracing.logInfo("testDbPerf with transaction takes :" + timeWithTransction + "ms", this.getClass()); - Tracing.logInfo("testDbPerf diff between transaction and without transaction :" + (timeWithTransction - timeWithoutTransction) + "ms", this.getClass()); + log.info("testDbPerf with transaction takes :" + timeWithTransction + "ms"); + log.info("testDbPerf diff between transaction and without transaction :" + (timeWithTransction - timeWithoutTransction) + "ms"); } catch (Exception ex) { fail("Exception in testDbPerf with transaction ex="+ ex); } } + @Test public void testDBUTF8capable() { - //FIXME:fj: move this test to the db module - DB db = DBFactory.getInstance(); PropertyManager pm = PropertyManager.getInstance(); String unicodetest = "a-greek a\u03E2a\u03EAa\u03E8 arab \u0630a\u0631 chinese:\u3150a\u3151a\u3152a\u3153a\u3173a\u3110-z"; @@ -279,8 +281,8 @@ public class DBTest extends OlatTestCase { Property p2 = pm.findProperty(null, null, null, null, "superbluberkey"); String lStr = p2.getStringValue(); assertEquals(unicodetest, lStr); - } + @Test public void testFindObject() { // 1. create a property to have an object @@ -307,66 +309,64 @@ public class DBTest extends OlatTestCase { public void tearDown() throws Exception { DBFactory.getInstance().closeSession(); } + + class DbWorker implements Runnable { + private Thread workerThread = null; + private int numberOfLoops; + private String workerId; + private int errorCounter = 0; + private boolean isfinished = false; -} - -class DbWorker implements Runnable { - - private Thread workerThread = null; - private int numberOfLoops; - private String workerId; - private int errorCounter = 0; - private boolean isfinished = false; - - public DbWorker(int id, int numberOfLoops) { - this.numberOfLoops = numberOfLoops; - this.workerId = Integer.toString(id); - if ( (workerThread == null) || !workerThread.isAlive()) { - Tracing.logInfo("start DbWorker thread id=" + id, this.getClass()); - workerThread = new Thread(this, "TestWorkerThread-" + id); - workerThread.setPriority(Thread.MAX_PRIORITY); - workerThread.setDaemon(true); - workerThread.start(); + public DbWorker(int id, int numberOfLoops) { + this.numberOfLoops = numberOfLoops; + this.workerId = Integer.toString(id); + if ( (workerThread == null) || !workerThread.isAlive()) { + log.info("start DbWorker thread id=" + id); + workerThread = new Thread(this, "TestWorkerThread-" + id); + workerThread.setPriority(Thread.MAX_PRIORITY); + workerThread.setDaemon(true); + workerThread.start(); + } } - } - public void run() { - int loopCounter = 0; - try { - while (loopCounter++ < numberOfLoops ) { - String propertyKey = "DbWorkerKey-" + workerId + "-" + loopCounter; - DB db = DBFactory.getInstance(); - PropertyManager pm = PropertyManager.getInstance(); - String testValue = "DbWorkerValue-" + workerId + "-" + loopCounter; - Property p = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null); - pm.saveProperty(p); - // forget session cache etc. - db.closeSession(); - - db = DBFactory.getInstance(); - Property p2 = pm.findProperty(null, null, null, null, propertyKey); - String lStr = p2.getStringValue(); - if (!testValue.equals(lStr)) { - Tracing.logInfo("Property ERROR testValue=" + testValue + ": lStr=" + lStr, this.getClass()); - errorCounter++; + public void run() { + int loopCounter = 0; + try { + while (loopCounter++ < numberOfLoops ) { + String propertyKey = "DbWorkerKey-" + workerId + "-" + loopCounter; + DB db = DBFactory.getInstance(); + PropertyManager pm = PropertyManager.getInstance(); + String testValue = "DbWorkerValue-" + workerId + "-" + loopCounter; + Property p = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null); + pm.saveProperty(p); + // forget session cache etc. + db.closeSession(); + + db = DBFactory.getInstance(); + Property p2 = pm.findProperty(null, null, null, null, propertyKey); + String lStr = p2.getStringValue(); + if (!testValue.equals(lStr)) { + log.info("Property ERROR testValue=" + testValue + ": lStr=" + lStr); + errorCounter++; + } + db.closeSession(); + + Thread.sleep(5); } - db.closeSession(); - - Thread.currentThread().sleep(5); + } catch (Exception ex) { + log.info("ERROR workerId=" + workerId + ": Exception=" + ex); + errorCounter++; } - } catch (Exception ex) { - Tracing.logInfo("ERROR workerId=" + workerId + ": Exception=" + ex, this.getClass()); - errorCounter++; + isfinished = true; + } + + protected int getErrorCounter() { + return errorCounter; + } + + protected boolean isfinished() { + return isfinished; } - isfinished = true; - } - - protected int getErrorCounter() { - return errorCounter; - } - - protected boolean isfinished() { - return isfinished; } } \ No newline at end of file diff --git a/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml b/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml index 0f5dd21d852..e4e2ab16b73 100644 --- a/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml +++ b/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> <class name="org.olat.core.commons.persistence.TestTable" table="o_tst_testtable"> diff --git a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java index ce88e87fe59..fb7d0509b68 100644 --- a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java +++ b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java @@ -168,6 +168,8 @@ public class PLockTest extends OlatTestCase { //Ignore Test if DB is PostgreSQL. PostgreSQL has not lock timeout assumeTrue(!isPostgresqlConfigured()); + final String asset = "testLockWaitTimout"; + System.out.println("testing if holding a lock timeouts"); // make sure all three row entries for the locks are created, otherwise the system-wide locking // applied on lock-row-creation cannot support row-level-locking by definition. @@ -197,7 +199,7 @@ public class PLockTest extends OlatTestCase { public void run() { try { sleep(2500); - PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); assertNotNull(p3); } catch (Exception e) { exceptionHolder.add(e); @@ -214,7 +216,7 @@ public class PLockTest extends OlatTestCase { new Thread(new Runnable() { public void run() { try { - PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli"); + PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset); assertNotNull(p2); sleep(60000); // holding the lock for more than the transaction timeout (normally 30secs, configured where? hib) should cause a lock timeout -- GitLab