[jboss-svn-commits] JBL Code SVN: r19038 - in labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools: common and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Mar 17 14:39:29 EDT 2008


Author: tirelli
Date: 2008-03-17 14:39:28 -0400 (Mon, 17 Mar 2008)
New Revision: 19038

Added:
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ObjenesisFactory.java
Modified:
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
Log:
JBRULES-1507: adding option for statically caching objenesis

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-03-17 17:22:29 UTC (rev 19037)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-03-17 18:39:28 UTC (rev 19038)
@@ -65,6 +65,7 @@
  * drools.conflictResolver = <qualified class name>
  * drools.consequenceExceptionHandler = <qualified class name>
  * drools.ruleBaseUpdateHandler = <qualified class name>
+ * drools.useStaticObjenesis = <false|true>
  * 
  */
 public class RuleBaseConfiguration
@@ -98,6 +99,8 @@
 
     private boolean                     shadowProxy;
     private Map                         shadowProxyExcludes;
+    private boolean                     useStaticObjenesis;
+
     private static final String         STAR             = "*";
 
     private transient ClassLoader       classLoader;
@@ -229,6 +232,10 @@
 
         setShadowProxyExcludes( this.chainedProperties.getProperty( "drools.shadowProxyExcludes",
                                                                     "" ) );
+
+        setUseStaticObjenesis( Boolean.valueOf( this.chainedProperties.getProperty( "drools.useStaticObjenesis",
+                                                                                    "false" ) ).booleanValue() );
+
     }
 
     /**
@@ -473,6 +480,15 @@
         return this.shadowProxy;
     }
 
+    public boolean isUseStaticObjenesis() {
+        return useStaticObjenesis;
+    }
+
+    public void setUseStaticObjenesis(boolean useStaticObjenesis) {
+        checkCanChange(); // throws an exception if a change isn't possible;
+        this.useStaticObjenesis = useStaticObjenesis;
+    }
+
     public ClassLoader getClassLoader() {
         return classLoader;
     }

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-03-17 17:22:29 UTC (rev 19037)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-03-17 18:39:28 UTC (rev 19038)
@@ -44,9 +44,7 @@
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleBaseEventSupport;
-import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.objenesis.Objenesis;
-import org.drools.objenesis.ObjenesisStd;
 import org.drools.rule.CompositePackageClassLoader;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.MapBackedClassLoader;
@@ -57,6 +55,7 @@
 import org.drools.spi.ExecutorServiceFactory;
 import org.drools.spi.FactHandleFactory;
 import org.drools.util.ObjectHashSet;
+import org.drools.util.ObjenesisFactory;
 import org.drools.util.concurrent.locks.ReentrantLock;
 
 /**
@@ -91,7 +90,7 @@
     protected MapBackedClassLoader                  classLoader;
 
 	private transient Objenesis                     objenesis;
-
+	
 	/** The fact handle factory. */
     protected FactHandleFactory                     factHandleFactory;
 
@@ -185,11 +184,11 @@
         final ByteArrayOutputStream bos = new ByteArrayOutputStream();
         final ObjectOutput out = new ObjectOutputStream( bos );
         out.writeObject( this.id );
+        out.writeObject( this.config );
         out.writeObject( this.processes );
         out.writeObject( this.agendaGroupRuleTotals );
         out.writeObject( this.factHandleFactory );
         out.writeObject( this.globals );
-        out.writeObject( this.config );
         
         this.eventSupport.removeEventListener( RuleBaseEventListener.class );
         out.writeObject( this.eventSupport );
@@ -225,7 +224,6 @@
         }
 
         this.packageClassLoader.addClassLoader( this.classLoader );
-		this.objenesis = createObjenesis();
 
 		for ( final Iterator it = this.pkgs.values().iterator(); it.hasNext(); ) {
             this.packageClassLoader.addClassLoader( ((Package) it.next()).getPackageCompilationData().getClassLoader() );
@@ -240,13 +238,16 @@
         childStream.setRuleBase( this );
 
         this.id = (String) childStream.readObject();
+
+        this.config = (RuleBaseConfiguration) childStream.readObject();
+        this.config.setClassLoader( childStream.getClassLoader() );
+        this.objenesis = createObjenesis();
+
         this.processes = (Map) childStream.readObject();
         this.agendaGroupRuleTotals = (Map) childStream.readObject();
         this.factHandleFactory = (FactHandleFactory) childStream.readObject();
         this.globals = (Map) childStream.readObject();
 
-        this.config = (RuleBaseConfiguration) childStream.readObject();
-        this.config.setClassLoader( childStream.getClassLoader() );
         this.eventSupport = (RuleBaseEventSupport) childStream.readObject();
         this.eventSupport.setRuleBase( this );
 
@@ -262,7 +263,11 @@
 	 * @return a standart Objenesis instanse with caching turned on.
 	 */
 	protected Objenesis createObjenesis() {
-		return new ObjenesisStd(true);
+	    if( this.config.isUseStaticObjenesis() ) {
+	        return ObjenesisFactory.getStaticObjenesis();
+	    } else {
+	        return ObjenesisFactory.getDefaultObjenesis();
+	    }
 	}
 
 	/**

Added: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ObjenesisFactory.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ObjenesisFactory.java	                        (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ObjenesisFactory.java	2008-03-17 18:39:28 UTC (rev 19038)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 JBoss Inc
+ * 
+ * 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.
+ *
+ * Created on Mar 17, 2008
+ */
+package org.drools.util;
+
+import java.io.Serializable;
+
+import org.drools.objenesis.Objenesis;
+import org.drools.objenesis.ObjenesisStd;
+
+/**
+ * A factory interface for Objenesis instances
+ * 
+ * @author etirelli
+ */
+public class ObjenesisFactory implements Serializable {
+    
+    private static final long serialVersionUID = 969174504278340793L;
+    private static final Objenesis OBJENESIS_INSTANCE = null;
+
+    private ObjenesisFactory() {}
+    
+    /**
+     * Returns a statically cached objenesis instance 
+     */
+    public static Objenesis getStaticObjenesis() {
+        if( OBJENESIS_INSTANCE == null ) {
+            new ObjenesisStd(true);
+        }
+        return OBJENESIS_INSTANCE;
+    }
+
+    /**
+     * Returns a newly instantiated objenesis instance
+     */
+    public static Objenesis getDefaultObjenesis() {
+        return new ObjenesisStd(true);
+    }
+
+}




More information about the jboss-svn-commits mailing list