You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2008/08/18 21:09:08 UTC

svn commit: r686850 - /tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java

Author: hlship
Date: Mon Aug 18 12:09:05 2008
New Revision: 686850

URL: http://svn.apache.org/viewvc?rev=686850&view=rev
Log:
TAPESTRY-2571: Add configuration to turn off the automatic creation of ValueEncoders for Hibernate entities

Modified:
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/HibernateModule.java

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=686850&r1=686849&r2=686850&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 Aug 18 12:09:05 2008
@@ -20,11 +20,9 @@
 import org.apache.tapestry5.ioc.*;
 import static org.apache.tapestry5.ioc.IOCConstants.PERTHREAD_SCOPE;
 import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.ioc.annotations.InjectService;
 import org.apache.tapestry5.ioc.annotations.Scope;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.*;
-import org.apache.tapestry5.services.AliasContribution;
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
 import org.apache.tapestry5.services.PersistentFieldStrategy;
 import org.apache.tapestry5.services.ValueEncoderFactory;
@@ -36,15 +34,27 @@
 import java.util.Iterator;
 import java.util.List;
 
-@SuppressWarnings({ "JavaDoc" })
+@SuppressWarnings({"JavaDoc"})
 public class HibernateModule
 {
+    /**
+     * If true (the default), then {@link org.apache.tapestry5.ValueEncoder}s are automatically created for each entity.
+     * Override to "false" to handle entity value encoding explicitly.
+     */
+    public static final String PROVIDE_ENTITY_VALUE_ENCODERS_SYMBOL = "tapestry.hibernate.provide-entity-value-encoders";
+
     public static void bind(ServiceBinder binder)
     {
         binder.bind(HibernateTransactionDecorator.class, HibernateTransactionDecoratorImpl.class);
     }
 
-    public static HibernateEntityPackageManager build(final Collection<String> packageNames)
+    public static void contributeFactoryDefaults(MappedConfiguration<String, String> configuration)
+    {
+        configuration.add(PROVIDE_ENTITY_VALUE_ENCODERS_SYMBOL, "true");
+    }
+
+    public static HibernateEntityPackageManager buildHibernateEntityPackageManager(
+            final Collection<String> packageNames)
     {
         return new HibernateEntityPackageManager()
         {
@@ -73,7 +83,8 @@
      * created initially, and is committed at the end of the request.
      */
     @Scope(PERTHREAD_SCOPE)
-    public static HibernateSessionManager build(HibernateSessionSource sessionSource, PerthreadManager perthreadManager)
+    public static HibernateSessionManager buildHibernateSessionManager(HibernateSessionSource sessionSource,
+                                                                       PerthreadManager perthreadManager)
     {
         HibernateSessionManagerImpl service = new HibernateSessionManagerImpl(sessionSource);
 
@@ -82,8 +93,8 @@
         return service;
     }
 
-    public static Session build(HibernateSessionManager sessionManager,
-                                PropertyShadowBuilder propertyShadowBuilder)
+    public static Session buildSession(HibernateSessionManager sessionManager,
+                                       PropertyShadowBuilder propertyShadowBuilder)
     {
         // Here's the thing: the tapestry.hibernate.Session class doesn't have to be per-thread,
         // since
@@ -100,19 +111,8 @@
         return propertyShadowBuilder.build(sessionManager, "session", Session.class);
     }
 
-    /**
-     * Contributes the {@link #build(HibernateSessionManager, PropertyShadowBuilder) Session} service.
-     */
-    public static void contributeAlias(Configuration<AliasContribution> configuration,
-
-                                       @InjectService("Session")
-                                       Session session)
-    {
-        configuration.add(AliasContribution.create(Session.class, session));
-    }
-
-    public static HibernateSessionSource build(Logger logger, List<HibernateConfigurer> config,
-                                               RegistryShutdownHub hub)
+    public static HibernateSessionSource buildHibernateSessionSource(Logger logger, List<HibernateConfigurer> config,
+                                                                     RegistryShutdownHub hub)
     {
         HibernateSessionSourceImpl hss = new HibernateSessionSourceImpl(logger, config);
 
@@ -140,12 +140,16 @@
      */
     @SuppressWarnings("unchecked")
     public static void contributeValueEncoderSource(MappedConfiguration<Class, ValueEncoderFactory> configuration,
+                                                    @Symbol(PROVIDE_ENTITY_VALUE_ENCODERS_SYMBOL)
+                                                    boolean provideEncoders,
                                                     final HibernateSessionSource sessionSource,
                                                     final Session session,
                                                     final TypeCoercer typeCoercer,
                                                     final PropertyAccess propertyAccess,
                                                     final LoggerSource loggerSource)
     {
+        if (!provideEncoders) return;
+
         org.hibernate.cfg.Configuration config = sessionSource.getConfiguration();
         Iterator<PersistentClass> mappings = config.getClassMappings();
         while (mappings.hasNext())