tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From drobia...@apache.org
Subject svn commit: r822020 - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hiber...
Date Mon, 05 Oct 2009 21:20:32 GMT
Author: drobiazko
Date: Mon Oct  5 21:20:30 2009
New Revision: 822020

URL: http://svn.apache.org/viewvc?rev=822020&view=rev
Log:
TAP5-790: Provide ApplicationStatePersistenceStrategy for Hibernate entities 

Added:
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
  (with props)
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
  (with props)
    tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
  (with props)
    tapestry/tapestry5/trunk/tapestry-hibernate/src/test/webapp/SSOEntity.tml
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
    tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/HibernateSymbols.java
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java
    tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt
    tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java
    tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/services/AppModule.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java?rev=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
Mon Oct  5 21:20:30 2009
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2009 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.
@@ -33,7 +33,7 @@
         this.request = request;
     }
 
-    private Session getSession()
+    protected Session getSession()
     {
         return request.getSession(true);
     }
@@ -41,22 +41,27 @@
     @SuppressWarnings("unchecked")
     public <T> T get(Class<T> ssoClass, ApplicationStateCreator<T> creator)
     {
+        return (T) getOrCreate(ssoClass, creator);
+    }
+    
+    protected <T> Object getOrCreate(Class<T> ssoClass, ApplicationStateCreator<T>
creator)
+    {
         Session session = getSession();
 
         String key = buildKey(ssoClass);
 
-        T sso = (T) session.getAttribute(key);
+        Object sso = session.getAttribute(key);
 
         if (sso == null)
         {
             sso = creator.create();
-            session.setAttribute(key, sso);
+            set(ssoClass, (T) sso);
         }
 
         return sso;
     }
 
