You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/04/05 17:06:12 UTC
svn commit: r645113 - in /tapestry/tapestry5/trunk:
tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/
tapestry-hibernate/src/site/apt/
tapestry-hibernate/src/test/java/org/example/app0/pages/
tapestry-hibernate/src/test/java/org/...
Author: hlship
Date: Sat Apr 5 08:06:11 2008
New Revision: 645113
URL: http://svn.apache.org/viewvc?rev=645113&view=rev
Log:
TAPESTRY-2247: Transactions should roll back, not commit, at the end of each request
Removed:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/Inject.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/InjectService.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/IntermediateType.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/Primary.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/Symbol.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/annotations/Value.java
Modified:
tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateSessionManagerImpl.java
tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/CachedForm.java
tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/EncodeEntities.java
tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/PersistEntity.java
tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateSessionManagerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateSessionManagerImpl.java?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateSessionManagerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateSessionManagerImpl.java Sat Apr 5 08:06:11 2008
@@ -51,12 +51,13 @@
}
/**
- * Commits the transaction at the end of the request, then closes the session. The transaction commit should largely
- * be a no-op, since it's expected that {@link #commit()} will have been invoked after any real changes.
+ * Rollsback the transaction at the end of the request, then closes the session. This means that any uncommitted
+ * changes are lost; code should inject the HSM and invoke {@link #commit()} after making any changes, if they
+ * should persist.
*/
public void threadDidCleanup()
{
- _transaction.commit();
+ _transaction.rollback();
_session.close();
}
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt Sat Apr 5 08:06:11 2008
@@ -9,7 +9,8 @@
the following example:
+----+
-public class ViewPerson {
+public class ViewPerson
+{
@Property
private Person _person;
@@ -40,7 +41,8 @@
If you wish to persist an entity in the session, you may use the "entity" persistence strategy:
+----+
-public class ViewPerson {
+public class ViewPerson
+{
@Persist("entity")
@Property
private Person _person;
@@ -55,3 +57,43 @@
This persistence strategy works with any Hibernate entity that is associated with a valid Hibernate Session by persisting only the id
of the entity. Notice that no onPassivate() method is needed; when the page renders the entity is loaded by the id stored in the session.
+
+Committing Changes
+
+ All Hibernate operations occur in a transaction, but that transaction is rolledback at the end of each request; thus
+ any changes you make will be <lost> unless the transaction is committed.
+
+ The correct way to commit the transaction is by injecting the HibernateSessionManager service:
+
++----+
+public class EditPerson
+{
+ @Persist("entity")
+ @Property
+ private Person _person;
+
+ @InjectPage
+ private PersonIndex _personIndex;
+
+ @Inject
+ private HibernateSessionManager _manager;
+
+ void onActivate(Person person)
+ {
+ _person = person;
+ }
+
+ Object onPassivate() { return _person; }
+
+ Object onSuccess()
+ {
+ _manager.commit();
+
+ return _personIndex;
+ }
+}
++----+
+
+ In this example, the Person object may be updated by a form; the form's success event handler method,
+ onSuccess(), asks the HibernateSessionManager to commit the current transaction before returning to
+ the PersonIndex page.
\ No newline at end of file
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/CachedForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/CachedForm.java?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/CachedForm.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/CachedForm.java Sat Apr 5 08:06:11 2008
@@ -14,40 +14,49 @@
package org.example.app0.pages;
-import java.util.List;
-
import org.apache.tapestry.annotations.Cached;
import org.apache.tapestry.annotations.Property;
+import org.apache.tapestry.hibernate.HibernateSessionManager;
import org.apache.tapestry.ioc.annotations.Inject;
import org.example.app0.entities.User;
import org.hibernate.Session;
+import java.util.List;
+
@SuppressWarnings("unused")
public class CachedForm
{
@Property
private String _name;
-
- @Property
+
+ @Property
private User _user;
-
+
@Property
private int _index;
-
+
@Inject
private Session _session;
-
- void onSuccess() {
+
+ @Inject
+ private HibernateSessionManager _manager;
+
+ void onSuccess()
+ {
User user = new User();
user.setFirstName(_name);
+
_session.save(user);
+
+ _manager.commit();
}
@SuppressWarnings("unchecked")
- @Cached
- public List<User> getUsers() {
- return _session.createQuery("from User").list();
+ @Cached
+ public List<User> getUsers()
+ {
+ return _session.createQuery("from User").list();
}
-
-
+
+
}
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/EncodeEntities.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/EncodeEntities.java?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/EncodeEntities.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/EncodeEntities.java Sat Apr 5 08:06:11 2008
@@ -14,38 +14,48 @@
package org.example.app0.pages;
-import java.util.List;
-
import org.apache.tapestry.annotations.Property;
+import org.apache.tapestry.hibernate.HibernateSessionManager;
import org.apache.tapestry.ioc.annotations.Inject;
import org.example.app0.entities.User;
import org.hibernate.Session;
-public class EncodeEntities {
- @Inject
- @Property
- private Session _session;
-
- @SuppressWarnings("unused")
- @Property
- private User _user;
-
- void onCreate() {
- User user = new User();
- user.setFirstName("name");
- _session.save(user);
- }
-
- @SuppressWarnings("unchecked")
- User onPassivate() {
- List<User> users = _session.createQuery("from User").list();
- if (users.isEmpty())
- return null;
-
- return users.get(0);
- }
-
- void onActivate(User user) {
- _user = user;
- }
+import java.util.List;
+
+public class EncodeEntities
+{
+ @Inject
+ private Session _session;
+
+ @SuppressWarnings("unused")
+ @Property
+ private User _user;
+
+ @Inject
+ private HibernateSessionManager _manager;
+
+ void onCreate()
+ {
+ User user = new User();
+ user.setFirstName("name");
+
+ _session.save(user);
+
+ _manager.commit();
+ }
+
+ @SuppressWarnings("unchecked")
+ User onPassivate()
+ {
+ List<User> users = _session.createQuery("from User").list();
+ if (users.isEmpty())
+ return null;
+
+ return users.get(0);
+ }
+
+ void onActivate(User user)
+ {
+ _user = user;
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/PersistEntity.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/PersistEntity.java?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/PersistEntity.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/PersistEntity.java Sat Apr 5 08:06:11 2008
@@ -14,45 +14,61 @@
package org.example.app0.pages;
-import java.util.List;
-
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.annotations.Property;
+import org.apache.tapestry.hibernate.HibernateSessionManager;
import org.apache.tapestry.ioc.annotations.Inject;
import org.example.app0.entities.User;
import org.hibernate.Session;
-public class PersistEntity {
- @Persist("entity")
- @Property
- private User _user;
-
- @Inject
- private Session _session;
-
- void onCreateEntity() {
- User user = new User();
- user.setFirstName("name");
- _session.save(user);
- _user = user;
- }
-
- void onChangeName() {
- _user.setFirstName("name2");
- // avoid having the changes saved if the request transaction is committed
- _session.evict(_user);
- }
-
- void onSetToTransient() {
- _user = new User();
- }
-
- void onSetToNull() {
- _user = null;
- }
-
- void onDelete() {
- for(User user : (List<User>)_session.createQuery("from User").list())
- _session.delete(user);
- }
+import java.util.List;
+
+public class PersistEntity
+{
+ @Persist("entity")
+ @Property
+ private User _user;
+
+ @Inject
+ private Session _session;
+
+ @Inject
+ private HibernateSessionManager _manager;
+
+ void onCreateEntity()
+ {
+ User user = new User();
+ user.setFirstName("name");
+
+ _session.save(user);
+ _manager.commit();
+
+ _user = user;
+ }
+
+ void onChangeName()
+ {
+ _user.setFirstName("name2");
+ // avoid having the changes saved if the request transaction is committed
+ // This may no longer be necessary due to TAPESTRY-2247
+ _session.evict(_user);
+ }
+
+ void onSetToTransient()
+ {
+ _user = new User();
+ }
+
+ void onSetToNull()
+ {
+ _user = null;
+ }
+
+ void onDelete()
+ {
+ for (User user : (List<User>) _session.createQuery("from User").list())
+ _session.delete(user);
+
+ _manager.commit();
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java?rev=645113&r1=645112&r2=645113&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java Sat Apr 5 08:06:11 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,10 +14,17 @@
package org.example.app0.services;
+import org.apache.tapestry.TapestryConstants;
import org.apache.tapestry.hibernate.HibernateModule;
+import org.apache.tapestry.ioc.MappedConfiguration;
import org.apache.tapestry.ioc.annotations.SubModule;
@SubModule(HibernateModule.class)
-public class AppModule {
+public class AppModule
+{
+ public static void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
+ {
+ configuration.add(TapestryConstants.PRODUCTION_MODE_SYMBOL, "false");
+ }
}