[jboss-svn-commits] JBL Code SVN: r17377 - in labs/jbossrules/branches/serialization: drools-compiler/src/test/java/org/drools/compiler and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Dec 23 01:22:56 EST 2007
Author: haruki_zaemon
Date: 2007-12-23 01:22:55 -0500 (Sun, 23 Dec 2007)
New Revision: 17377
Added:
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectStreamConstants.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java
Modified:
labs/jbossrules/branches/serialization/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/agent/FileScanner.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/Extractor.java
labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java
labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java
labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
[NEW] Custom serialization mechanism. WARNING: Failing tests!!!
Modified: labs/jbossrules/branches/serialization/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2007-12-23 06:22:55 UTC (rev 17377)
@@ -4,7 +4,7 @@
java.io.InputStream is = @{ruleClassName}.class.getClassLoader().getResourceAsStream( "@{package}.@{ruleClassName}".replace( '.', '/' ) + ".class" );
-
+
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
byte[] data = new byte[1024];
int byteCount;
@@ -12,21 +12,21 @@
while ( (byteCount = is.read( data,
0,
1024 )) > -1 )
- {
+ {
bos.write(data, 0, byteCount);
}
} catch ( java.io.IOException e ) {
throw new org.drools.RuntimeDroolsException("Unable getResourceAsStream for Class '@{ruleClassName}' ");
- }
-
+ }
+
org.drools.asm.ClassReader classReader = new org.drools.asm.ClassReader( bos.toByteArray() );
classReader.accept( visit, true );
org.drools.asm.util.TraceMethodVisitor trace = visit.getTrace();
- return trace.getText();
+ return trace.getText();
}
>>=::
-
+
equals() ::=<<
public boolean equals(Object object) {
if (object == null ) {
@@ -34,13 +34,13 @@
} else if ( object == this ){
return true;
}
-
+
if ( ! (object instanceof org.drools.spi.CompiledInvoker) ) {
return false;
}
-
+
org.drools.spi.CompiledInvoker other = ( org.drools.spi.CompiledInvoker ) object;
-
+
return org.drools.util.asm.MethodComparator.compareBytecode( getMethodBytecode(), other.getMethodBytecode() );
}
>>=::
@@ -57,15 +57,15 @@
public class @{invokerClassName} implements org.drools.spi.ReturnValueExpression, org.drools.spi.CompiledInvoker
{
private static final long serialVersionUID = 400L;
-
+
public org.drools.spi.FieldValue evaluate(java.lang.Object object,
org.drools.spi.Tuple tuple,
- org.drools.rule.Declaration[] previousDeclarations,
- org.drools.rule.Declaration[] localDeclarations,
- org.drools.WorkingMemory workingMemory) throws Exception {
+ org.drools.rule.Declaration[] previousDeclarations,
+ org.drools.rule.Declaration[] localDeclarations,
+ org.drools.WorkingMemory workingMemory) throws Exception {
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) previousDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) tuple.get( previousDeclarations[@{i0}] ) ).getObject() );
- @end{}
+ @end{}
@if{readLocalsFromTuple}
@foreach{localDeclarationTypes, localDeclarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) localDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) tuple.get( localDeclarations[@{i0}] ) ).getObject() );
@end{}
@@ -75,22 +75,22 @@
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
@end{}
-
- return @{ruleClassName}.@{methodName}(
- @foreach{declarations as declr} @{declr.identifier}
- @end{","} @if{localDeclarations != empty && declarations != empty}, at end{}
- @foreach{localDeclarations as declr} @{declr.identifier}
+
+ return @{ruleClassName}.@{methodName}(
+ @foreach{declarations as declr} @{declr.identifier}
+ @end{","} @if{localDeclarations != empty && declarations != empty}, at end{}
+ @foreach{localDeclarations as declr} @{declr.identifier}
@end{","}@if{globals != empty && (localDeclarations != empty || declarations != empty)}, at end{}
@foreach{globals as identifier}@{identifier}
@end{","} );
- }
-
+ }
+
@includeByRef{hashCode(hashCode = hashCode)}
-
+
@includeByRef{getMethodBytecode(package = package, ruleClassName = ruleClassName, methodName = methodName)}
-
- @includeByRef{equals()}
-}
+
+ @includeByRef{equals()}
+}
>>=::
predicateInvoker() ::=<<
@@ -99,35 +99,35 @@
public class @{invokerClassName} implements org.drools.spi.PredicateExpression, org.drools.spi.CompiledInvoker
{
private static final long serialVersionUID = 400L;
-
+
public boolean evaluate(java.lang.Object object,
org.drools.spi.Tuple tuple,
- org.drools.rule.Declaration[] previousDeclarations,
- org.drools.rule.Declaration[] localDeclarations,
- org.drools.WorkingMemory workingMemory) throws Exception {
+ org.drools.rule.Declaration[] previousDeclarations,
+ org.drools.rule.Declaration[] localDeclarations,
+ org.drools.WorkingMemory workingMemory) throws Exception {
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) previousDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) tuple.get( previousDeclarations[@{i0}] ) ).getObject() );
- @end{}
+ @end{}
@foreach{localDeclarationTypes, localDeclarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) localDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, object );
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
@end{}
-
- return @{ruleClassName}.@{methodName}(
- @foreach{declarations as declr} @{declr.identifier}
- @end{","} @if{localDeclarations != empty && declarations != empty}, at end{}
- @foreach{localDeclarations as declr} @{declr.identifier}
+
+ return @{ruleClassName}.@{methodName}(
+ @foreach{declarations as declr} @{declr.identifier}
+ @end{","} @if{localDeclarations != empty && declarations != empty}, at end{}
+ @foreach{localDeclarations as declr} @{declr.identifier}
@end{","}@if{globals != empty && (localDeclarations != empty || declarations != empty)}, at end{}
@foreach{globals as identifier}@{identifier}
@end{","} );
- }
-
+ }
+
@includeByRef{hashCode(hashCode = hashCode)}
-
+
@includeByRef{getMethodBytecode(package = package, ruleClassName = ruleClassName, methodName = methodName)}
-
- @includeByRef{equals()}
-}
+
+ @includeByRef{equals()}
+}
>>=::
evalInvoker() ::=<<
@@ -136,29 +136,29 @@
public class @{invokerClassName} implements org.drools.spi.EvalExpression, org.drools.spi.CompiledInvoker
{
private static final long serialVersionUID = 400L;
-
+
public boolean evaluate(org.drools.spi.Tuple tuple,
- org.drools.rule.Declaration[] declarations,
- org.drools.WorkingMemory workingMemory) throws Exception {
+ org.drools.rule.Declaration[] declarations,
+ org.drools.WorkingMemory workingMemory) throws Exception {
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) tuple.get( declarations[@{i0}] ) ).getObject() );
- @end{}
+ @end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
@end{}
-
- return @{ruleClassName}.@{methodName}(
- @foreach{declarations as declr} @{declr.identifier}
+
+ return @{ruleClassName}.@{methodName}(
+ @foreach{declarations as declr} @{declr.identifier}
@end{","} @if{globals != empty && declarations != empty}, at end{}
@foreach{globals as identifier}@{identifier}
@end{","} );
- }
-
+ }
+
@includeByRef{hashCode(hashCode = hashCode)}
-
+
@includeByRef{getMethodBytecode(package = package, ruleClassName = ruleClassName, methodName = methodName)}
-
- @includeByRef{equals()}
-}
+
+ @includeByRef{equals()}
+}
>>=::
accumulateInvoker() ::=<<
@@ -171,11 +171,11 @@
public class @{invokerClassName} implements org.drools.spi.Accumulator, org.drools.spi.CompiledInvoker
{
private static final long serialVersionUID = 400L;
-
+
public Object createContext() {
return new @{ruleClassName}.@{className}();
}
-
+
public void init(java.lang.Object workingMemoryContext,
java.lang.Object context,
org.drools.spi.Tuple leftTuple,
@@ -184,12 +184,12 @@
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( declarations[@{i0}] ) ).getObject() );
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
-
+ @end{}
+
((@{ruleClassName}.@{className})context).init(
@foreach{declarations as declr} @{declr.identifier}@end{","}@if{globals != empty}, at end{}
@foreach{globals as identifier} @{identifier}@end{","} );
-
+
}
public void accumulate(java.lang.Object workingMemoryContext,
@@ -202,7 +202,7 @@
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( declarations[@{i0}] ) ).getObject() );
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
+ @end{}
@if{isMultiPattern}
@foreach{innerDeclarations as declr} @{declr.extractor.extractToClassName} @{declr.identifier} = (@{declr.extractor.extractToClassName}) innerDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( innerDeclarations[@{i0}] ) ).getObject() );
@end{}
@@ -213,7 +213,7 @@
((@{ruleClassName}.@{className})context).accumulate(
workingMemory,
innerDeclarations,
- handle.getObject()@if{declarations != empty}, at end{}
+ handle.getObject()@if{declarations != empty}, at end{}
@foreach{declarations as declr} @{declr.identifier}@end{","}@if{globals != empty}, at end{}
@foreach{globals as identifier} @{identifier}@end{","}@if{innerDeclarations != empty}, at end{}
@foreach{innerDeclarations as declr} @{declr.identifier}@end{","});
@@ -229,7 +229,7 @@
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( declarations[@{i0}] ) ).getObject() );
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
+ @end{}
@if{isMultiPattern}
@foreach{innerDeclarations as declr} @{declr.extractor.extractToClassName} @{declr.identifier} = (@{declr.extractor.extractToClassName}) innerDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( innerDeclarations[@{i0}] ) ).getObject() );
@end{}
@@ -237,11 +237,11 @@
@foreach{innerDeclarations as declr} @{declr.extractor.extractToClassName} @{declr.identifier} = (@{declr.extractor.extractToClassName}) innerDeclarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, handle.getObject() );
@end{}
@end{}
-
+
((@{ruleClassName}.@{className})context).reverse(
workingMemory,
innerDeclarations,
- handle.getObject()@if{declarations != empty}, at end{}
+ handle.getObject()@if{declarations != empty}, at end{}
@foreach{declarations as declr} @{declr.identifier}@end{","}@if{globals != empty}, at end{}
@foreach{globals as identifier} @{identifier}@end{","}@if{innerDeclarations != empty}, at end{}
@foreach{innerDeclarations as declr} @{declr.identifier}@end{","});
@@ -255,13 +255,13 @@
@foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) leftTuple.get( declarations[@{i0}] ) ).getObject() );
@end{}
@foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
-
+ @end{}
+
return ((@{ruleClassName}.@{className})context).getResult(
@foreach{declarations as declr} @{declr.identifier}@end{","}@if{globals != empty}, at end{}
@foreach{globals as identifier} @{identifier}@end{","} );
}
-
+
public boolean supportsReverse() {
return @{supportsReverse};
}
@@ -269,14 +269,14 @@
public Object createWorkingMemoryContext() {
return null;
}
-
+
@includeByRef{hashCode(hashCode = hashCode)}
-
- @includeByRef{equals()}
+ @includeByRef{equals()}
+
public java.util.List getMethodBytecode() {
java.io.InputStream is = @{ruleClassName}.class.getClassLoader().getResourceAsStream( "@{package}.@{ruleClassName}".replace( '.', '/' ) + "$@{className}" + ".class" );
-
+
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
byte[] data = new byte[1024];
int byteCount;
@@ -284,48 +284,52 @@
while ( (byteCount = is.read( data,
0,
1024 )) > -1 )
- {
+ {
bos.write(data, 0, byteCount);
}
} catch ( java.io.IOException e ) {
throw new org.drools.RuntimeDroolsException("Unable getResourceAsStream for Class '@{ruleClassName}$@{className}' ");
- }
- return Collections.singletonList( bos );
+ }
+ return Collections.singletonList( bos );
}
-}
+}
>>=::
consequenceInvoker() ::=<<
package @{package};
-public class @{invokerClassName} implements org.drools.spi.Consequence
+public class @{invokerClassName} implements org.drools.spi.Consequence, java.io.Externalizable
{
- private static final long serialVersionUID = 400L;
+ public void evaluate(org.drools.spi.KnowledgeHelper knowledgeHelper,
+ org.drools.WorkingMemory workingMemory) throws Exception {
- public void evaluate(org.drools.spi.KnowledgeHelper knowledgeHelper,
- org.drools.WorkingMemory workingMemory) throws Exception {
-
org.drools.spi.Tuple tuple = knowledgeHelper.getTuple();
org.drools.rule.Rule rule = knowledgeHelper.getRule();
- org.drools.rule.Declaration[] declarations = rule.getDeclarations();
+ org.drools.rule.Declaration[] declarations = rule.getDeclarations();
@foreach{declarationTypes, declarations, indexes, notPatterns as type, declr, index, notPattern}
- org.drools.common.InternalFactHandle @{declr.identifier}__Handle__ = ( org.drools.common.InternalFactHandle ) tuple.get( knowledgeHelper.getDeclaration( declarations[@{index}].getIdentifier() ) );
+ org.drools.common.InternalFactHandle @{declr.identifier}__Handle__ = ( org.drools.common.InternalFactHandle ) tuple.get( knowledgeHelper.getDeclaration( declarations[@{index}].getIdentifier() ) );
@{type} @{declr.identifier} = ( @{type} ) declarations[@{index}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, @{declr.identifier}__Handle__.getObject() );
@if{notPattern}@{declr.identifier}__Handle__ = (org.drools.common.InternalFactHandle) knowledgeHelper.getWorkingMemory().getFactHandle( @{declr.identifier} );@end{}
@end{}
-
- @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
-
- @{ruleClassName}.@{methodName} (
+
+ @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
+ @end{}
+
+ @{ruleClassName}.@{methodName} (
knowledgeHelper at if{declarations != empty}, at end{}
@foreach{declarations as declr} @{declr.identifier}, @{declr.identifier}__Handle__
@end{","}@if{globals != empty}, at end{}
@foreach{globals as identifier} @{identifier}
@end{","} );
}
-}
+
+ public void writeExternal(java.io.ObjectOutput stream) throws java.io.IOException {
+ }
+
+ public void readExternal(java.io.ObjectInput stream) throws java.io.IOException, java.lang.ClassNotFoundException {
+ }
+}
>>=::
actionInvoker() ::=<<
@@ -335,16 +339,16 @@
{
private static final long serialVersionUID = 400L;
- public void execute(org.drools.WorkingMemory workingMemory) throws Exception {
-
- @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
-
- @{processClassName}.@{methodName} (
+ public void execute(org.drools.WorkingMemory workingMemory) throws Exception {
+
+ @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
+ @end{}
+
+ @{processClassName}.@{methodName} (
@foreach{globals as identifier} @{identifier}
@end{","} );
}
-}
+}
>>=::
returnValueEvaluatorInvoker() ::=<<
@@ -354,14 +358,14 @@
{
private static final long serialVersionUID = 400L;
- public Object evaluate(org.drools.WorkingMemory workingMemory) throws Exception {
-
- @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
- @end{}
-
- return @{processClassName}.@{methodName} (
+ public Object evaluate(org.drools.WorkingMemory workingMemory) throws Exception {
+
+ @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
+ @end{}
+
+ return @{processClassName}.@{methodName} (
@foreach{globals as identifier} @{identifier}
@end{","} );
}
-}
+}
>>=::
\ No newline at end of file
Modified: labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,13 +2,13 @@
/*
* Copyright 2005 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.
@@ -192,7 +192,7 @@
pkg.getPackageCompilationData().list().length );
builder.addPackage( packageDescr );
-
+
pkg = builder.getPackage();
rule = pkg.getRule( "rule-1" );
@@ -1003,7 +1003,7 @@
PackageBuilder builder = new PackageBuilder();
PackageDescr pkgDescr = new PackageDescr( "org.test" );
builder.addPackage( pkgDescr );
-
+
final Field dialectField = builder.getClass().getDeclaredField( "dialect" );
dialectField.setAccessible( true );
JavaDialect dialect = (JavaDialect) dialectField.get( builder );
@@ -1020,7 +1020,7 @@
javaConf.setCompiler( JavaDialectConfiguration.JANINO );
builder = new PackageBuilder( conf );
builder.addPackage( pkgDescr );
-
+
dialect = (JavaDialect) dialectField.get( builder );
compiler = (JavaCompiler) compilerField.get( dialect );
assertSame( JaninoJavaCompiler.class,
@@ -1032,7 +1032,7 @@
javaConf.setCompiler( JavaDialectConfiguration.ECLIPSE );
builder = new PackageBuilder( conf );
builder.addPackage( pkgDescr );
-
+
dialect = (JavaDialect) dialectField.get( builder );
compiler = (JavaCompiler) compilerField.get( dialect );
assertSame( EclipseJavaCompiler.class,
@@ -1213,7 +1213,7 @@
ObjectOutputStream out = new ObjectOutputStream( data );
out.writeObject( pkg );
- ObjectInputStream objIn = new DroolsObjectInputStream( new ByteArrayInputStream( data.toByteArray() ) );
+ DroolsObjectInputStream objIn = new DroolsObjectInputStream( new ByteArrayInputStream( data.toByteArray() ) );
Package pkg2 = (Package) objIn.readObject();
assertNotNull( pkg2 );
@@ -1250,22 +1250,22 @@
assertFalse( pkg.getRuleFlows().containsKey( "1" ) );
}
-
+
public void testJaninoWithStaticImports() throws Exception {
PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) cfg.getDialectConfiguration( "java" );
javaConf.setCompiler( JavaDialectConfiguration.JANINO );
-
-
+
+
PackageBuilder bldr = new PackageBuilder(cfg);
bldr.addPackageFromDrl( new StringReader("package testBuilderPackageConfig \n import java.util.List") );
bldr.addPackageFromDrl( new StringReader("function void doSomething() {\n System.err.println(List.class.toString()); }"));
-
+
assertFalse(bldr.hasErrors());
-
+
}
-
+
class MockRuleFlow
implements
Process {
@@ -1291,7 +1291,7 @@
public String getVersion() {
return null;
}
-
+
public String getPackageName() {
return null;
}
@@ -1307,7 +1307,7 @@
public void setVersion(String version) {
}
-
+
public void setPackageName(String packageName) {
}
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/agent/FileScanner.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/agent/FileScanner.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/agent/FileScanner.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -4,7 +4,6 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -106,7 +105,7 @@
} else {
Package p1_ = null;
- ObjectInputStream in;
+ DroolsObjectInputStream in;
try {
in = new DroolsObjectInputStream( new FileInputStream( pkgFile ) );
p1_ = (Package) in.readObject();
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,13 +2,13 @@
/*
* Copyright 2005 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.
@@ -17,8 +17,9 @@
*/
import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Externalizable;
import java.lang.reflect.Method;
import org.drools.RuntimeDroolsException;
@@ -29,24 +30,25 @@
/**
* This provides access to fields, and what their numerical index/object type is.
- * This is basically a wrapper class around dynamically generated subclasses of
+ * This is basically a wrapper class around dynamically generated subclasses of
* BaseClassFieldExtractor,
- * which allows serialization by regenerating the accessor classes
+ * which allows serialization by regenerating the accessor classes
* when needed.
- *
+ *
* @author Michael Neale
*/
public class ClassFieldExtractor
implements
- FieldExtractor {
- /**
- *
- */
- private static final long serialVersionUID = 400L;
+ FieldExtractor,
+ Externalizable {
+
private String fieldName;
private Class clazz;
private transient FieldExtractor extractor;
+ private ClassFieldExtractor() {
+ }
+
public ClassFieldExtractor(final Class clazz,
final String fieldName) {
this( clazz,
@@ -73,36 +75,6 @@
factory );
}
- private void writeObject(ObjectOutputStream s) throws IOException {
- // Call even if there is no default serializable fields.
- s.defaultWriteObject();
- }
-
- private void readObject(final ObjectInputStream is) throws ClassNotFoundException,
- IOException,
- Exception {
- //always perform the default de-serialization first
- is.defaultReadObject();
- if ( is instanceof DroolsObjectInputStream ) {
- DroolsObjectInputStream dois = (DroolsObjectInputStream) is;
- this.extractor = dois.getExtractorFactory().getExtractor( this.clazz,
- this.fieldName,
- dois.getClassLoader() );
- } else {
- this.extractor = ClassFieldExtractorCache.getInstance().getExtractor( this.clazz,
- this.fieldName,
- this.clazz.getClassLoader() );
-
- }
- }
-
-// private Object readResolve() {
-// // always return the value from the cache
-// return ClassFieldExtractorCache.getInstance().getExtractor( this.clazz,
-// this.fieldName,
-// this.clazz.getClassLoader() );
-// }
-
private void init(final ClassLoader classLoader,
final ClassFieldExtractorFactory factory) {
try {
@@ -229,4 +201,34 @@
public boolean isGlobal() {
return false;
}
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(fieldName);
+ out.writeObject(clazz);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ fieldName = (String) in.readObject();
+ clazz = (Class) in.readObject();
+
+ if (in instanceof DroolsObjectInputStream) {
+ DroolsObjectInputStream dois = (DroolsObjectInputStream) in;
+ this.extractor = dois.getExtractorFactory().getExtractor(this.clazz,
+ this.fieldName,
+ dois.getClassLoader());
+ } else {
+ this.extractor = ClassFieldExtractorCache.getInstance().getExtractor(this.clazz,
+ this.fieldName,
+ this.clazz.getClassLoader());
+
+ }
+ }
+
+// public Object readResolve() {
+// // always return the value from the cache
+// return ClassFieldExtractorCache.getInstance().getExtractor( this.clazz,
+// this.fieldName,
+// this.clazz.getClassLoader() );
+// }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -221,30 +221,22 @@
this.packageClassLoader.addClassLoader( ((Package) it.next()).getPackageCompilationData().getClassLoader() );
}
- // Return the rules stored as a byte[]
- final byte[] bytes = (byte[]) stream.readObject();
+ this.id = (String) stream.readObject();
+ this.processes = (Map) stream.readObject();
+ this.agendaGroupRuleTotals = (Map) stream.readObject();
+ this.factHandleFactory = (FactHandleFactory) stream.readObject();
+ this.globals = (Map) stream.readObject();
- // Use a custom ObjectInputStream that can resolve against a given classLoader
- final DroolsObjectInputStream childStream = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ),
- this.packageClassLoader );
- childStream.setRuleBase( this );
-
- this.id = (String) childStream.readObject();
- 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.config = (RuleBaseConfiguration) stream.readObject();
+ this.config.setClassLoader(this.packageClassLoader );
+ this.eventSupport = (RuleBaseEventSupport) stream.readObject();
this.eventSupport.setRuleBase( this );
this.statefulSessions = new ObjectHashSet();
}
/**
- * Creates Objenesis instance for the RuleBase.
+ * Creates Objenesis instance for the RuleBase.
* @return a standart Objenesis instanse with caching turned on.
*/
protected Objenesis createObjenesis() {
@@ -778,7 +770,7 @@
// since the event support is thread-safe, no need for locks... right?
return this.eventSupport.getEventListeners();
}
-
+
public boolean isEvent( Class clazz ) {
for( Package pkg : this.pkgs.values() ) {
if( pkg.isEvent( clazz ) ) {
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -1,120 +1,321 @@
-/**
- *
- */
-package org.drools.common;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import java.util.HashMap;
-
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.rule.Package;
-
-public class DroolsObjectInputStream extends ObjectInputStream {
- private final ClassLoader classLoader;
- private InternalRuleBase ruleBase;
- private InternalWorkingMemory workingMemory;
- private Package pkg;
- private ClassFieldExtractorCache extractorFactory;
-
- /** table mapping primitive type names to corresponding class objects */
- private static final HashMap primClasses = new HashMap( 8,
- 1.0F );
- static {
- primClasses.put( "boolean",
- boolean.class );
- primClasses.put( "byte",
- byte.class );
- primClasses.put( "char",
- char.class );
- primClasses.put( "short",
- short.class );
- primClasses.put( "int",
- int.class );
- primClasses.put( "long",
- long.class );
- primClasses.put( "float",
- float.class );
- primClasses.put( "double",
- double.class );
- primClasses.put( "void",
- void.class );
- }
-
- public DroolsObjectInputStream(final InputStream in) throws IOException {
- this( in,
- null );
- }
-
- public DroolsObjectInputStream(final InputStream in,
- ClassLoader classLoader) throws IOException {
- super( in );
- if ( classLoader == null ) {
- classLoader = Thread.currentThread().getContextClassLoader();
- if ( classLoader == null ) {
- classLoader = this.getClass().getClassLoader();
- }
- }
-
- this.classLoader = classLoader;
- this.extractorFactory = ClassFieldExtractorCache.getInstance();
- enableResolveObject( true );
- }
-
- public ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
- protected Class resolveClass(final ObjectStreamClass desc) throws IOException,
- ClassNotFoundException {
- if ( this.classLoader == null ) {
- return super.resolveClass( desc );
- } else {
- final String name = desc.getName();
- Class clazz = (Class) primClasses.get( name );
- if ( clazz == null ) {
- try {
- clazz = this.classLoader.loadClass( name );
- } catch ( final ClassNotFoundException cnf ) {
- clazz = super.resolveClass( desc );
- }
- }
- return clazz;
- }
- }
-
- public InternalRuleBase getRuleBase() {
- return ruleBase;
- }
-
- public void setRuleBase(InternalRuleBase ruleBase) {
- this.ruleBase = ruleBase;
- }
-
- public void setWorkingMemory(InternalWorkingMemory workingMemory) {
- this.workingMemory = workingMemory;
- }
-
- public InternalWorkingMemory getWorkingMemory() {
- return workingMemory;
- }
-
- public Package getPackage() {
- return pkg;
- }
-
- public void setPackage(Package pkg) {
- this.pkg = pkg;
- }
-
- public ClassFieldExtractorCache getExtractorFactory() {
- return extractorFactory;
- }
-
- public void setExtractorFactory(ClassFieldExtractorCache extractorFactory) {
- this.extractorFactory = extractorFactory;
- }
-
-}
\ No newline at end of file
+package org.drools.common;
+
+import org.drools.base.ClassFieldExtractorCache;
+import static org.drools.common.DroolsObjectStreamConstants.*;
+
+import java.io.DataInputStream;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.StreamCorruptedException;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+// TODO: Change access protection for calling constructor
+public class DroolsObjectInputStream extends DataInputStream implements ObjectInput {
+ private final Map objectsByHandle = new HashMap();
+ private ClassLoader classLoader;
+ private InternalRuleBase ruleBase;
+ private ClassFieldExtractorCache extractorFactory;
+
+ public DroolsObjectInputStream(InputStream stream) {
+ this(stream, Thread.currentThread().getContextClassLoader());
+ }
+
+ public DroolsObjectInputStream(InputStream stream, ClassLoader classLoader) {
+ super(stream);
+ this.classLoader = classLoader;
+ }
+
+ public ClassLoader getClassLoader() {
+ return classLoader;
+ }
+
+ public void setClassLoader(ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ }
+
+ public void setRuleBase(InternalRuleBase ruleBase) {
+ this.ruleBase = ruleBase;
+ }
+
+ public InternalRuleBase getRuleBase() {
+ return ruleBase;
+ }
+
+ public ClassFieldExtractorCache getExtractorFactory() {
+ return extractorFactory;
+ }
+
+ public void setExtractorFactory(ClassFieldExtractorCache extractorFactory) {
+ this.extractorFactory = extractorFactory;
+ }
+
+ public Object readObject() throws ClassNotFoundException, IOException {
+ byte type = unmarshalRecordType();
+
+ Object object;
+
+ switch (type) {
+ case NULL:
+ object = unmarshalNull();
+ break;
+ case EMPTY_SET:
+ object = unmarshalEmptySet();
+ break;
+ case EMPTY_LIST:
+ object = unmarshalEmptyList();
+ break;
+ case EMPTY_MAP:
+ object = unmarshalEmptyMap();
+ break;
+ default:
+ object = unmarshalObject(type);
+ }
+
+ return object;
+ }
+
+ private Object unmarshalObject(byte type) throws IOException, ClassNotFoundException {
+ int handle = unmarshalHandle();
+
+ Object object;
+
+ switch (type) {
+ case EXTERNALIZABLE:
+ object = unmarshalExternalizable();
+ break;
+ case REPLACEABLE:
+ object = unmarshalResolvable();
+ break;
+ case STRING:
+ object = unmarshalString();
+ break;
+ case MAP:
+ object = unmarshalMap();
+ break;
+ case COLLECTION:
+ object = unmarshalCollection();
+ break;
+ case ARRAY:
+ object = unmarshalArray();
+ break;
+ case CLASS:
+ object = unmarshalClass();
+ break;
+ case REFERENCE:
+ return unmarshalReference(handle);
+ default:
+ throw new StreamCorruptedException("Unsupported object type: " + type);
+ }
+
+ registerObject(handle, object);
+ return object;
+ }
+
+ private Object unmarshalArray() throws IOException, ClassNotFoundException {
+ Class clazz = (Class) readObject();
+ int length = readInt();
+ Class componentType = clazz.getComponentType();
+ Object array = Array.newInstance(componentType, length);
+ if (componentType.isPrimitive()) {
+ unmarshalPrimitiveArray(array, length, componentType);
+ } else {
+ unmarshalObjectArray((Object[]) array, length);
+ }
+ return array;
+ }
+
+ private void unmarshalPrimitiveArray(Object array, int length, Class clazz) throws IOException {
+ if (clazz == Integer.TYPE) {
+ unmarshalIntArray((int[]) array, length);
+ } else if (clazz == Byte.TYPE) {
+ unmarshalByteArray((byte[]) array, length);
+ } else if (clazz == Long.TYPE) {
+ unmarshalLongArray((long[]) array, length);
+ } else if (clazz == Float.TYPE) {
+ unmarshalFloatArray((float[]) array, length);
+ } else if (clazz == Double.TYPE) {
+ unmarshalDoubleArray((double[]) array, length);
+ } else if (clazz == Short.TYPE) {
+ unmarshalShortArray((short[]) array, length);
+ } else if (clazz == Character.TYPE) {
+ unmarshalCharArray((char[]) array, length);
+ } else if (clazz == Boolean.TYPE) {
+ unmarshalBooleanArray((boolean[]) array, length);
+ } else {
+ throw new StreamCorruptedException("Unsupported array type: " + clazz);
+ }
+ }
+
+ private void unmarshalIntArray(int[] ints, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ ints[i] = readInt();
+ }
+ }
+
+ private void unmarshalByteArray(byte[] bytes, int length) throws IOException {
+ readFully(bytes, 0, length);
+ }
+
+ private void unmarshalLongArray(long[] longs, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ longs[i] = readLong();
+ }
+ }
+
+ private void unmarshalFloatArray(float[] floats, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ floats[i] = readFloat();
+ }
+ }
+
+ private void unmarshalDoubleArray(double[] doubles, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ doubles[i] = readDouble();
+ }
+ }
+
+ private void unmarshalShortArray(short[] shorts, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ shorts[i] = readShort();
+ }
+ }
+
+ private void unmarshalCharArray(char[] chars, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ chars[i] = readChar();
+ }
+ }
+
+ private void unmarshalBooleanArray(boolean[] booleans, int length) throws IOException {
+ for (int i = 0; i < length; ++i) {
+ booleans[i] = readBoolean();
+ }
+ }
+
+ private void unmarshalObjectArray(Object[] objects, int length) throws IOException, ClassNotFoundException {
+ for (int i = 0; i < length; ++i) {
+ objects[i] = readObject();
+ }
+ }
+
+ private Object unmarshalNull() {
+ return null;
+ }
+
+ private Set unmarshalEmptySet() {
+ return Collections.EMPTY_SET;
+ }
+
+ private List unmarshalEmptyList() {
+ return Collections.EMPTY_LIST;
+ }
+
+ private Map unmarshalEmptyMap() {
+ return Collections.EMPTY_MAP;
+ }
+
+ private Object unmarshalResolvable() throws ClassNotFoundException, IOException {
+ Resolvable resolvable = (Resolvable) unmarshalExternalizable();
+ return resolvable.readResolve();
+ }
+
+ private Externalizable unmarshalExternalizable() throws ClassNotFoundException, IOException {
+ Class clazz = (Class) readObject();
+ Externalizable externalizable = createExternalizable(clazz);
+ externalizable.readExternal(this);
+ return externalizable;
+ }
+
+ private Externalizable createExternalizable(Class clazz) {
+ try {
+ Constructor constructor = clazz.getDeclaredConstructor();
+ boolean accessible = constructor.isAccessible();
+ constructor.setAccessible(true);
+ try {
+ return (Externalizable) constructor.newInstance();
+ } catch (IllegalAccessException e) {
+ throw new IllegalStateException(e);
+ } catch (InvocationTargetException e) {
+ throw new IllegalStateException(e);
+ } catch (InstantiationException e) {
+ throw new IllegalStateException(e);
+ } finally {
+ constructor.setAccessible(accessible);
+ }
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private String unmarshalString() throws IOException {
+ return readUTF();
+ }
+
+ private Map unmarshalMap() throws IOException, ClassNotFoundException {
+ Class clazz = (Class) readObject();
+ int size = readInt();
+ Map map = (Map) createCollection(clazz, size);
+ for (int i = 0; i < size; ++i) {
+ Object key = readObject();
+ Object value = readObject();
+ map.put(key, value);
+ }
+ return map;
+ }
+
+ private Collection unmarshalCollection() throws IOException, ClassNotFoundException {
+ Class clazz = (Class) readObject();
+ int size = readInt();
+ Collection collection = (Collection) createCollection(clazz, size);
+ for (int i = 0; i < size; ++i) {
+ collection.add(readObject());
+ }
+ return collection;
+ }
+
+ private Object createCollection(Class clazz, int size) throws ClassNotFoundException, IOException {
+ try {
+ Constructor constructor = clazz.getConstructor(Integer.TYPE);
+ return constructor.newInstance(size);
+ } catch (InstantiationException e) {
+ throw new IllegalStateException(e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalStateException(e);
+ } catch (InvocationTargetException e) {
+ throw new IllegalStateException(e);
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private int unmarshalHandle() throws IOException {
+ return readInt();
+ }
+
+ private Class unmarshalClass() throws IOException, ClassNotFoundException {
+ String className = (String) readObject();
+ return this.classLoader.loadClass(className);
+ }
+
+ private byte unmarshalRecordType() throws IOException {
+ return readByte();
+ }
+
+ private Object unmarshalReference(int handle) {
+ return objectsByHandle.get(handle);
+ }
+
+ private void registerObject(int handle, Object object) {
+ objectsByHandle.put(handle, object);
+ }
+}
Added: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java (rev 0)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -0,0 +1,271 @@
+package org.drools.common;
+
+import static org.drools.common.DroolsObjectStreamConstants.*;
+
+import java.io.DataOutputStream;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectOutput;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class DroolsObjectOutputStream extends DataOutputStream implements ObjectOutput {
+ private static final Class EMPTY_SET_CLASS = Collections.EMPTY_SET.getClass();
+ private static final Class EMPTY_MAP_CLASS = Collections.EMPTY_MAP.getClass();
+ private static final Class EMPTY_LIST_CLASS = Collections.EMPTY_LIST.getClass();
+
+ private final Map handlesByObject = new IdentityHashMap();
+ private int handleCount = 0;
+
+ public DroolsObjectOutputStream(OutputStream stream) {
+ super(stream);
+ }
+
+ public void writeObject(Object object) throws IOException {
+ if (object == null) {
+ marshalNull();
+ } else {
+ Class clazz = object.getClass();
+
+ if (clazz == EMPTY_SET_CLASS) {
+ marshalEmptySet();
+ } else if (clazz == EMPTY_LIST_CLASS) {
+ marshalEmptyList();
+ } else if (clazz == EMPTY_MAP_CLASS) {
+ marshalEmptyMap();
+ } else if (clazz == String.class) {
+ marshalObjectOrReference(((String) object).intern(), clazz);
+ } else {
+ marshalObjectOrReference(object, clazz);
+ }
+ }
+ }
+
+ private void marshalNull() throws IOException {
+ marshalRecordType(NULL);
+ }
+
+ private void marshalObjectOrReference(Object object, Class clazz) throws IOException {
+ int handle = registerObject(object);
+ if (handle < 0) {
+ marshalObject(object, clazz, -handle);
+ } else {
+ marshalReference(handle);
+ }
+ }
+
+ private void marshalObject(Object object, Class clazz, int handle) throws IOException {
+ if (Externalizable.class.isAssignableFrom(clazz)) {
+ marshalExternalizable((Externalizable) object, clazz, handle);
+ } else if (clazz == String.class) {
+ marshalString((String) object, handle);
+ } else if (Map.class.isAssignableFrom(clazz)) {
+ marshalMap((Map) object, clazz, handle);
+ } else if (Collection.class.isAssignableFrom(clazz)) {
+ marshalCollection((Collection) object, clazz, handle);
+ } else if (clazz == Class.class) {
+ marshalClass((Class) object, handle);
+ } else if (clazz.isArray()) {
+ marshalArray(object, clazz, handle);
+ } else {
+ throw new NotSerializableException("Unsupported class: " + clazz);
+ }
+ }
+
+ private void marshalArray(Object array, Class clazz, int handle) throws IOException {
+ marshalRecordType(ARRAY);
+ marshalHandle(handle);
+ writeObject(clazz);
+ Class componentType = clazz.getComponentType();
+ if (componentType.isPrimitive()) {
+ marshalPrimitiveArray(array, componentType);
+ } else {
+ marshalObjectArray((Object[]) array);
+ }
+ }
+
+ private void marshalPrimitiveArray(Object array, Class clazz) throws IOException {
+ if (clazz == Integer.TYPE) {
+ marshalIntArray(array);
+ } else if (clazz == Byte.TYPE) {
+ marshalByteArray(array);
+ } else if (clazz == Long.TYPE) {
+ marshalLongArray(array);
+ } else if (clazz == Float.TYPE) {
+ marshalFloatArray(array);
+ } else if (clazz == Double.TYPE) {
+ marshalDoubleArray(array);
+ } else if (clazz == Short.TYPE) {
+ marshalShortArray(array);
+ } else if (clazz == Character.TYPE) {
+ marshalCharArray(array);
+ } else if (clazz == Boolean.TYPE) {
+ marshalBooleanArray(array);
+ } else {
+ throw new NotSerializableException("Unsupported array type: " + clazz);
+ }
+ }
+
+ private void marshalIntArray(Object array) throws IOException {
+ int[] ints = (int[]) array;
+ int length = ints.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeInt(ints[i]);
+ }
+ }
+
+ private void marshalByteArray(Object array) throws IOException {
+ byte[] bytes = (byte[]) array;
+ int length = bytes.length;
+ writeInt(length);
+ write(bytes, 0, length);
+ }
+
+ private void marshalLongArray(Object array) throws IOException {
+ long[] longs = (long[]) array;
+ int length = longs.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeLong(longs[i]);
+ }
+ }
+
+ private void marshalFloatArray(Object array) throws IOException {
+ float[] floats = (float[]) array;
+ int length = floats.length;
+ writeFloat(length);
+ for (int i = 0; i < length; ++i) {
+ writeFloat(floats[i]);
+ }
+ }
+
+ private void marshalDoubleArray(Object array) throws IOException {
+ double[] doubles = (double[]) array;
+ int length = doubles.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeDouble(doubles[i]);
+ }
+ }
+
+ private void marshalShortArray(Object array) throws IOException {
+ short[] shorts = (short[]) array;
+ int length = shorts.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeShort(shorts[i]);
+ }
+ }
+
+ private void marshalCharArray(Object array) throws IOException {
+ char[] chars = (char[]) array;
+ int length = chars.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeChar(chars[i]);
+ }
+ }
+
+ private void marshalBooleanArray(Object array) throws IOException {
+ boolean[] booleans = (boolean[]) array;
+ int length = booleans.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeBoolean(booleans[i]);
+ }
+ }
+
+ private void marshalObjectArray(Object[] objects) throws IOException {
+ int length = objects.length;
+ writeInt(length);
+ for (int i = 0; i < length; ++i) {
+ writeObject(objects[i]);
+ }
+ }
+
+ private void marshalClass(Class clazz, int handle) throws IOException {
+ marshalRecordType(CLASS);
+ marshalHandle(handle);
+ writeObject(clazz.getName());
+ }
+
+ private void marshalReference(int handle) throws IOException {
+ marshalRecordType(REFERENCE);
+ marshalHandle(handle);
+ }
+
+ private void marshalString(String string, int handle) throws IOException {
+ marshalRecordType(STRING);
+ marshalHandle(handle);
+ writeUTF(string);
+ }
+
+ private void marshalExternalizable(Externalizable marshallable, Class clazz, int handle) throws IOException {
+ if (Resolvable.class.isAssignableFrom(clazz)) {
+ marshalRecordType(REPLACEABLE);
+ } else {
+ marshalRecordType(EXTERNALIZABLE);
+ }
+ marshalHandle(handle);
+ writeObject(clazz);
+ marshallable.writeExternal(this);
+ }
+
+ private void marshalMap(Map map, Class clazz, int handle) throws IOException {
+ marshalRecordType(MAP);
+ marshalHandle(handle);
+ writeObject(clazz);
+ writeInt(map.size());
+ for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ writeObject(entry.getKey());
+ writeObject(entry.getValue());
+ }
+ }
+
+ private void marshalCollection(Collection collection, Class clazz, int handle) throws IOException {
+ marshalRecordType(COLLECTION);
+ marshalHandle(handle);
+ writeObject(clazz);
+ writeInt(collection.size());
+ for (Iterator i = collection.iterator(); i.hasNext();) {
+ writeObject(i.next());
+ }
+ }
+
+ private void marshalEmptySet() throws IOException {
+ marshalRecordType(EMPTY_SET);
+ }
+
+ private void marshalEmptyList() throws IOException {
+ marshalRecordType(EMPTY_LIST);
+ }
+
+ private void marshalEmptyMap() throws IOException {
+ marshalRecordType(EMPTY_MAP);
+ }
+
+ private void marshalRecordType(byte type) throws IOException {
+ writeByte(type);
+ }
+
+ private void marshalHandle(int handle) throws IOException {
+ writeInt(handle);
+ }
+
+ private int registerObject(Object object) {
+ Integer handle = (Integer) handlesByObject.get(object);
+ if (handle == null) {
+ handle = ++handleCount;
+ handlesByObject.put(object, handle);
+ handle = -handle;
+ }
+ return handle;
+ }
+}
Added: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectStreamConstants.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectStreamConstants.java (rev 0)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectStreamConstants.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -0,0 +1,19 @@
+package org.drools.common;
+
+public final class DroolsObjectStreamConstants {
+ public static final byte CLASS = 11;
+ public static final byte EXTERNALIZABLE = 12;
+ public static final byte REFERENCE = 13;
+ public static final byte EMPTY_SET = 14;
+ public static final byte EMPTY_LIST = 15;
+ public static final byte EMPTY_MAP = 16;
+ public static final byte MAP = 17;
+ public static final byte ARRAY = 18;
+ public static final byte STRING = 19;
+ public static final byte NULL = 20;
+ public static final byte COLLECTION = 21;
+ public static final byte REPLACEABLE = 22;
+
+ private DroolsObjectStreamConstants() {
+ }
+}
Added: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java (rev 0)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -0,0 +1,7 @@
+package org.drools.common;
+
+import java.io.Externalizable;
+
+public interface Resolvable extends Externalizable {
+ public Object readResolve();
+}
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -1,12 +1,12 @@
/*
* Copyright 2007 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.
@@ -18,8 +18,10 @@
package org.drools.reteoo;
import java.io.IOException;
-import java.io.ObjectInputStream;
import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -33,8 +35,6 @@
import org.drools.base.ShadowProxyFactory;
import org.drools.common.DroolsObjectInputStream;
import org.drools.common.InternalRuleBase;
-import org.drools.objenesis.Objenesis;
-import org.drools.objenesis.ObjenesisStd;
import org.drools.objenesis.instantiator.ObjectInstantiator;
import org.drools.reteoo.builder.BuildContext;
import org.drools.reteoo.builder.PatternBuilder;
@@ -46,9 +46,9 @@
public class ClassObjectTypeConf
implements
ObjectTypeConf,
- Serializable {
+ Externalizable {
- private final Class cls;
+ private Class cls;
private transient InternalRuleBase ruleBase;
private ObjectTypeNode[] objectTypeNodes;
@@ -223,12 +223,6 @@
return ret;
}
- private void readObject(ObjectInputStream stream) throws IOException,
- ClassNotFoundException {
- stream.defaultReadObject();
- this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
- }
-
/**
*
*/
@@ -300,4 +294,23 @@
public boolean isEvent() {
return this.concreteObjectTypeNode.getObjectType().isEvent();
}
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(cls);
+ out.writeObject(objectTypeNodes);
+ out.writeBoolean(shadowEnabled);
+ out.writeObject(shadowClass);
+ out.writeObject(concreteObjectTypeNode);
+ out.writeObject(entryPoint);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ cls = (Class) in.readObject();
+ objectTypeNodes = (ObjectTypeNode[]) in.readObject();
+ shadowEnabled = in.readBoolean();
+ shadowClass = (Class) in.readObject();
+ concreteObjectTypeNode = (ObjectTypeNode) in.readObject();
+ entryPoint = (EntryPoint) in.readObject();
+ this.ruleBase = ((DroolsObjectInputStream) in).getRuleBase();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/Rete.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/Rete.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -17,8 +17,9 @@
*/
import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
import java.util.HashMap;
import java.util.Map;
@@ -59,19 +60,14 @@
*/
public class Rete extends ObjectSource
implements
- Serializable,
+ Externalizable,
ObjectSink {
// ------------------------------------------------------------
// Instance members
// ------------------------------------------------------------
- /**
- *
- */
- private static final long serialVersionUID = 400L;
+ private Map<EntryPoint, ObjectHashMap> entryPoints;
- private final Map<EntryPoint, ObjectHashMap> entryPoints;
-
private transient InternalRuleBase ruleBase;
// ------------------------------------------------------------
@@ -86,12 +82,6 @@
this.ruleBase = ruleBase;
}
- private void readObject(ObjectInputStream stream) throws IOException,
- ClassNotFoundException {
- stream.defaultReadObject();
- this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
- }
-
// ------------------------------------------------------------
// Instance methods
// ------------------------------------------------------------
@@ -277,4 +267,12 @@
throw new UnsupportedOperationException( "ORete has no Object memory" );
}
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(entryPoints);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ entryPoints = (Map<EntryPoint, ObjectHashMap>) in.readObject();
+ this.ruleBase = ((DroolsObjectInputStream) in).getRuleBase();
+ }
}
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,13 +2,13 @@
/*
* Copyright 2005 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.
@@ -17,8 +17,10 @@
*/
import java.io.IOException;
-import java.io.ObjectInputStream;
import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -37,30 +39,24 @@
import org.drools.reteoo.builder.ReteooRuleBuilder;
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Rule;
-import org.drools.spi.AgendaGroup;
import org.drools.spi.Salience;
/**
* Builds the Rete-OO network for a <code>Package</code>.
- *
+ *
* @see org.drools.rule.Package
- *
+ *
* @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
* @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
- *
+ *
*/
public class ReteooBuilder
implements
- Serializable {
+ Externalizable {
// ------------------------------------------------------------
// Instance members
// ------------------------------------------------------------
- /**
- *
- */
- private static final long serialVersionUID = 400L;
-
/** The RuleBase */
private transient InternalRuleBase ruleBase;
@@ -71,7 +67,7 @@
private transient ReteooRuleBuilder ruleBuilder;
private IdGenerator idGenerator;
-
+
private boolean ordered;
// ------------------------------------------------------------
@@ -91,23 +87,16 @@
this.ruleBuilder = new ReteooRuleBuilder();
}
- private void readObject(ObjectInputStream stream) throws IOException,
- ClassNotFoundException {
- stream.defaultReadObject();
- this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
- this.ruleBuilder = new ReteooRuleBuilder();
- }
-
// ------------------------------------------------------------
// Instance methods
// ------------------------------------------------------------
/**
* Add a <code>Rule</code> to the network.
- *
+ *
* @param rule
* The rule to add.
- *
+ *
* @throws RuleIntegrationException
* if an error prevents complete construction of the network for
* the <code>Rule</code>.
@@ -121,18 +110,18 @@
this.rules.put( rule,
terminals.toArray( new BaseNode[terminals.size()] ) );
}
-
+
public IdGenerator getIdGenerator() {
return this.idGenerator;
}
-
+
public void order() {
if ( ordered ) {
// we should only do this on first call, its expected the RuleBase should not change afterwards.
return;
}
Map map = new HashMap();
-
+
for ( Iterator it = this.rules.values().iterator(); it.hasNext(); ) {
BaseNode[] nodes = (BaseNode[]) it.next();
for ( int i = 0 ; i < nodes.length; i++ ) {
@@ -151,24 +140,35 @@
}
}
}
-
+
for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
Entry entry = ( Entry ) it.next();
String agendaGroup = (String) entry.getKey();
List rules = ( List ) entry.getValue();
Collections.sort( rules, RuleSequenceComparator.INSTANCE );
-
+
int i = 0;
for ( Iterator listIter = rules.iterator(); listIter.hasNext(); ) {
RuleTerminalNode node = ( RuleTerminalNode ) listIter.next();
node.setSequence( i++ );
}
-
+
ruleBase.getAgendaGroupRuleTotals().put( agendaGroup, new Integer( i ) );
}
ordered = true;
}
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(rules);
+ out.writeObject(idGenerator);
+ out.writeBoolean(ordered);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ this.ruleBase = ((DroolsObjectInputStream) in).getRuleBase();
+ this.ruleBuilder = new ReteooRuleBuilder();
+ }
+
public static class RuleSequenceComparator implements Comparator {
public final static RuleSequenceComparator INSTANCE = new RuleSequenceComparator();
@@ -176,7 +176,7 @@
Object o2) {
RuleTerminalNode r1 = (RuleTerminalNode) o1;
RuleTerminalNode r2 = (RuleTerminalNode) o2;
-
+
Salience so1 = r1.getRule().getSalience();
if (so1 != null && !(so1 instanceof SalienceInteger) ) {
throw new RuntimeException(r1.getRule().getName() + "must not have a dynamic salience" );
@@ -185,20 +185,20 @@
if (so2 != null && !(so2 instanceof SalienceInteger) ) {
throw new RuntimeException(r2.getRule().getName() + "must not have a dynamic salience" );
}
-
+
int s1 = so1.getValue( null, null );
int s2 = so2.getValue( null, null );
-
- if ( s1 > s2) {
+
+ if ( s1 > s2) {
return -1;
} else if ( s1 < s2 ) {
return 1;
- }
-
+ }
+
int id1 =r1.getId();
int id2 =r2.getId();
-
- if ( id1 < id2) {
+
+ if ( id1 < id2) {
return -1;
} else if ( id1 > id2 ) {
return 1;
@@ -206,9 +206,9 @@
return 0;
}
}
-
+
}
-
+
public BaseNode[] getTerminalNodes(final Rule rule) {
return (BaseNode[]) this.rules.get( rule );
}
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/Extractor.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/Extractor.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/Extractor.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,13 +2,13 @@
/*
* Copyright 2005 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.
@@ -16,15 +16,12 @@
* limitations under the License.
*/
-import java.io.Serializable;
import java.lang.reflect.Method;
import org.drools.base.ValueType;
import org.drools.common.InternalWorkingMemory;
-public interface Extractor
- extends
- Serializable {
+public interface Extractor {
public Object getValue(InternalWorkingMemory workingMemory, Object object);
@@ -43,9 +40,9 @@
public double getDoubleValue(InternalWorkingMemory workingMemory, Object object);
public boolean getBooleanValue(InternalWorkingMemory workingMemory, Object object);
-
+
public boolean isNullValue(InternalWorkingMemory workingMemory, Object object);
-
+
public boolean isGlobal();
public ValueType getValueType();
Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,7 +2,6 @@
import java.io.IOException;
import java.io.InputStream;
-import java.io.ObjectInputStream;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
@@ -14,7 +13,7 @@
* This loads up rulebases from binary packages.
* Can work with an existing or a new rulebase.
* This is useful for deployment.
- *
+ *
* @author Michael Neale
*/
public class BinaryRuleBaseLoader {
@@ -29,7 +28,7 @@
*/
public BinaryRuleBaseLoader() {
this( RuleBaseFactory.newRuleBase(), null );
- }
+ }
/**
* This will add any binary packages to the rulebase.
@@ -52,17 +51,17 @@
if ( classLoader == null ) {
classLoader = this.getClass().getClassLoader();
}
- }
+ }
this.ruleBase = rb;
this.classLoader = classLoader;
}
-
+
/**
* This will add the BINARY package to the rulebase.
* Uses the member ClassLoader as the Package's internal parent classLoader
* which is Thread.currentThread.getContextClassLoader if not user specified
* @param in An input stream to the serialized package.
- */
+ */
public void addPackage(InputStream in) {
addPackage(in, this.classLoader);
}
@@ -70,15 +69,15 @@
/**
* This will add the BINARY package to the rulebase.
* @param in An input stream to the serialized package.
- * @param optional classLoader used as the parent ClassLoader for the Package's internal ClassLaoder
- */
+ * @param optional classLoader used as the parent ClassLoader for the Package's internal ClassLaoder
+ */
public void addPackage(InputStream in, ClassLoader classLoader) {
if ( classLoader == null ) {
classLoader = this.classLoader;
}
-
+
try {
- ObjectInputStream oin = new DroolsObjectInputStream( in, classLoader);
+ DroolsObjectInputStream oin = new DroolsObjectInputStream( in, classLoader);
Object opkg = oin.readObject();
if ( !(opkg instanceof Package) ) {
throw new IllegalArgumentException( "Can only add instances of org.drools.rule.Package to a rulebase instance." );
Modified: labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -2,56 +2,52 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.common.DroolsObjectInputStream;
+import org.drools.common.DroolsObjectOutputStream;
import org.drools.rule.Package;
import junit.framework.TestCase;
public class RuleBaseAssemblerTest extends TestCase {
-
+
public void testAssemblePackages() throws Exception {
RuleBase rb = RuleBaseFactory.newRuleBase();
rb.addPackage( new Package("goober") );
-
+
Package p1 = new Package("p1");
-
+
File f = getTempDirectory();
-
+
File p1file = new File(f, "p1.pkg");
-
+
writePackage( p1, p1file );
-
+
Package p1_ = readPackage( p1file );
-
+
rb = RuleBaseFactory.newRuleBase();
rb.addPackage( p1_ );
-
-
+
+
}
public static Package readPackage(File p1file) throws IOException,
- FileNotFoundException,
ClassNotFoundException {
- ObjectInputStream in = new DroolsObjectInputStream(new FileInputStream(p1file));
+ DroolsObjectInputStream in = new DroolsObjectInputStream(new FileInputStream(p1file));
Package p1_ = (Package) in.readObject();
in.close();
return p1_;
}
- public static void writePackage(Package pkg, File p1file) throws IOException,
- FileNotFoundException {
- ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(p1file));
+ public static void writePackage(Package pkg, File p1file) throws IOException {
+ DroolsObjectOutputStream out = new DroolsObjectOutputStream(new FileOutputStream(p1file));
out.writeObject( pkg );
- out.flush(); out.close();
+ out.close();
}
public static File getTempDirectory() {
@@ -70,12 +66,12 @@
private static File tempDir() {
File tmp = new File(System.getProperty( "java.io.tmpdir" ));
-
+
return new File(tmp, "__temp_test_drools_packages");
}
-
+
public static boolean deleteDir(File dir) {
-
+
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
@@ -86,14 +82,14 @@
}
}
}
-
+
// The directory is now empty so delete it
return dir.delete();
}
public static void clearTempDirectory() {
deleteDir( tempDir() );
-
- }
-
+
+ }
+
}
Modified: labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-23 06:21:21 UTC (rev 17376)
+++ labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-23 06:22:55 UTC (rev 17377)
@@ -854,7 +854,7 @@
assertNotNull(binPackage);
ByteArrayInputStream bin = new ByteArrayInputStream(binPackage);
- ObjectInputStream in = new DroolsObjectInputStream(bin);
+ DroolsObjectInputStream in = new DroolsObjectInputStream(bin);
Package binPkg = (Package) in.readObject();
assertNotNull(binPkg);
@@ -950,7 +950,7 @@
assertNotNull(binPackage);
ByteArrayInputStream bin = new ByteArrayInputStream(binPackage);
- ObjectInputStream in = new DroolsObjectInputStream(bin);
+ DroolsObjectInputStream in = new DroolsObjectInputStream(bin);
Package binPkg = (Package) in.readObject();
assertNotNull(binPkg);
More information about the jboss-svn-commits
mailing list