-    private <T> String buildKey(Class<T> ssoClass)
+    protected <T> String buildKey(Class<T> ssoClass)
     {
         return PREFIX + ssoClass.getName();
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java?rev=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
Mon Oct  5 21:20:30 2009
@@ -88,6 +88,7 @@
 
         train_create(creator, aso);
 
+        train_getSession(request, true, session);
         session.setAttribute(key, aso);
 
         // Then for exists() after

Modified: tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/HibernateSymbols.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/HibernateSymbols.java?rev=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/HibernateSymbols.java
(original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/hibernate/HibernateSymbols.java
Mon Oct  5 21:20:30 2009
@@ -38,4 +38,11 @@
      * Override to "false" to handle entity value encoding explicitly.
      */
     public static final String PROVIDE_ENTITY_VALUE_ENCODERS = "tapestry.hibernate.provide-entity-value-encoders";
+
+    /**
+     * If true, then "entity" persistence strategy is used to store Hibernate entities as
{@code Session State Objects}.
+     * 
+     * @since 5.2.0.0
+     */
+    public static final String ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED = "tapestry.hibernate.entity-session-state-persistence-strategy-enabled";
 }

Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java?rev=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java
(original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java
Mon Oct  5 21:20:30 2009
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2009 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,9 +14,12 @@
 
 package org.apache.tapestry5.hibernate;
 
+import java.util.Iterator;
+
 import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.hibernate.CommitAfterWorker;
+import org.apache.tapestry5.internal.hibernate.EntityApplicationStatePersistenceStrategy;
 import org.apache.tapestry5.internal.hibernate.EntityPersistentFieldStrategy;
 import org.apache.tapestry5.internal.hibernate.HibernateEntityValueEncoder;
 import org.apache.tapestry5.ioc.Configuration;
@@ -28,6 +31,8 @@
 import org.apache.tapestry5.ioc.services.PropertyAccess;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.services.AliasContribution;
+import org.apache.tapestry5.services.ApplicationStateContribution;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
 import org.apache.tapestry5.services.LibraryMapping;
 import org.apache.tapestry5.services.PersistentFieldStrategy;
@@ -35,8 +40,6 @@
 import org.hibernate.Session;
 import org.hibernate.mapping.PersistentClass;
 
-import java.util.Iterator;
-
 /**
  * Supplements the services defined by {@link org.apache.tapestry5.hibernate.HibernateCoreModule}
with additional
  * services and configuration specific to Tapestry web application.
@@ -46,7 +49,8 @@
 {
     public static void contributeFactoryDefaults(MappedConfiguration<String, String>
configuration)
     {
-        configuration.add(HibernateConstants.PROVIDE_ENTITY_VALUE_ENCODERS_SYMBOL, "true");
+        configuration.add(HibernateSymbols.PROVIDE_ENTITY_VALUE_ENCODERS, "true");
+        configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED,
"false");
     }
 
     /**
@@ -76,7 +80,7 @@
      */
     @SuppressWarnings("unchecked")
     public static void contributeValueEncoderSource(MappedConfiguration<Class, ValueEncoderFactory>
configuration,
-                                                    @Symbol(HibernateConstants.PROVIDE_ENTITY_VALUE_ENCODERS_SYMBOL)
+                                                    @Symbol(HibernateSymbols.PROVIDE_ENTITY_VALUE_ENCODERS)
                                                     boolean provideEncoders,
                                                     final HibernateSessionSource sessionSource,
                                                     final Session session,
@@ -113,7 +117,45 @@
     public static void contributePersistentFieldManager(
             MappedConfiguration<String, PersistentFieldStrategy> configuration)
     {
-        configuration.addInstance("entity", EntityPersistentFieldStrategy.class);
+        configuration.addInstance(HibernatePersistenceConstants.ENTITY, EntityPersistentFieldStrategy.class);
+    }
+    
+    /**
+     * Contributes the following strategy: <dl> <dt>entity</dt> <dd>Stores
the id of the entity and reloads from the {@link
+     * Session}</dd> </dl>
+     */
+    public void contributeApplicationStatePersistenceStrategySource(
+            MappedConfiguration<String, ApplicationStatePersistenceStrategy> configuration)
+    {
+        configuration.addInstance(HibernatePersistenceConstants.ENTITY, EntityApplicationStatePersistenceStrategy.class);
+    }
+    
+    /**
+     * Contributes {@link ApplicationStateContribution}s for all registered Hibernate entity
classes.
+     * 
+     * @param configuration Configuration to contribute
+     * @param entitySessionStatePersistenceStrategyEnabled indicates if contribution should
take place
+     * @param sessionSource creates Hibernate session
+     */
+    public static void contributeApplicationStateManager(MappedConfiguration<Class, ApplicationStateContribution>
configuration,
+    		                                      @Symbol(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED)
+                                                  boolean entitySessionStatePersistenceStrategyEnabled,
+    		                                      HibernateSessionSource sessionSource)
+    {
+    	
+    	if(!entitySessionStatePersistenceStrategyEnabled)
+    		return;
+
+        org.hibernate.cfg.Configuration config = sessionSource.getConfiguration();
+        Iterator<PersistentClass> mappings = config.getClassMappings();
+        while (mappings.hasNext())
+        {
+
+            final PersistentClass persistentClass = mappings.next();
+            final Class entityClass = persistentClass.getMappedClass();
+            
+            configuration.add(entityClass, new ApplicationStateContribution(HibernatePersistenceConstants.ENTITY));
+        }
     }
 
     /**

Added: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java?rev=822020&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
(added)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
Mon Oct  5 21:20:30 2009
@@ -0,0 +1,31 @@
+// Copyright 2009 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.hibernate;
+
+import org.apache.tapestry5.PersistenceConstants;
+
+/**
+ * Constants for persistent field strategies.
+ *
+ * @see org.apache.tapestry5.annotations.Persist#value()
+ * 
+ * @since 5.2.0
+ */
+public class HibernatePersistenceConstants extends PersistenceConstants 
+{
+    /**
+     * If the field's value is a Hibernate entity its primary is stored in the {@link org.apache.tapestry5.services.Session}.
+     */
+    public static final String ENTITY = "entity";
+}

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernatePersistenceConstants.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java?rev=822020&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
(added)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
Mon Oct  5 21:20:30 2009
@@ -0,0 +1,91 @@
+// Copyright 2009 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.internal.hibernate;
+
+import java.io.Serializable;
+
+import org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy;
+import org.apache.tapestry5.services.ApplicationStateCreator;
+import org.apache.tapestry5.services.Request;
+import org.hibernate.HibernateException;
+
+/**
+ * Persists Hibernate entities as SSOs by storing their primary key in the {@link org.apache.tapestry5.services.Session}.
+ * 
+ * @see org.apache.tapestry5.internal.hibernate.PersistedEntity
+ */
+public class EntityApplicationStatePersistenceStrategy extends SessionApplicationStatePersistenceStrategy

+{
+
+	private final org.hibernate.Session hibernateSession;
+
+	public EntityApplicationStatePersistenceStrategy(Request request, org.hibernate.Session
hibernateSession) 
+	{
+		super(request);
+		this.hibernateSession = hibernateSession;
+	}
+
+	@SuppressWarnings("unchecked")
+	public <T> T get(Class<T> ssoClass, ApplicationStateCreator<T> creator)

+	{
+		final Object persistedValue =  getOrCreate(ssoClass, creator);
+		
+		if(persistedValue instanceof PersistedEntity)
+		{
+			final PersistedEntity persisted = (PersistedEntity) persistedValue;
+			
+			Object restored = persisted.restore(this.hibernateSession);
+			
+			//shall we maybe throw an exception instead?
+			if(restored == null)
+			{
+				set(ssoClass, null);
+				return (T) getOrCreate(ssoClass, creator);
+			}
+
+			return (T) restored;
+		}
+		
+		return (T) persistedValue;
+	}
+
+	public <T> void set(Class<T> ssoClass, T sso) 
+	{	
+		final String key = buildKey(ssoClass);
+		Object entity;
+		
+		if(sso != null)
+		{
+			try 
+			{
+				final String entityName = this.hibernateSession.getEntityName(sso);
+				final Serializable id = this.hibernateSession.getIdentifier(sso);
+	
+				entity = new PersistedEntity(entityName, id);
+			} 
+			catch (final HibernateException ex) 
+			{
+				// if entity not attached to a Hibernate Session yet, store it as usual sso
+				entity = sso;
+			}
+		}
+		else
+		{
+			entity = sso;
+		}
+		
+		getSession().setAttribute(key, entity);
+	}
+
+}
\ No newline at end of file

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/EntityApplicationStatePersistenceStrategy.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/site/apt/userguide.apt Mon Oct  5 21:20:30
2009
@@ -74,6 +74,49 @@
   
   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.
+  
+Using @SessionState with entities
+
+  The default strategy for persisting Session State Objects is "session". Storing a Hibernate
entity into a <HttpSession> is problematic 
+  because the stored entity is detached from the Hibernate session. Similar to @Persist("entity")
you may use the "entity" persistence 
+  strategy to persist Hibernate entities as SSOs:
+  
++----+
+public class Index
+{
+  @SessionState
+  @Property
+  private Person person;
+  
+  ...
+  
+}
++----+  
+
+	For this purpose you need to set the value of the symbol <HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED>

+	to <true>:
+	
++----+
+public class AppModule
+{
+    public static void contributeApplicationDefaults(MappedConfiguration<String, String>
configuration)
+    {
+        configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED,
"true");
+    }
+}
++----+  
+
+	Alternatively you can apply the "entity" persistence strategy to a single Hibernate entity:
+	
++----+
+public class AppModule
+{
+    public void contributeApplicationStateManager(MappedConfiguration<Class, ApplicationStateContribution>
configuration)
+    {
+    	configuration.add(Person.class, new ApplicationStateContribution(HibernatePersistenceConstants.ENTITY));
+    }
+}
++----+  
 
 Committing Changes
 

Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java?rev=822020&r1=822019&r2=822020&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java
(original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/hibernate/integration/TapestryHibernateIntegrationTests.java
Mon Oct  5 21:20:30 2009
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.hibernate.integration;
 
+import org.apache.tapestry5.internal.hibernate.PersistedEntity;
 import org.apache.tapestry5.test.AbstractIntegrationTestSuite;
 import org.example.app0.entities.User;
 import org.testng.annotations.Test;
@@ -67,6 +68,35 @@
         clickAndWait("link=set to transient");
         assertTextPresent("Error persisting");
     }
+    
+    public void sso_entities()
+    {
+    	open("/ssoentity");
+        assertEquals(0, getText("//span[@id='name']").length());
+        assertText("//span[@id='persistedEntityClassName']", User.class.getName());
+        
+        clickAndWait("link=persist entity");
+        assertText("//span[@id='name']", "name");
+        assertText("//span[@id='persistedEntityClassName']", PersistedEntity.class.getName());
+        
+        // can set back to null
+        clickAndWait("link=set to null");
+        assertEquals(getText("//span[@id='name']").length(), 0);
+        assertText("//span[@id='persistedEntityClassName']", User.class.getName());
+        
+        clickAndWait("link=persist entity");
+        assertText("//span[@id='name']", "name");
+        assertText("//span[@id='persistedEntityClassName']", PersistedEntity.class.getName());
+        clickAndWait("link=delete");
+        assertEquals(getText("//span[@id='name']").length(), 0);
+        assertText("//span[@id='persistedEntityClassName']", User.class.getName());
+        
+        clickAndWait("link=persist entity");
+        assertText("//span[@id='name']", "name");
+        assertText("//span[@id='persistedEntityClassName']", PersistedEntity.class.getName());
+        clickAndWait("link=set to transient");
+        assertText("//span[@id='persistedEntityClassName']", User.class.getName());
+    }
 
     /**
      * TAPESTRY-2244
@@ -105,7 +135,6 @@
 
     }
 
-
     public void grid()
     {
         start("Grid Demo", "setup");
@@ -119,8 +148,6 @@
         assertText("//td[@class='firstName t-sort-column-descending']", "Joe_9");
     }
     
-
-    @Test
     public void hibernate_statistics()
     {
     	open(BASE_URL + "hibernate/Statistics");

Added: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java?rev=822020&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
(added)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
Mon Oct  5 21:20:30 2009
@@ -0,0 +1,78 @@
+// Copyright 2009 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.example.app0.pages;
+
+import java.util.List;
+
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.internal.hibernate.PersistedEntity;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Session;
+import org.example.app0.entities.User;
+import org.example.app0.services.UserDAO;
+
+public class SSOEntity 
+{
+    @SessionState
+    @Property
+    private User user;
+
+    @Inject
+    private UserDAO userDAO;
+    
+    @Inject
+    private Request request;
+    
+    void onPersistEntity()
+    {
+        User user = new User();
+        user.setFirstName("name");
+
+        userDAO.add(user);
+
+        this.user = user;
+    }
+    
+    void onSetToNull()
+    {
+        user = null;
+    }
+    
+    void onSetToTransient()
+    {
+        user = new User();
+    }
+    
+    void onDelete()
+    {
+        List<User> users = userDAO.findAll();
+
+        userDAO.delete(users.toArray(new User[0]));
+        System.err.println("DELETED");
+    }
+    
+    public String getPersistedEntityClassName()
+    {
+    	Session session = request.getSession(true);
+    	
+    	Object value = session.getAttribute("sso:"+User.class.getName());
+    	
+    	System.err.println("getPersistedEntityClassName(): "+value);
+    	
+    	return value.getClass().getName();
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/example/app0/pages/SSOEntity.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=822020&r1=822019&r2=822020&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
Mon Oct  5 21:20:30 2009
@@ -16,6 +16,7 @@
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.hibernate.HibernateModule;
+import org.apache.tapestry5.hibernate.HibernateSymbols;
 import org.apache.tapestry5.hibernate.HibernateTransactionDecorator;
 import org.apache.tapestry5.ioc.MappedConfiguration;
 import org.apache.tapestry5.ioc.ServiceBinder;
@@ -33,6 +34,7 @@
     public static void contributeApplicationDefaults(MappedConfiguration<String, String>
configuration)
     {
         configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
+        configuration.add(HibernateSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED,
"true");
     }
 
     @Match("*DAO")

Added: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/webapp/SSOEntity.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/webapp/SSOEntity.tml?rev=822020&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/webapp/SSOEntity.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/webapp/SSOEntity.tml Mon Oct  5 21:20:30
2009
@@ -0,0 +1,10 @@
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
+<body>
+	<p>entity name: <span id="name">${user?.firstName}</span></p>
+	<p>persisted entity class name: <span id="persistedEntityClassName">${persistedEntityClassName}</span></p>
+	<p><t:eventlink event="persistEntity">persist entity</t:eventlink></p>
+	<p><t:eventlink event="setToNull">set to null</t:eventlink></p>
+	<p><t:eventlink event="setToTransient">set to transient</t:eventlink></p>
+	<p><t:eventlink event="delete">delete</t:eventlink></p>
+</body>
+</html>
\ No newline at end of file



Mime
View raw message