[jboss-svn-commits] JBL Code SVN: r36434 - in labs/jbossrules/dev_tags/persistence_refactor_20101216: drools-api/src/main/java/org/drools/persistence/jpa and 31 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Dec 16 12:50:19 EST 2010
Author: mark.proctor at jboss.com
Date: 2010-12-16 12:50:12 -0500 (Thu, 16 Dec 2010)
New Revision: 36434
Added:
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContext.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContextManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SessionMarshallingHelper.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SingleSessionCommandService.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronization.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronizationRegistryHelper.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/SessionInfo.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/WorkItemInfo.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaJDKTimerService.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContextManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/KnowledgeStoreServiceImpl.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionSynchronizationAdapter.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/impl/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/impl/MapPersistenceTest.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/session/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java
Removed:
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/WorkItemInfo.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/session/
Modified:
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/management/KnowledgeSessionMonitoringMBean.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/KnowledgeStoreService.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeStoreBeanFactory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/runtime/GetIdCommand.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalKnowledgeRuntime.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/core/util/FileManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/management/KnowledgeSessionMonitoring.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.classpath
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.project
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.classpath
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.project
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-ide-common/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManager.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManagerFactory.java
labs/jbossrules/dev_tags/persistence_refactor_20101216/osgi-bundles/jxls/org.drools.osgi.wrapper.jxls-reader/maven-eclipse.xml
Log:
JBRULES-2835 Persistence Store Agnostic refactoring
-Initial refactoring to be JPA independant
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/management/KnowledgeSessionMonitoringMBean.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/management/KnowledgeSessionMonitoringMBean.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/management/KnowledgeSessionMonitoringMBean.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -52,7 +52,7 @@
*
* @return
*/
- public int getKnowledgeSessionId();
+ public long getKnowledgeSessionId();
/**
* Returns the total fact count current loaded into this session
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -111,7 +111,7 @@
environment );
}
- public static StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
+ public static StatefulKnowledgeSession loadStatefulKnowledgeSession(long id,
KnowledgeBase kbase,
KnowledgeSessionConfiguration configuration,
Environment environment) {
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/KnowledgeStoreService.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/KnowledgeStoreService.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/persistence/jpa/KnowledgeStoreService.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -27,7 +27,7 @@
KnowledgeSessionConfiguration configuration,
Environment environment);
- StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
+ StatefulKnowledgeSession loadStatefulKnowledgeSession(long id,
KnowledgeBase kbase,
KnowledgeSessionConfiguration configuration,
Environment environment);
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -85,7 +85,7 @@
CommandExecutor,
KnowledgeRuntime {
- int getId();
+ long getId();
/**
* Releases all the current session resources, setting up the session for garbage collection.
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/integrationtests/MultithreadTest.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -65,399 +65,400 @@
* @author etirelli
*/
public class MultithreadTest extends TestCase {
- public void test() {
+
+ /**
+ * @inheritDoc
+ *
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testRuleBaseConcurrentCompilation() {
+ final int THREAD_COUNT = 30;
+ try {
+ boolean success = true;
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadRulebaseSharing.drl" ) ) );
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( builder.getPackage() );
+ ruleBase = SerializationHelper.serializeObject( ruleBase );
+ final Thread[] t = new Thread[THREAD_COUNT];
+ final RulebaseRunner[] r = new RulebaseRunner[THREAD_COUNT];
+ for ( int i = 0; i < t.length; i++ ) {
+ r[i] = new RulebaseRunner( i,
+ ruleBase );
+ t[i] = new Thread( r[i],
+ "thread-" + i );
+ t[i].start();
+ }
+ for ( int i = 0; i < t.length; i++ ) {
+ t[i].join();
+ if ( r[i].getStatus() == RulebaseRunner.Status.FAIL ) {
+ success = false;
+ }
+ }
+ if ( !success ) {
+ fail( "Multithread test failed. Look at the stack traces for details. " );
+ }
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail( "Should not raise any exception: " + e.getMessage() );
+ }
+ }
+
+ public static class RulebaseRunner
+ implements
+ Runnable {
+
+ private static final int ITERATIONS = 300;
+ private final int id;
+ private final RuleBase rulebase;
+ private Status status;
+
+ public RulebaseRunner(final int id,
+ final RuleBase rulebase) {
+ this.id = id;
+ this.rulebase = rulebase;
+ this.status = Status.SUCCESS;
+ }
+
+ public void run() {
+ try {
+ StatefulSession session2 = this.rulebase.newStatefulSession();
+
+ for ( int k = 0; k < ITERATIONS; k++ ) {
+ GrandParent gp = new GrandParent( "bob" );
+ Parent parent = new Parent( "mark" );
+ parent.setGrandParent( gp );
+
+ Child child = new Child( "mike" );
+ child.setParent( parent );
+
+ session2.insert( gp );
+ session2.insert( parent );
+ session2.insert( child );
+ }
+
+ session2.fireAllRules();
+ session2.dispose();
+
+ } catch ( Exception e ) {
+ this.status = Status.FAIL;
+ System.out.println( Thread.currentThread().getName() + " failed: " + e.getMessage() );
+ e.printStackTrace();
+ }
+ }
+
+ public static enum Status {
+ SUCCESS, FAIL
+ }
+
+ /**
+ * @return the id
+ */
+ public int getId() {
+ return id;
+ }
+
+ /**
+ * @return the status
+ */
+ public Status getStatus() {
+ return status;
+ }
+
+ }
+
+ public void testExpectedFires() {
+ try {
+ final PackageBuilder packageBuilder = new PackageBuilder();
+ packageBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadFiringCheck.drl" ) ) );
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( packageBuilder.getPackage() );
+ final Queue errorList = new ConcurrentLinkedQueue();
+ final Thread t[] = new Thread[50];
+ for ( int i = 0; i < t.length; i++ ) {
+ final int count = i;
+ t[i] = new Thread( new Runnable() {
+ public void run() {
+ try {
+ final int iterations = count * 15 + 3000;
+ final List results = new ArrayList();
+ final StatefulSession session2 = ruleBase.newStatefulSession();
+ session2.setGlobal( "results",
+ results );
+ session2.insert( new Integer( -1 ) );
+ for ( int k = 0; k < iterations; k++ ) {
+ session2.insert( new Integer( k ) );
+ if ( k + 1 != session2.getAgenda().agendaSize() ) {
+ errorList.add( "THREAD-" + count + " ERROR: expected agenda size=" + (k + 1) + " but was " + session2.getAgenda().agendaSize() );
+ }
+ }
+ session2.fireAllRules();
+ session2.dispose();
+ if ( results.size() != iterations ) {
+ errorList.add( "THREAD-" + count + " ERROR: expected fire count=" + iterations + " but was " + results.size() );
+ }
+ } catch ( Exception e ) {
+ errorList.add( "THREAD-" + count + " EXCEPTION: " + e.getMessage() );
+ e.printStackTrace();
+ }
+ }
+ } );
+ t[i].start();
+ }
+ for ( int i = 0; i < t.length; i++ ) {
+ t[i].join();
+ }
+ assertTrue( "Errors during execution: " + errorList.toString(),
+ errorList.isEmpty() );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail( "No exception should have been raised: " + e.getMessage() );
+ }
+ }
+
+ public void testMultithreadDateStringConstraints() {
+ try {
+ final int THREAD_COUNT = 10;
+ final PackageBuilder packageBuilder = new PackageBuilder();
+ packageBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadDateStringConstraints.drl" ) ) );
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( packageBuilder.getPackage() );
+ final Vector errors = new Vector();
+
+ final Thread t[] = new Thread[THREAD_COUNT];
+ for ( int j = 0; j < 10; j++ ) {
+ for ( int i = 0; i < t.length; i++ ) {
+ t[i] = new Thread() {
+ public void run() {
+ try {
+ final int ITERATIONS = 300;
+ StatefulSession session = ruleBase.newStatefulSession();
+ List results = new ArrayList();
+ session.setGlobal( "results",
+ results );
+ for ( int k = 0; k < ITERATIONS; k++ ) {
+ session.insert( new Order() );
+ }
+ session.fireAllRules();
+ session.dispose();
+ if ( results.size() != ITERATIONS ) {
+ errors.add( "Rules did not fired correctly. Expected: " + ITERATIONS + ". Actual: " + results.size() );
+ }
+ } catch ( Exception ex ) {
+ ex.printStackTrace();
+ errors.add( ex );
+ }
+ }
+
+ };
+ t[i].start();
+ }
+ for ( int i = 0; i < t.length; i++ ) {
+ t[i].join();
+ }
+ }
+ if ( !errors.isEmpty() ) {
+ fail( " Errors occured during execution " );
+ }
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail( "Should not raise exception" );
+ }
+ }
+
+ class Runner
+ implements
+ Runnable {
+ private final long TIME_SPAN;
+ private final StatelessSession session;
+ private final AtomicInteger count;
+
+ public Runner(long BASE_TIME,
+ StatelessSession session,
+ final AtomicInteger count) {
+ this.TIME_SPAN = BASE_TIME;
+ this.session = session;
+ this.count = count;
+ }
+
+ public void run() {
+ //System.out.println( Thread.currentThread().getName() + " starting..." );
+ try {
+ count.incrementAndGet();
+ long time = System.currentTimeMillis();
+ while ( (System.currentTimeMillis() - time) < TIME_SPAN ) {
+ //System.out.println( Thread.currentThread().getName() + ": added package at " + (System.currentTimeMillis() - time) );
+ for ( int j = 0; j < 100; j++ ) {
+ session.execute( getFacts() );
+ }
+ //System.out.println( Thread.currentThread().getName() + ": executed rules at " + (System.currentTimeMillis() - time) );
+ }
+ } catch ( Exception ex ) {
+ ex.printStackTrace();
+ }
+ if ( count.decrementAndGet() == 0 ) {
+ synchronized ( MultithreadTest.this ) {
+ MultithreadTest.this.notifyAll();
+ }
+ }
+ //System.out.println( Thread.currentThread().getName() + " exiting..." );
+ }
+
+ private Cheese[] getFacts() {
+ final int SIZE = 100;
+ Cheese[] facts = new Cheese[SIZE];
+
+ for ( int i = 0; i < facts.length; i++ ) {
+ facts[i] = new Cheese();
+ facts[i].setPrice( i );
+ facts[i].setOldPrice( i );
+ }
+ return facts;
+ }
+ }
+
+ public void testSharedPackagesThreadDeadLock() throws Exception {
+ final int THREADS = Integer.parseInt( System.getProperty( "test.threads",
+ "10" ) );
+ final long BASE_TIME = Integer.parseInt( System.getProperty( "test.time",
+ "15" ) ) * 1000;
+
+ final AtomicInteger count = new AtomicInteger( 0 );
+
+ final Package[] pkgs = buildPackages();
+ for ( int i = 0; i < THREADS; i++ ) {
+ RuleBase ruleBase = createRuleBase( pkgs );
+ StatelessSession session = createSession( ruleBase );
+ new Thread( new Runner( BASE_TIME,
+ session,
+ count ) ).start();
+ }
+ synchronized ( this ) {
+ wait();
+ }
+ }
+
+ private RuleBase createRuleBase(Package[] pkgs) {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ for ( Package pkg : pkgs ) {
+ ruleBase.addPackage( pkg );
+ }
+ return ruleBase;
+ }
+
+ private StatelessSession createSession(RuleBase ruleBase) {
+ StatelessSession session = ruleBase.newStatelessSession();
+ return session;
+ }
+
+ private Package[] buildPackages() throws Exception {
+ final String KEY = "REPLACE";
+ final int SIZE = 100;
+ final Package[] pkgs = new Package[SIZE];
+ final String DRL = "package org.drools\n" +
+ " no-loop true\n" +
+ " dialect \"java\"\n" +
+ "rule \"" + KEY +
+ "\"\n" +
+ "salience 1\n" +
+ "when\n" +
+ " $fact:Cheese(price == " + KEY + ", oldPrice not in (11,5))\n" + // thread-lock
+ "then\n" +
+ " //$fact.excludeProduct(" + KEY + ", 1, null, null);\n" +
+ "end\n";
+ System.out.print( "Building " + pkgs.length + " packages" );
+ for ( int i = 0; i < pkgs.length; i++ ) {
+ pkgs[i] = getPackage( DRL.replaceAll( KEY,
+ Integer.toString( i ) ) );
+ System.out.print( "." );
+ }
+ System.out.println();
+ return pkgs;
}
+
+ private static Package getPackage(String drl) throws Exception {
+ PackageBuilder pkgBuilder = new PackageBuilder();
+ pkgBuilder.addPackageFromDrl( new StringReader( drl ) );
+ if ( pkgBuilder.hasErrors() ) {
+ StringBuilder sb = new StringBuilder();
+ for ( Object obj : pkgBuilder.getErrors() ) {
+ if ( sb.length() > 0 ) {
+ sb.append( '\n' );
+ }
+ sb.append( obj );
+ }
+ throw new DroolsParserException( sb.toString() );
+ }
+ return pkgBuilder.getPackage();
+ }
- // FIXME
+ public void testEventExpiration() {
+ String rule =
+ "package org.drools\n" +
+ "declare StockTick @role(event) @expires(0s) end\n" +
+ "rule test no-loop true\n" +
+ "when\n" +
+ " $f : StockTick() from entry-point EntryPoint\n" +
+ "then\n" +
+ " //System.out.println($f);\n" +
+ "end";
-// /**
-// * @inheritDoc
-// *
-// * @see junit.framework.TestCase#setUp()
-// */
-// protected void setUp() throws Exception {
-// super.setUp();
-// }
-//
-// /**
-// * @inheritDoc
-// *
-// * @see junit.framework.TestCase#tearDown()
-// */
-// protected void tearDown() throws Exception {
-// super.tearDown();
-// }
-//
-// public void testRuleBaseConcurrentCompilation() {
-// final int THREAD_COUNT = 30;
-// try {
-// boolean success = true;
-// final PackageBuilder builder = new PackageBuilder();
-// builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadRulebaseSharing.drl" ) ) );
-// RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-// ruleBase.addPackage( builder.getPackage() );
-// ruleBase = SerializationHelper.serializeObject( ruleBase );
-// final Thread[] t = new Thread[THREAD_COUNT];
-// final RulebaseRunner[] r = new RulebaseRunner[THREAD_COUNT];
-// for ( int i = 0; i < t.length; i++ ) {
-// r[i] = new RulebaseRunner( i,
-// ruleBase );
-// t[i] = new Thread( r[i],
-// "thread-" + i );
-// t[i].start();
-// }
-// for ( int i = 0; i < t.length; i++ ) {
-// t[i].join();
-// if ( r[i].getStatus() == RulebaseRunner.Status.FAIL ) {
-// success = false;
-// }
-// }
-// if ( !success ) {
-// fail( "Multithread test failed. Look at the stack traces for details. " );
-// }
-// } catch ( Exception e ) {
-// e.printStackTrace();
-// fail( "Should not raise any exception: " + e.getMessage() );
-// }
-// }
-//
-// public static class RulebaseRunner
-// implements
-// Runnable {
-//
-// private static final int ITERATIONS = 300;
-// private final int id;
-// private final RuleBase rulebase;
-// private Status status;
-//
-// public RulebaseRunner(final int id,
-// final RuleBase rulebase) {
-// this.id = id;
-// this.rulebase = rulebase;
-// this.status = Status.SUCCESS;
-// }
-//
-// public void run() {
-// try {
-// StatefulSession session2 = this.rulebase.newStatefulSession();
-//
-// for ( int k = 0; k < ITERATIONS; k++ ) {
-// GrandParent gp = new GrandParent( "bob" );
-// Parent parent = new Parent( "mark" );
-// parent.setGrandParent( gp );
-//
-// Child child = new Child( "mike" );
-// child.setParent( parent );
-//
-// session2.insert( gp );
-// session2.insert( parent );
-// session2.insert( child );
-// }
-//
-// session2.fireAllRules();
-// session2.dispose();
-//
-// } catch ( Exception e ) {
-// this.status = Status.FAIL;
-// System.out.println( Thread.currentThread().getName() + " failed: " + e.getMessage() );
-// e.printStackTrace();
-// }
-// }
-//
-// public static enum Status {
-// SUCCESS, FAIL
-// }
-//
-// /**
-// * @return the id
-// */
-// public int getId() {
-// return id;
-// }
-//
-// /**
-// * @return the status
-// */
-// public Status getStatus() {
-// return status;
-// }
-//
-// }
-//
-// public void testExpectedFires() {
-// try {
-// final PackageBuilder packageBuilder = new PackageBuilder();
-// packageBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadFiringCheck.drl" ) ) );
-// final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-// ruleBase.addPackage( packageBuilder.getPackage() );
-// final Queue errorList = new ConcurrentLinkedQueue();
-// final Thread t[] = new Thread[50];
-// for ( int i = 0; i < t.length; i++ ) {
-// final int count = i;
-// t[i] = new Thread( new Runnable() {
-// public void run() {
-// try {
-// final int iterations = count * 15 + 3000;
-// final List results = new ArrayList();
-// final StatefulSession session2 = ruleBase.newStatefulSession();
-// session2.setGlobal( "results",
-// results );
-// session2.insert( new Integer( -1 ) );
-// for ( int k = 0; k < iterations; k++ ) {
-// session2.insert( new Integer( k ) );
-// if ( k + 1 != session2.getAgenda().agendaSize() ) {
-// errorList.add( "THREAD-" + count + " ERROR: expected agenda size=" + (k + 1) + " but was " + session2.getAgenda().agendaSize() );
-// }
-// }
-// session2.fireAllRules();
-// session2.dispose();
-// if ( results.size() != iterations ) {
-// errorList.add( "THREAD-" + count + " ERROR: expected fire count=" + iterations + " but was " + results.size() );
-// }
-// } catch ( Exception e ) {
-// errorList.add( "THREAD-" + count + " EXCEPTION: " + e.getMessage() );
-// e.printStackTrace();
-// }
-// }
-// } );
-// t[i].start();
-// }
-// for ( int i = 0; i < t.length; i++ ) {
-// t[i].join();
-// }
-// assertTrue( "Errors during execution: " + errorList.toString(),
-// errorList.isEmpty() );
-// } catch ( Exception e ) {
-// e.printStackTrace();
-// fail( "No exception should have been raised: " + e.getMessage() );
-// }
-// }
-//
-// public void testMultithreadDateStringConstraints() {
-// try {
-// final int THREAD_COUNT = 10;
-// final PackageBuilder packageBuilder = new PackageBuilder();
-// packageBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultithreadDateStringConstraints.drl" ) ) );
-// final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-// ruleBase.addPackage( packageBuilder.getPackage() );
-// final Vector errors = new Vector();
-//
-// final Thread t[] = new Thread[THREAD_COUNT];
-// for ( int j = 0; j < 10; j++ ) {
-// for ( int i = 0; i < t.length; i++ ) {
-// t[i] = new Thread() {
-// public void run() {
-// try {
-// final int ITERATIONS = 300;
-// StatefulSession session = ruleBase.newStatefulSession();
-// List results = new ArrayList();
-// session.setGlobal( "results",
-// results );
-// for ( int k = 0; k < ITERATIONS; k++ ) {
-// session.insert( new Order() );
-// }
-// session.fireAllRules();
-// session.dispose();
-// if ( results.size() != ITERATIONS ) {
-// errors.add( "Rules did not fired correctly. Expected: " + ITERATIONS + ". Actual: " + results.size() );
-// }
-// } catch ( Exception ex ) {
-// ex.printStackTrace();
-// errors.add( ex );
-// }
-// }
-//
-// };
-// t[i].start();
-// }
-// for ( int i = 0; i < t.length; i++ ) {
-// t[i].join();
-// }
-// }
-// if ( !errors.isEmpty() ) {
-// fail( " Errors occured during execution " );
-// }
-// } catch ( Exception e ) {
-// e.printStackTrace();
-// fail( "Should not raise exception" );
-// }
-// }
-//
-// class Runner
-// implements
-// Runnable {
-// private final long TIME_SPAN;
-// private final StatelessSession session;
-// private final AtomicInteger count;
-//
-// public Runner(long BASE_TIME,
-// StatelessSession session,
-// final AtomicInteger count) {
-// this.TIME_SPAN = BASE_TIME;
-// this.session = session;
-// this.count = count;
-// }
-//
-// public void run() {
-// //System.out.println( Thread.currentThread().getName() + " starting..." );
-// try {
-// count.incrementAndGet();
-// long time = System.currentTimeMillis();
-// while ( (System.currentTimeMillis() - time) < TIME_SPAN ) {
-// //System.out.println( Thread.currentThread().getName() + ": added package at " + (System.currentTimeMillis() - time) );
-// for ( int j = 0; j < 100; j++ ) {
-// session.execute( getFacts() );
-// }
-// //System.out.println( Thread.currentThread().getName() + ": executed rules at " + (System.currentTimeMillis() - time) );
-// }
-// } catch ( Exception ex ) {
-// ex.printStackTrace();
-// }
-// if ( count.decrementAndGet() == 0 ) {
-// synchronized ( MultithreadTest.this ) {
-// MultithreadTest.this.notifyAll();
-// }
-// }
-// //System.out.println( Thread.currentThread().getName() + " exiting..." );
-// }
-//
-// private Cheese[] getFacts() {
-// final int SIZE = 100;
-// Cheese[] facts = new Cheese[SIZE];
-//
-// for ( int i = 0; i < facts.length; i++ ) {
-// facts[i] = new Cheese();
-// facts[i].setPrice( i );
-// facts[i].setOldPrice( i );
-// }
-// return facts;
-// }
-// }
-//
-// public void testSharedPackagesThreadDeadLock() throws Exception {
-// final int THREADS = Integer.parseInt( System.getProperty( "test.threads",
-// "10" ) );
-// final long BASE_TIME = Integer.parseInt( System.getProperty( "test.time",
-// "15" ) ) * 1000;
-//
-// final AtomicInteger count = new AtomicInteger( 0 );
-//
-// final Package[] pkgs = buildPackages();
-// for ( int i = 0; i < THREADS; i++ ) {
-// RuleBase ruleBase = createRuleBase( pkgs );
-// StatelessSession session = createSession( ruleBase );
-// new Thread( new Runner( BASE_TIME,
-// session,
-// count ) ).start();
-// }
-// synchronized ( this ) {
-// wait();
-// }
-// }
-//
-// private RuleBase createRuleBase(Package[] pkgs) {
-// RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-// for ( Package pkg : pkgs ) {
-// ruleBase.addPackage( pkg );
-// }
-// return ruleBase;
-// }
-//
-// private StatelessSession createSession(RuleBase ruleBase) {
-// StatelessSession session = ruleBase.newStatelessSession();
-// return session;
-// }
-//
-// private Package[] buildPackages() throws Exception {
-// final String KEY = "REPLACE";
-// final int SIZE = 100;
-// final Package[] pkgs = new Package[SIZE];
-// final String DRL = "package org.drools\n" + " no-loop true\n" + " dialect \"java\"\n" + "rule \"" + KEY + "\"\n" + "salience 1\n" + "when\n" + " $fact:Cheese(price == " + KEY + ", oldPrice not in (11,5))\n" + // thread-lock
-// "then\n" + " //$fact.excludeProduct(" + KEY + ", 1, null, null);\n" + "end\n";
-// System.out.print( "Building " + pkgs.length + " packages" );
-// for ( int i = 0; i < pkgs.length; i++ ) {
-// pkgs[i] = getPackage( DRL.replaceAll( KEY,
-// Integer.toString( i ) ) );
-// System.out.print( "." );
-// }
-// System.out.println();
-// return pkgs;
-// }
-//
-// private static Package getPackage(String drl) throws Exception {
-// PackageBuilder pkgBuilder = new PackageBuilder();
-// pkgBuilder.addPackageFromDrl( new StringReader( drl ) );
-// if ( pkgBuilder.hasErrors() ) {
-// StringBuilder sb = new StringBuilder();
-// for ( Object obj : pkgBuilder.getErrors() ) {
-// if ( sb.length() > 0 ) {
-// sb.append( '\n' );
-// }
-// sb.append( obj );
-// }
-// throw new DroolsParserException( sb.toString() );
-// }
-// return pkgBuilder.getPackage();
-// }
-//
-// public void testEventExpiration() {
-// String rule =
-// "package org.drools\n" +
-// "declare StockTick @role(event) @expires(0s) end\n" +
-// "rule test no-loop true\n" +
-// "when\n" +
-// " $f : StockTick() from entry-point EntryPoint\n" +
-// "then\n" +
-// " //System.out.println($f);\n" +
-// "end";
-//
-// final StatefulKnowledgeSession session;
-// final WorkingMemoryEntryPoint entryPoint;
-//
-// KnowledgeBaseConfiguration kbaseConf = KnowledgeBaseFactory
-// .newKnowledgeBaseConfiguration();
-// kbaseConf.setOption(EventProcessingOption.STREAM);
-//
-// KnowledgeBuilder builder = KnowledgeBuilderFactory
-// .newKnowledgeBuilder();
-//
-// builder.add(ResourceFactory.newReaderResource(new StringReader(rule)),
-// ResourceType.DRL);
-//
-// if (builder.hasErrors()) {
-// throw new RuntimeException(builder.getErrors().toString());
-// }
-//
-// final KnowledgeBase knowledgeBase = KnowledgeBaseFactory
-// .newKnowledgeBase(kbaseConf);
-//
-// knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());
-//
-// session = knowledgeBase.newStatefulKnowledgeSession();
-// WorkingMemoryEventListener wmel = Mockito.mock( WorkingMemoryEventListener.class );
-// session.addEventListener( wmel );
-//
-// entryPoint = session
-// .getWorkingMemoryEntryPoint("EntryPoint");
-//
-// new Thread(new Runnable() {
-// public void run() {
-// session.fireUntilHalt();
-// }
-// }).start();
-//
-// for (int x = 0; x < 10000; x++) {
-// entryPoint.insert(new StockTick(x, "RHT", 10, 10+x));
-// Thread.yield();
-// }
-//
-// session.halt();
-// session.fireAllRules();
-//
-// // facts are being expired
-// verify( wmel, atLeastOnce() ).objectRetracted( any( ObjectRetractedEvent.class ) );
-// }
+ final StatefulKnowledgeSession session;
+ final WorkingMemoryEntryPoint entryPoint;
+ KnowledgeBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kbaseConf.setOption(EventProcessingOption.STREAM);
+
+ KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+ builder.add(ResourceFactory.newReaderResource(new StringReader(rule)),
+ ResourceType.DRL);
+ if (builder.hasErrors()) {
+ throw new RuntimeException(builder.getErrors().toString());
+ }
+
+ final KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConf);
+
+ knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());
+
+ session = knowledgeBase.newStatefulKnowledgeSession();
+ WorkingMemoryEventListener wmel = Mockito.mock( WorkingMemoryEventListener.class );
+ session.addEventListener( wmel );
+
+ entryPoint = session.getWorkingMemoryEntryPoint("EntryPoint");
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
+ for (int x = 0; x < 10000; x++) {
+ entryPoint.insert(new StockTick(x, "RHT", 10, 10+x));
+ Thread.yield();
+ }
+
+ session.halt();
+ session.fireAllRules();
+
+ // facts are being expired
+ verify( wmel, atLeastOnce() ).objectRetracted( any( ObjectRetractedEvent.class ) );
+ }
+
+
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -124,7 +124,7 @@
return null;
}
- public int getId() {
+ public long getId() {
// TODO Auto-generated method stub
return 0;
}
@@ -215,7 +215,7 @@
}
- public void setId(int id) {
+ public void setId(long id) {
// TODO Auto-generated method stub
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeStoreBeanFactory.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeStoreBeanFactory.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeStoreBeanFactory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -17,7 +17,7 @@
package org.drools.container.spring.beans;
import org.drools.persistence.jpa.KnowledgeStoreService;
-import org.drools.persistence.jpa.impl.KnowledgeStoreServiceImpl;
+import org.drools.persistence.jpa.KnowledgeStoreServiceImpl;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -19,7 +19,9 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
-import org.drools.persistence.session.JpaManager;
+import org.drools.persistence.PersistenceContext;
+import org.drools.persistence.PersistenceContextManager;
+import org.drools.persistence.jpa.JpaPersistenceContext;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.slf4j.Logger;
@@ -34,7 +36,7 @@
*/
public class DroolsSpringJpaManager
implements
- JpaManager {
+ PersistenceContextManager {
Logger logger = LoggerFactory.getLogger( getClass() );
@@ -50,11 +52,11 @@
this.env = env;
this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
- getApplicationScopedEntityManager(); // we create this on initialisation so that we own the EMF reference
+ getApplicationScopedPersistenceContext(); // we create this on initialisation so that we own the EMF reference
// otherwise Spring will close it after the transaction finishes
}
- public EntityManager getApplicationScopedEntityManager() {
+ public PersistenceContext getApplicationScopedPersistenceContext() {
if ( this.appScopedEntityManager == null ) {
// Use the App scoped EntityManager if the user has provided it, and it is open.
this.appScopedEntityManager = (EntityManager) this.env.get( EnvironmentName.APP_SCOPED_ENTITY_MANAGER );
@@ -81,15 +83,15 @@
if ( TransactionSynchronizationManager.isActualTransactionActive() ) {
this.appScopedEntityManager.joinTransaction();
}
- return this.appScopedEntityManager;
+ return new JpaPersistenceContext( this.appScopedEntityManager );
}
- public EntityManager getCommandScopedEntityManager() {
- return (EntityManager) this.env.get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+ public PersistenceContext getCommandScopedPersistenceContext() {
+ return new JpaPersistenceContext( (EntityManager) this.env.get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER ) );
}
public void beginCommandScopedEntityManager() {
- if ( this.getCommandScopedEntityManager() == null || !this.getCommandScopedEntityManager().isOpen() ) {
+ if ( this.getCommandScopedPersistenceContext() == null || !this.getCommandScopedPersistenceContext().isOpen() ) {
EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.getResource( "cmdEM" );
EntityManager em = null;
if ( emHolder == null ) {
@@ -104,7 +106,7 @@
em );
}
- this.getCommandScopedEntityManager().joinTransaction();
+ this.getCommandScopedPersistenceContext().joinTransaction();
this.appScopedEntityManager.joinTransaction();
}
@@ -112,8 +114,8 @@
public void endCommandScopedEntityManager() {
if ( TransactionSynchronizationManager.hasResource( "cmdEM" ) ) {
TransactionSynchronizationManager.unbindResource( "cmdEM" );
- if ( getCommandScopedEntityManager() != null ) {
- getCommandScopedEntityManager().close();
+ if ( getCommandScopedPersistenceContext() != null ) {
+ getCommandScopedPersistenceContext().close();
}
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -16,8 +16,8 @@
package org.drools.container.spring.beans.persistence;
-import org.drools.persistence.session.TransactionManager;
-import org.drools.persistence.session.TransactionSynchronization;
+import org.drools.persistence.TransactionManager;
+import org.drools.persistence.TransactionSynchronization;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.TransactionDefinition;
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -16,15 +16,15 @@
package org.drools.container.spring.beans.persistence;
-import org.drools.persistence.session.TransactionManager;
+import org.drools.persistence.TransactionManager;
import org.springframework.transaction.support.TransactionSynchronization;
public class SpringTransactionSynchronizationAdapter
implements
TransactionSynchronization {
- private org.drools.persistence.session.TransactionSynchronization ts;
+ private org.drools.persistence.TransactionSynchronization ts;
- public SpringTransactionSynchronizationAdapter(org.drools.persistence.session.TransactionSynchronization ts) {
+ public SpringTransactionSynchronizationAdapter(org.drools.persistence.TransactionSynchronization ts) {
this.ts = ts;
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -155,7 +155,7 @@
log.info( "---> create new SingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
log.info( "---> created SingleSessionCommandService id: " + sessionId );
ProcessInstance processInstance = service.startProcess( "org.drools.test.TestProcess" );
@@ -244,7 +244,7 @@
StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
ProcessInstance processInstance = service.startProcess( "org.drools.test.TestProcess" );
log.info( "Started process instance {}",
processInstance.getId() );
@@ -424,7 +424,7 @@
StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.startProcess( "org.drools.test.ProcessSubProcess" );
log.info( "Started process instance {}",
@@ -576,7 +576,7 @@
log.info( "---> get bean jpaSingleSessionCommandService" );
StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
log.info( "---> created SingleSessionCommandService id: " + sessionId );
ProcessInstance processInstance = service.startProcess( "org.drools.test.ProcessTimer" );
@@ -672,7 +672,7 @@
public void testPersistenceTimer2() throws Exception {
StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
ProcessInstance processInstance = service.startProcess( "org.drools.test.ProcessTimer2" );
log.info( "Started process instance {}",
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -151,7 +151,7 @@
}
} );
- final int sessionId = ksession.getId();
+ final long sessionId = ksession.getId();
txTemplate = new TransactionTemplate( txManager );
txTemplate.execute( new TransactionCallback() {
@@ -263,7 +263,7 @@
log.info( "---> get bean jpaSingleSessionCommandService" );
StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );
- int sessionId = service.getId();
+ long sessionId = service.getId();
log.info( "---> created SingleSessionCommandService id: " + sessionId );
log.info( "### Starting process ###" );
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -16,7 +16,7 @@
public class MyDroolsBean {
public static int TIMER_TRIGGER_COUNT;
- private static int sessionId;
+ private static long sessionId;
private EntityManagerFactory emf;
private KnowledgeBase kbase;
private KnowledgeStoreService kstore;
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -19,6 +19,6 @@
import org.drools.runtime.CommandExecutor;
public interface SingleSessionCommandService extends CommandService {
- int getSessionId();
+ long getSessionId();
void dispose();
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -108,7 +108,7 @@
this.commandService = commandService;
}
- public int getId() {
+ public long getId() {
return commandService.execute( new GetIdCommand() );
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/runtime/GetIdCommand.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/runtime/GetIdCommand.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/command/runtime/GetIdCommand.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -28,7 +28,7 @@
@XmlAccessorType(XmlAccessType.NONE)
public class GetIdCommand
implements
- GenericCommand<Integer> {
+ GenericCommand<Long> {
private static final long serialVersionUID = 510l;
@@ -36,7 +36,7 @@
public GetIdCommand() {
}
- public Integer execute(Context context) {
+ public Long execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
return ((StatefulKnowledgeSessionImpl)ksession).getId();
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -118,7 +118,7 @@
EventSupport,
ProcessEventManager {
- protected int id;
+ protected long id;
/** The actual memory for the <code>JoinNode</code>s. */
protected NodeMemories nodeMemories;
@@ -649,11 +649,11 @@
return this.dateFormats;
}
- public int getId() {
+ public long getId() {
return this.id;
}
- public void setId(int id) {
+ public void setId(long id) {
this.id = id;
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalKnowledgeRuntime.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalKnowledgeRuntime.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalKnowledgeRuntime.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -22,7 +22,7 @@
InternalProcessRuntime getProcessRuntime();
- void setId(int id);
+ void setId(long id);
void setEndOperationListener(EndOperationListener listener);
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -47,9 +47,9 @@
public interface InternalWorkingMemory
extends
WorkingMemory {
- public int getId();
+ public long getId();
- public void setId(int id);
+ public void setId(long id);
public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport);
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -37,12 +37,12 @@
Activation activation) throws FactException;
org.drools.FactHandle insert(Object object,
- boolean dynamic,
- boolean logical,
- Rule rule,
- Activation activation) throws FactException;
+ boolean dynamic,
+ boolean logical,
+ Rule rule,
+ Activation activation) throws FactException;
public org.drools.FactHandle insertLogical(Object object,
- boolean dynamic) throws FactException;
+ boolean dynamic) throws FactException;
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/core/util/FileManager.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/core/util/FileManager.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/core/util/FileManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -39,7 +39,7 @@
}
public void tearDown() {
- deleteDir( root );
+ deleteFile( root );
}
public File newFile(String name) {
@@ -80,7 +80,7 @@
if ( f.isFile() ) {
throw new IllegalStateException( "The temp directory exists as a file. Nuke it now !" );
}
- deleteDir( f );
+ deleteFile( f );
f.mkdir();
} else {
f.mkdir();
@@ -89,26 +89,18 @@
return this.root;
}
- public void deleteDir(File dir) {
- // Will throw RuntimeException is anything fails to delete
- String[] children = dir.list();
- for ( String child : children ) {
- File file = new File( dir,
- child );
- if ( file.isFile() ) {
- deleteFile( file );
- } else {
- deleteDir( file );
+ public void deleteFile(File file) {
+
+ if ( file.isDirectory() && file.list().length > 0 ) {
+ // Is is directory with children, so delete it's children first
+ // Will throw RuntimeException is anything fails to delete
+ String[] children = file.list();
+ for ( String child : children ) {
+ deleteFile( new File( file,
+ child ) );
}
}
- deleteFile( dir );
- }
-
- public void deleteFile(File file) {
- // This will attempt to delete a file 5 times, calling GC and Sleep between each iteration
- // Sometimes windows takes a while to release a lock on a file.
- // Throws an exception if it fails to delete
if ( !file.delete() ) {
int count = 0;
while ( !file.delete() && count++ < 5 ) {
@@ -128,9 +120,34 @@
throw new RuntimeException( "Unable to delete file", e);
}
}
-
}
+// public void deleteFile(File file) {
+// // This will attempt to delete a file 5 times, calling GC and Sleep between each iteration
+// // Sometimes windows takes a while to release a lock on a file.
+// // Throws an exception if it fails to delete
+// if ( !file.delete() ) {
+// int count = 0;
+// while ( !file.delete() && count++ < 5 ) {
+// System.gc();
+// try {
+// Thread.sleep( 250 );
+// } catch ( InterruptedException e ) {
+// throw new RuntimeException( "This should never happen" );
+// }
+// }
+// }
+//
+// if ( file.exists() ) {
+// try {
+// throw new RuntimeException( "Unable to delete file:" + file.getCanonicalPath() );
+// } catch ( IOException e ) {
+// throw new RuntimeException( "Unable to delete file", e);
+// }
+// }
+//
+// }
+
public void write(File f,
String text) throws IOException {
if ( f.exists() ) {
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -129,7 +129,7 @@
return this.session.getEntryPointNode();
}
- public int getId() {
+ public long getId() {
return this.session.getId();
}
@@ -844,7 +844,7 @@
this.session.queueWorkingMemoryAction(action);
}
- public void setId(int id) {
+ public void setId(long id) {
this.session.setId(id);
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/management/KnowledgeSessionMonitoring.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/management/KnowledgeSessionMonitoring.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-core/src/main/java/org/drools/management/KnowledgeSessionMonitoring.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -116,7 +116,7 @@
/* (non-Javadoc)
* @see org.drools.management.KnowledgeSessionMonitoringMBean#getKnowledgeSessionId()
*/
- public int getKnowledgeSessionId() {
+ public long getKnowledgeSessionId() {
return ksession.getId();
}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.classpath
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.classpath 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.classpath 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,66 +1,53 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
- <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.commands/3.6.0.I20100512-1500/org.eclipse.core.commands-3.6.0.I20100512-1500.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.contenttype/3.4.100.v20100505-1235/org.eclipse.core.contenttype-3.4.100.v20100505-1235.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.filebuffers/3.5.100.v20100520-0800/org.eclipse.core.filebuffers-3.5.100.v20100520-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.jobs/3.5.1.R36x_v20100824/org.eclipse.core.jobs-3.5.1.R36x_v20100824.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.resources/3.6.0.v20100526-0737/org.eclipse.core.resources-3.6.0.v20100526-0737.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.core.runtime/3.6.0.v20100505/org.eclipse.core.runtime-3.6.0.v20100505.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.debug.core/3.6.0.v20100519/org.eclipse.debug.core-3.6.0.v20100519.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.debug.ui/3.6.1.v20100901_r361/org.eclipse.debug.ui-3.6.1.v20100901_r361.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.draw2d/3.6.1.v20100913-2020/org.eclipse.draw2d-3.6.1.v20100913-2020.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.app/1.3.1.R36x_v20100803/org.eclipse.equinox.app-1.3.1.R36x_v20100803.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.common/3.6.0.v20100503/org.eclipse.equinox.common-3.6.0.v20100503.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.preferences/3.3.0.v20100503/org.eclipse.equinox.preferences-3.3.0.v20100503.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.registry/3.5.0.v20100503/org.eclipse.equinox.registry-3.5.0.v20100503.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.gef/3.6.1.v20100712-1224/org.eclipse.gef-3.6.1.v20100712-1224.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.core/3.6.1.v_A68_R36x/org.eclipse.jdt.core-3.6.1.v_A68_R36x.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.debug/3.6.1.v20100715_r361/org.eclipse.jdt.debug-3.6.1.v20100715_r361.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.debug.ui/3.5.0.v20100602-0830/org.eclipse.jdt.debug.ui-3.5.0.v20100602-0830.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.junit/3.6.1.r361_v20100825-0800/org.eclipse.jdt.junit-3.6.1.r361_v20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.junit.core/3.6.1.r361_v20100825-0800/org.eclipse.jdt.junit.core-3.6.1.r361_v20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.launching/3.5.100.v20100526/org.eclipse.jdt.launching-3.5.100.v20100526.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.ui/3.6.1.r361_v20100825-0800/org.eclipse.jdt.ui-3.6.1.r361_v20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jface/3.6.1.M20100825-0800/org.eclipse.jface-3.6.1.M20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.jface.text/3.6.1.r361_v20100825-0800/org.eclipse.jface.text-3.6.1.r361_v20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ltk.core.refactoring/3.5.100.v20100526-0800/org.eclipse.ltk.core.refactoring-3.5.100.v20100526-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ltk.ui.refactoring/3.5.0.v20100526-0800/org.eclipse.ltk.ui.refactoring-3.5.0.v20100526-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.osgi/3.6.1.R36x_v20100806/org.eclipse.osgi-3.6.1.R36x_v20100806.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.swt/3.6.1.v3655c/org.eclipse.swt-3.6.1.v3655c.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.swt.gtk.linux.x86/3.6.1.v3655c/org.eclipse.swt.gtk.linux.x86-3.6.1.v3655c.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.text/3.5.0.v20100601-1300/org.eclipse.text-3.5.0.v20100601-1300.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui/3.6.1.M20100826-1330/org.eclipse.ui-3.6.1.M20100826-1330.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.console/3.5.0.v20100526/org.eclipse.ui.console-3.5.0.v20100526.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.editors/3.6.1.r361_v20100825-0800/org.eclipse.ui.editors-3.6.1.r361_v20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.forms/3.5.2.r36_v20100702/org.eclipse.ui.forms-3.5.2.r36_v20100702.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.ide/3.6.1.M20100825-0800/org.eclipse.ui.ide-3.6.1.M20100825-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.views/3.5.0.I20100527-0800/org.eclipse.ui.views-3.5.0.I20100527-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.views.properties.tabbed/3.5.100.I20100509-0800/org.eclipse.ui.views.properties.tabbed-3.5.100.I20100509-0800.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.workbench/3.6.1.M20100826-1330/org.eclipse.ui.workbench-3.6.1.M20100826-1330.jar"/>
- <classpathentry kind="lib" path="/NotBackedUp/.m2/repository/p2/osgi/bundle/org.eclipse.ui.workbench.texteditor/3.6.1.r361_v20100714-0800/org.eclipse.ui.workbench.texteditor-3.6.1.r361_v20100714-0800.jar"/>
- <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar"/>
- <classpathentry kind="lib" path="xstream-1.3.1.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="lib" path="lib/antlr-runtime.jar"/>
- <classpathentry kind="lib" path="lib/drools-api.jar"/>
- <classpathentry kind="lib" path="lib/drools-compiler.jar"/>
- <classpathentry kind="lib" path="lib/drools-core.jar"/>
- <classpathentry kind="lib" path="lib/drools-decisiontables.jar"/>
- <classpathentry kind="lib" path="lib/drools-ide-common.jar"/>
- <classpathentry kind="lib" path="lib/drools-jsr94.jar"/>
- <classpathentry kind="lib" path="lib/drools-templates.jar"/>
- <classpathentry kind="lib" path="lib/jbpm-bpmn2.jar"/>
- <classpathentry kind="lib" path="lib/jbpm-flow-builder.jar"/>
- <classpathentry kind="lib" path="lib/jbpm-flow.jar"/>
- <classpathentry kind="lib" path="lib/jsr94.jar"/>
- <classpathentry kind="lib" path="lib/jxl.jar"/>
- <classpathentry kind="lib" path="lib/log4j.jar"/>
- <classpathentry kind="lib" path="lib/mvel2.jar"/>
- <classpathentry kind="lib" path="lib/xpp3_min.jar"/>
- <classpathentry kind="lib" path="lib/xstream.jar"/>
- <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<classpath>
+ <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="lib" path="antlr-runtime-3.2.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/com.ibm.icu/4.2.1.v20100412/com.ibm.icu-4.2.1.v20100412.jar"/>
+ <classpathentry kind="lib" path="jsr94-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar" sourcepath="M2_REPO/junit/junit/4.8.1/junit-4.8.1-sources.jar"/>
+ <classpathentry kind="lib" path="jxl-2.6.10.jar"/>
+ <classpathentry kind="lib" path="log4j-1.2.14.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.commands/3.6.0.I20100512-1500/org.eclipse.core.commands-3.6.0.I20100512-1500.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.contenttype/3.4.100.v20100505-1235/org.eclipse.core.contenttype-3.4.100.v20100505-1235.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.filebuffers/3.5.100.v20100520-0800/org.eclipse.core.filebuffers-3.5.100.v20100520-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.jobs/3.5.1.R36x_v20100824/org.eclipse.core.jobs-3.5.1.R36x_v20100824.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.resources/3.6.0.v20100526-0737/org.eclipse.core.resources-3.6.0.v20100526-0737.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.runtime/3.6.0.v20100505/org.eclipse.core.runtime-3.6.0.v20100505.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.debug.core/3.6.0.v20100519/org.eclipse.debug.core-3.6.0.v20100519.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.debug.ui/3.6.1.v20100901_r361/org.eclipse.debug.ui-3.6.1.v20100901_r361.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.draw2d/3.6.1.v20100913-2020/org.eclipse.draw2d-3.6.1.v20100913-2020.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.app/1.3.1.R36x_v20100803/org.eclipse.equinox.app-1.3.1.R36x_v20100803.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.common/3.6.0.v20100503/org.eclipse.equinox.common-3.6.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.preferences/3.3.0.v20100503/org.eclipse.equinox.preferences-3.3.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.registry/3.5.0.v20100503/org.eclipse.equinox.registry-3.5.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.gef/3.6.1.v20100712-1224/org.eclipse.gef-3.6.1.v20100712-1224.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.core/3.6.1.v_A68_R36x/org.eclipse.jdt.core-3.6.1.v_A68_R36x.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.debug/3.6.1.v20100715_r361/org.eclipse.jdt.debug-3.6.1.v20100715_r361.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.debug.ui/3.5.0.v20100602-0830/org.eclipse.jdt.debug.ui-3.5.0.v20100602-0830.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.junit/3.6.1.r361_v20100825-0800/org.eclipse.jdt.junit-3.6.1.r361_v20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.junit.core/3.6.1.r361_v20100825-0800/org.eclipse.jdt.junit.core-3.6.1.r361_v20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.launching/3.5.100.v20100526/org.eclipse.jdt.launching-3.5.100.v20100526.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jdt.ui/3.6.1.r361_v20100825-0800/org.eclipse.jdt.ui-3.6.1.r361_v20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jface/3.6.1.M20100825-0800/org.eclipse.jface-3.6.1.M20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jface.text/3.6.1.r361_v20100825-0800/org.eclipse.jface.text-3.6.1.r361_v20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ltk.core.refactoring/3.5.100.v20100526-0800/org.eclipse.ltk.core.refactoring-3.5.100.v20100526-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ltk.ui.refactoring/3.5.0.v20100526-0800/org.eclipse.ltk.ui.refactoring-3.5.0.v20100526-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.osgi/3.6.1.R36x_v20100806/org.eclipse.osgi-3.6.1.R36x_v20100806.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.swt/3.6.1.v3655c/org.eclipse.swt-3.6.1.v3655c.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.swt.gtk.linux.x86/3.6.1.v3655c/org.eclipse.swt.gtk.linux.x86-3.6.1.v3655c.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.text/3.5.0.v20100601-1300/org.eclipse.text-3.5.0.v20100601-1300.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui/3.6.1.M20100826-1330/org.eclipse.ui-3.6.1.M20100826-1330.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.console/3.5.0.v20100526/org.eclipse.ui.console-3.5.0.v20100526.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.editors/3.6.1.r361_v20100825-0800/org.eclipse.ui.editors-3.6.1.r361_v20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.forms/3.5.2.r36_v20100702/org.eclipse.ui.forms-3.5.2.r36_v20100702.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.ide/3.6.1.M20100825-0800/org.eclipse.ui.ide-3.6.1.M20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.views/3.5.0.I20100527-0800/org.eclipse.ui.views-3.5.0.I20100527-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.views.properties.tabbed/3.5.100.I20100509-0800/org.eclipse.ui.views.properties.tabbed-3.5.100.I20100509-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.workbench/3.6.1.M20100826-1330/org.eclipse.ui.workbench-3.6.1.M20100826-1330.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.workbench.texteditor/3.6.1.r361_v20100714-0800/org.eclipse.ui.workbench.texteditor-3.6.1.r361_v20100714-0800.jar"/>
+ <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar" sourcepath="C:\Users\mproctor\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c-sources.jar"/>
+ <classpathentry kind="lib" path="xstream-1.3.1.jar" sourcepath="C:\Users\mproctor\.m2\repository\com\thoughtworks\xstream\xstream\1.3.1\xstream-1.3.1-sources.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+</classpath>
\ No newline at end of file
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.project
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.project 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse/.project 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,44 +1,56 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.drools.eclipse</name>
- <comment>To use these drools eclipse plugins in production, use the download site linked on:
+<projectDescription>
+ <name>org.drools.eclipse</name>
+ <comment>To use these drools eclipse plugins in production, use the download site linked on:
http://www.jboss.org/drools/downloads
To use these drools eclipse plugins locally in development,
- see the description of the module org.drools.updatesite. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
- <linkedResources>
- <link>
- <name>xpp3_min-1.1.4c.jar</name>
- <type>1</type>
- <location>/NotBackedUp/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar</location>
- </link>
- <link>
- <name>xstream-1.3.1.jar</name>
- <type>1</type>
- <location>/NotBackedUp/.m2/repository/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar</location>
- </link>
- </linkedResources>
-</projectDescription>
+ see the description of the module org.drools.updatesite. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>xstream-1.3.1.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar</location>
+ </link>
+ <link>
+ <name>jsr94-1.1.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/jsr94/jsr94/1.1/jsr94-1.1.jar</location>
+ </link>
+ <link>
+ <name>log4j-1.2.14.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar</location>
+ </link>
+ <link>
+ <name>jxl-2.6.10.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/net/sourceforge/jexcelapi/jxl/2.6.10/jxl-2.6.10.jar</location>
+ </link>
+ <link>
+ <name>antlr-runtime-3.2.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/org/antlr/antlr-runtime/3.2/antlr-runtime-3.2.jar</location>
+ </link>
+ <link>
+ <name>xpp3_min-1.1.4c.jar</name>
+ <type>1</type>
+ <location>C:/Users/mproctor/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar</location>
+ </link>
+ </linkedResources>
+</projectDescription>
\ No newline at end of file
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.classpath
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.classpath 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.classpath 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,13 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
- <classpathentry exported="true" kind="lib" path="lib/mina-core.jar" sourcepath="org.drools.eclipse.tasksrc.zip"/>
- <classpathentry exported="true" kind="lib" path="lib/slf4j-api.jar" sourcepath="org.drools.eclipse.tasksrc.zip"/>
- <classpathentry exported="true" kind="lib" path="lib/slf4j-jdk14.jar" sourcepath="org.drools.eclipse.tasksrc.zip"/>
- <classpathentry kind="lib" path="lib/jbpm-human-task.jar"/>
- <classpathentry kind="lib" path="lib/drools-api.jar"/>
- <classpathentry kind="lib" path="lib/drools-core.jar"/>
- <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<classpath>
+ <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar" sourcepath="M2_REPO/junit/junit/4.8.1/junit-4.8.1-sources.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.commands/3.6.0.I20100512-1500/org.eclipse.core.commands-3.6.0.I20100512-1500.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.contenttype/3.4.100.v20100505-1235/org.eclipse.core.contenttype-3.4.100.v20100505-1235.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.jobs/3.5.1.R36x_v20100824/org.eclipse.core.jobs-3.5.1.R36x_v20100824.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.core.runtime/3.6.0.v20100505/org.eclipse.core.runtime-3.6.0.v20100505.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.app/1.3.1.R36x_v20100803/org.eclipse.equinox.app-1.3.1.R36x_v20100803.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.common/3.6.0.v20100503/org.eclipse.equinox.common-3.6.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.preferences/3.3.0.v20100503/org.eclipse.equinox.preferences-3.3.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.registry/3.5.0.v20100503/org.eclipse.equinox.registry-3.5.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.servletbridge.extensionbundle/1.2.0.v20100503/org.eclipse.equinox.servletbridge.extensionbundle-1.2.0.v20100503.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.jface/3.6.1.M20100825-0800/org.eclipse.jface-3.6.1.M20100825-0800.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.osgi/3.6.1.R36x_v20100806/org.eclipse.osgi-3.6.1.R36x_v20100806.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.swt/3.6.1.v3655c/org.eclipse.swt-3.6.1.v3655c.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.swt.gtk.linux.x86/3.6.1.v3655c/org.eclipse.swt.gtk.linux.x86-3.6.1.v3655c.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui/3.6.1.M20100826-1330/org.eclipse.ui-3.6.1.M20100826-1330.jar"/>
+ <classpathentry kind="lib" path="C:/Users/mproctor/.m2/repository/p2/osgi/bundle/org.eclipse.ui.workbench/3.6.1.M20100826-1330/org.eclipse.ui.workbench-3.6.1.M20100826-1330.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+</classpath>
\ No newline at end of file
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.project
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.project 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/.project 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,32 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.drools.eclipse.task</name>
- <comment>To use these drools eclipse plugins in production, use the download site linked on:
+<projectDescription>
+ <name>org.drools.eclipse.task</name>
+ <comment>To use these drools eclipse plugins in production, use the download site linked on:
http://www.jboss.org/drools/downloads
To use these drools eclipse plugins locally in development,
- see the description of the module org.drools.updatesite. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+ see the description of the module org.drools.updatesite. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+ <linkedResources/>
+</projectDescription>
\ No newline at end of file
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,13 +1,17 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: Drools Eclipse Task Plug-in
-Bundle-SymbolicName: org.drools.eclipse.task; singleton:=true
-Bundle-Version: 5.2.0.qualifier
+Bundle-Name: Drools :: Eclipse :: Task
+Bundle-SymbolicName: org.drools.eclipse.task;singleton:=true
+Bundle-Version: 5.2.0.SNAPSHOT
Bundle-Activator: org.drools.eclipse.task.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
+<<<<<<< .mine
+Bundle-Vendor: JBoss Inc.
+Bundle-ClassPath: .
+=======
Bundle-ClassPath: .,
lib/drools-api.jar,
lib/drools-core.jar,
@@ -16,3 +20,4 @@
lib/slf4j-jdk14.jar,
lib/jbpm-human-task.jar
Bundle-Vendor: JBoss by Red Hat
+>>>>>>> .r36401
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,9 +1,9 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.webdav
+Bundle-Name: Drools :: Eclipse :: Webdav for Guvnor tools
+Bundle-SymbolicName: org.eclipse.webdav;singleton:=true
Bundle-Version: 3.0.101
-Bundle-Vendor: %providerName
+Bundle-Vendor: JBoss Inc.
Bundle-Localization: plugin
Export-Package: org.eclipse.webdav,
org.eclipse.webdav.client,
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,10 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: %plugin.name
+Bundle-Name: Drools :: Eclipse :: Guvnor tools
Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 5.2.0.qualifier
+Bundle-Version: 5.2.0.SNAPSHOT
Bundle-Activator: org.guvnor.tools.Activator
-Bundle-Vendor: %plugin.provider
+Bundle-Vendor: JBoss Inc.
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
org.eclipse.ui.ide,
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-ide-common/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-ide-common/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-ide-common/src/test/java/org/drools/testframework/MockWorkingMemory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -144,7 +144,7 @@
return null;
}
- public int getId() {
+ public long getId() {
// TODO Auto-generated method stub
return 0;
}
@@ -233,7 +233,7 @@
}
- public void setId(int id) {
+ public void setId(long id) {
// TODO Auto-generated method stub
}
Added: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContext.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContext.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContext.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,18 @@
+package org.drools.persistence;
+
+import org.drools.persistence.info.SessionInfo;
+
+public interface PersistenceContext {
+
+ void persist(Object entity);
+
+ public <T> T find(Class<T> entityClass,
+ Object primaryKey);
+
+ boolean isOpen();
+
+ void joinTransaction();
+
+ void close();
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContextManager.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaManager.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContextManager.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistenceContextManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,13 @@
+package org.drools.persistence;
+
+public interface PersistenceContextManager {
+ PersistenceContext getApplicationScopedPersistenceContext();
+
+ PersistenceContext getCommandScopedPersistenceContext();
+
+ void beginCommandScopedEntityManager();
+
+ void endCommandScopedEntityManager();
+
+ void dispose();
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SessionMarshallingHelper.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SessionMarshallingHelper.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SessionMarshallingHelper.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,116 @@
+package org.drools.persistence;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.drools.KnowledgeBase;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class SessionMarshallingHelper {
+
+ private KnowledgeBase kbase;
+ private KnowledgeSessionConfiguration conf;
+ private StatefulKnowledgeSession ksession;
+ private Marshaller marshaller;
+ private Environment env;
+
+ /**
+ * Exist Info, so load session from here
+ * @param info
+ * @param ruleBase
+ * @param conf
+ * @param marshallingConfiguration
+ */
+ public SessionMarshallingHelper(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+ this.kbase = kbase;
+ this.conf = conf;
+ this.env = env;
+ ObjectMarshallingStrategy[] strategies = (ObjectMarshallingStrategy[]) env.get( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES );
+ if (strategies != null ) {
+ // use strategies if provided in the environment
+ this.marshaller = MarshallerFactory.newMarshaller( kbase, strategies );
+ } else {
+ this.marshaller = MarshallerFactory.newMarshaller( kbase ) ;
+ }
+ }
+
+ /**
+ * new session, don't write now as info will request it on update callback
+ * @param info
+ * @param session
+ * @param conf
+ * @param marshallingConfiguration
+ */
+ public SessionMarshallingHelper(StatefulKnowledgeSession ksession,
+ KnowledgeSessionConfiguration conf) {
+ this.ksession = ksession;
+ this.kbase = ksession.getKnowledgeBase();
+ this.conf = conf;
+ this.env = ksession.getEnvironment();
+ ObjectMarshallingStrategy[] strategies = (ObjectMarshallingStrategy[]) this.env.get( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES );
+ if (strategies != null ) {
+ // use strategies if provided in the environment
+ this.marshaller = MarshallerFactory.newMarshaller( kbase, strategies );
+ } else {
+ this.marshaller = MarshallerFactory.newMarshaller( kbase ) ;
+ }
+
+ }
+
+ public byte[] getSnapshot() {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ marshaller.marshall( baos,
+ ksession );
+ } catch ( IOException e ) {
+ throw new RuntimeException( "Unable to get session snapshot",
+ e );
+ }
+
+ return baos.toByteArray();
+ }
+
+ public StatefulKnowledgeSession loadSnapshot(byte[] bytes,
+ StatefulKnowledgeSession ksession) {
+ this.ksession = ksession;
+ ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
+ try {
+ if ( this.ksession != null ) {
+ this.marshaller.unmarshall( bais,
+ this.ksession );
+ } else {
+ this.ksession = this.marshaller.unmarshall( bais,
+ this.conf,
+ this.env );
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to load session snapshot",
+ e );
+ }
+ return this.ksession;
+ }
+
+
+ public StatefulKnowledgeSession getObject() {
+ return ksession;
+ }
+
+ public KnowledgeBase getKbase() {
+ return kbase;
+ }
+
+ public KnowledgeSessionConfiguration getConf() {
+ return conf;
+ }
+
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SingleSessionCommandService.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SingleSessionCommandService.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/SingleSessionCommandService.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,364 @@
+package org.drools.persistence;
+
+import java.lang.reflect.Constructor;
+import java.util.Collections;
+import java.util.Date;
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import org.drools.KnowledgeBase;
+import org.drools.RuleBase;
+import org.drools.SessionConfiguration;
+import org.drools.command.Command;
+import org.drools.command.Context;
+import org.drools.command.impl.ContextImpl;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.command.runtime.DisposeCommand;
+import org.drools.common.EndOperationListener;
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.persistence.info.SessionInfo;
+import org.drools.persistence.jpa.JpaJDKTimerService;
+import org.drools.persistence.jpa.JpaPersistenceContextManager;
+import org.drools.persistence.jpa.processinstance.JPAWorkItemManager;
+import org.drools.persistence.jta.JtaTransactionManager;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SingleSessionCommandService
+ implements
+ org.drools.command.SingleSessionCommandService {
+
+ Logger logger = LoggerFactory.getLogger( getClass() );
+
+ private SessionInfo sessionInfo;
+ private SessionMarshallingHelper marshallingHelper;
+
+ private StatefulKnowledgeSession ksession;
+ private Environment env;
+ private KnowledgeCommandContext kContext;
+
+ private TransactionManager txm;
+ private PersistenceContextManager jpm;
+
+ private volatile boolean doRollback;
+
+ private static Map<Object, Object> synchronizations = Collections.synchronizedMap( new IdentityHashMap<Object, Object>() );
+
+ public static Map<Object, Object> txManagerClasses = Collections.synchronizedMap( new IdentityHashMap<Object, Object>() );
+
+ public void checkEnvironment(Environment env) {
+ if ( env.get( EnvironmentName.ENTITY_MANAGER_FACTORY ) == null ) {
+ throw new IllegalArgumentException( "Environment must have an EntityManagerFactory" );
+ }
+
+ // @TODO log a warning that all transactions will be locally scoped using the EntityTransaction
+ // if ( env.get( EnvironmentName.TRANSACTION_MANAGER ) == null ) {
+ // throw new IllegalArgumentException( "Environment must have an EntityManagerFactory" );
+ // }
+ }
+
+ public SingleSessionCommandService(RuleBase ruleBase,
+ SessionConfiguration conf,
+ Environment env) {
+ this( new KnowledgeBaseImpl( ruleBase ),
+ conf,
+ env );
+ }
+
+ public SingleSessionCommandService(long sessionId,
+ RuleBase ruleBase,
+ SessionConfiguration conf,
+ Environment env) {
+ this( sessionId,
+ new KnowledgeBaseImpl( ruleBase ),
+ conf,
+ env );
+ }
+
+ public SingleSessionCommandService(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+ if ( conf == null ) {
+ conf = new SessionConfiguration();
+ }
+ this.env = env;
+
+ checkEnvironment( this.env );
+
+ this.sessionInfo = new SessionInfo();
+
+ initTransactionManager( this.env );
+
+ // create session but bypass command service
+ this.ksession = kbase.newStatefulKnowledgeSession(conf, this.env);
+
+ this.kContext = new KnowledgeCommandContext( new ContextImpl( "ksession",
+ null ),
+ null,
+ null,
+ this.ksession,
+ null );
+
+ ((JpaJDKTimerService) ((InternalKnowledgeRuntime) ksession).getTimerService()).setCommandService( this );
+
+ this.marshallingHelper = new SessionMarshallingHelper( this.ksession,
+ conf );
+ this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
+ ((InternalKnowledgeRuntime) this.ksession).setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
+
+ // Use the App scoped EntityManager if the user has provided it, and it is open.
+
+ try {
+ this.txm.begin();
+
+ //this.appScopedEntityManager.joinTransaction();
+ registerRollbackSync();
+
+ jpm.getApplicationScopedPersistenceContext().persist( this.sessionInfo );
+
+ this.txm.commit();
+
+ } catch ( Exception t1 ) {
+ try {
+ this.txm.rollback();
+ } catch ( Throwable t2 ) {
+ throw new RuntimeException( "Could not commit session or rollback",
+ t2 );
+ }
+ throw new RuntimeException( "Could not commit session",
+ t1 );
+ }
+
+ // update the session id to be the same as the session info id
+ ((InternalKnowledgeRuntime) ksession).setId( this.sessionInfo.getId() );
+
+ }
+
+ public SingleSessionCommandService(long sessionId,
+ KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+ if ( conf == null ) {
+ conf = new SessionConfiguration();
+ }
+
+
+ this.env = env;
+
+ checkEnvironment( this.env );
+
+ initTransactionManager( this.env );
+
+ initKsession( sessionId,
+ kbase,
+ conf );
+ }
+
+ public void initKsession(long sessionId,
+ KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf) {
+ if ( !doRollback && this.ksession != null ) {
+ return;
+ // nothing to initialise
+ }
+
+ this.doRollback = false;
+
+ try {
+ this.sessionInfo = jpm.getApplicationScopedPersistenceContext().find( SessionInfo.class,
+ sessionId );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Could not find session data for id " + sessionId,
+ e );
+ }
+
+ if ( sessionInfo == null ) {
+ throw new RuntimeException( "Could not find session data for id " + sessionId );
+ }
+
+ if ( this.marshallingHelper == null ) {
+ // this should only happen when this class is first constructed
+ this.marshallingHelper = new SessionMarshallingHelper( kbase,
+ conf,
+ env );
+ }
+
+ this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
+
+ // if this.ksession is null, it'll create a new one, else it'll use the existing one
+ this.ksession = this.marshallingHelper.loadSnapshot( this.sessionInfo.getData(),
+ this.ksession );
+
+ // update the session id to be the same as the session info id
+ ((InternalKnowledgeRuntime) ksession).setId( this.sessionInfo.getId() );
+
+ ((InternalKnowledgeRuntime) this.ksession).setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
+
+ ((JpaJDKTimerService) ((InternalKnowledgeRuntime) ksession).getTimerService()).setCommandService( this );
+
+ if ( this.kContext == null ) {
+ // this should only happen when this class is first constructed
+ this.kContext = new KnowledgeCommandContext( new ContextImpl( "ksession",
+ null ),
+ null,
+ null,
+ this.ksession,
+ null );
+ }
+
+ }
+
+ public void initTransactionManager(Environment env) {
+ Object tm = env.get( EnvironmentName.TRANSACTION_MANAGER );
+ if ( tm != null && tm.getClass().getName().startsWith( "org.springframework" ) ) {
+ try {
+ Class<?> cls = Class.forName( "org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager" );
+ Constructor<?> con = cls.getConstructors()[0];
+ this.txm = (TransactionManager) con.newInstance( tm );
+ logger.debug( "Instantiating DroolsSpringTransactionManager" );
+
+ if ( tm.getClass().getName().toLowerCase().contains( "jpa" ) ) {
+ // configure spring for JPA and local transactions
+ cls = Class.forName( "org.drools.container.spring.beans.persistence.DroolsSpringJpaManager" );
+ con = cls.getConstructors()[0];
+ this.jpm = ( PersistenceContextManager) con.newInstance( new Object[] { this.env } );
+ } else {
+ // configure spring for JPA and distributed transactions
+ }
+ } catch ( Exception e ) {
+ logger.warn( "Could not instatiate DroolsSpringTransactionManager" );
+ throw new RuntimeException( "Could not instatiate org.drools.container.spring.beans.persistence.DroolsSpringTransactionManager", e );
+ }
+ } else {
+ logger.debug( "Instantiating JtaTransactionManager" );
+ this.txm = new JtaTransactionManager( env.get( EnvironmentName.TRANSACTION ),
+ env.get( EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY ),
+ tm );
+ this.jpm = new JpaPersistenceContextManager(this.env);
+ }
+ }
+
+ public static class EndOperationListenerImpl
+ implements
+ EndOperationListener {
+ private SessionInfo info;
+
+ public EndOperationListenerImpl(SessionInfo info) {
+ this.info = info;
+ }
+
+ public void endOperation(InternalKnowledgeRuntime kruntime) {
+ this.info.setLastModificationDate( new Date( kruntime.getLastIdleTimestamp() ) );
+ }
+ }
+
+ public Context getContext() {
+ return this.kContext;
+ }
+
+ public synchronized <T> T execute(Command<T> command) {
+ try {
+ txm.begin();
+
+ initKsession( this.sessionInfo.getId(),
+ this.marshallingHelper.getKbase(),
+ this.marshallingHelper.getConf() );
+
+ this.jpm.beginCommandScopedEntityManager();
+
+ //this.appScopedEntityManager.joinTransaction();
+ registerRollbackSync();
+
+ T result = ((GenericCommand<T>) command).execute( this.kContext );
+
+ txm.commit();
+
+ return result;
+
+ }catch (RuntimeException re){
+ rollbackTransaction(re);
+ throw re;
+ } catch ( Exception t1 ) {
+ rollbackTransaction(t1);
+ throw new RuntimeException("Wrapped exception see cause", t1);
+ } finally {
+ if ( command instanceof DisposeCommand ) {
+ this.jpm.dispose();
+ }
+ }
+ }
+
+ private void rollbackTransaction(Exception t1) {
+ try {
+ logger.error( "Could not commit session", t1 );
+ txm.rollback();
+ } catch ( Exception t2 ) {
+ logger.error( "Could not rollback", t2 );
+ throw new RuntimeException( "Could not commit session or rollback", t2 );
+ }
+ }
+
+ public void dispose() {
+ if ( ksession != null ) {
+ ksession.dispose();
+ }
+ }
+
+ public long getSessionId() {
+ return sessionInfo.getId();
+ }
+
+ private void registerRollbackSync() {
+ if ( synchronizations.get( this ) == null ) {
+ txm.registerTransactionSynchronization( new SynchronizationImpl( this ) );
+ synchronizations.put( this,
+ this );
+ }
+
+ }
+
+ private static class SynchronizationImpl
+ implements
+ TransactionSynchronization {
+
+ SingleSessionCommandService service;
+
+ public SynchronizationImpl(SingleSessionCommandService service) {
+ this.service = service;
+ }
+
+ public void afterCompletion(int status) {
+ if ( status != TransactionManager.STATUS_COMMITTED ) {
+ this.service.rollback();
+ }
+
+ // always cleanup thread local whatever the result
+ SingleSessionCommandService.synchronizations.remove( this.service );
+
+ this.service.jpm.endCommandScopedEntityManager();
+
+ StatefulKnowledgeSession ksession = this.service.ksession;
+ // clean up cached process and work item instances
+ if ( ksession != null ) {
+ ((InternalKnowledgeRuntime) ksession).getProcessRuntime().clearProcessInstances();
+ ((JPAWorkItemManager) ksession.getWorkItemManager()).clearWorkItems();
+ }
+
+ }
+
+ public void beforeCompletion() {
+
+ }
+
+ }
+
+ private void rollback() {
+ this.doRollback = true;
+ }
+}
\ No newline at end of file
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionManager.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/TransactionManager.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionManager.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,30 @@
+package org.drools.persistence;
+
+
+public interface TransactionManager {
+ /** Completion status in case of proper commit */
+ int STATUS_COMMITTED = 0;
+
+ /** Completion status in case of proper rollback */
+ int STATUS_ROLLEDBACK = 1;
+
+ /** Completion status in case of heuristic mixed completion or system errors */
+ int STATUS_UNKNOWN = 2;
+
+ /** No existing transaction is associated with this threat */
+ int STATUS_NO_TRANSACTION = 3;
+
+ /** Transaction is Active */
+ int STATUS_ACTIVE = 4;
+
+ int getStatus();
+
+ void begin();
+
+ void commit();
+
+ void rollback();
+
+ void registerTransactionSynchronization(TransactionSynchronization ts);
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronization.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/TransactionSynchronization.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronization.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronization.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,8 @@
+package org.drools.persistence;
+
+public interface TransactionSynchronization {
+
+ void beforeCompletion();
+
+ void afterCompletion(int status);
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronizationRegistryHelper.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/TransactionSynchronizationRegistryHelper.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronizationRegistryHelper.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/TransactionSynchronizationRegistryHelper.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,12 @@
+package org.drools.persistence;
+
+import javax.transaction.TransactionSynchronizationRegistry;
+
+import org.drools.persistence.jta.JtaTransactionSynchronizationAdapter;
+
+public class TransactionSynchronizationRegistryHelper {
+ public static void registerTransactionSynchronization(final Object tsro, final TransactionSynchronization ts) {
+ TransactionSynchronizationRegistry tsr = ( TransactionSynchronizationRegistry ) tsro;
+ tsr.registerInterposedSynchronization( new JtaTransactionSynchronizationAdapter( ts ) );
+ }
+}
Added: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/SessionInfo.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/SessionInfo.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/SessionInfo.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,81 @@
+package org.drools.persistence.info;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.drools.persistence.EntityInfo;
+import org.drools.persistence.SessionMarshallingHelper;
+
+ at Entity
+public class SessionInfo implements EntityInfo {
+ private @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ long id;
+
+ @Version
+ @Column(name = "OPTLOCK")
+ private int version;
+
+ private Date startDate;
+ private Date lastModificationDate;
+
+ @Lob
+ private byte[] rulesByteArray;
+
+ @Transient
+ SessionMarshallingHelper helper;
+
+ public SessionInfo() {
+ this.startDate = new Date();
+ }
+
+ public long getId() {
+ return this.id;
+ }
+
+ public int getVersion() {
+ return this.version;
+ }
+
+ public void setJPASessionMashallingHelper(SessionMarshallingHelper helper) {
+ this.helper = helper;
+ }
+
+ public SessionMarshallingHelper getJPASessionMashallingHelper() {
+ return helper;
+ }
+
+ public byte[] getData() {
+ return this.rulesByteArray;
+ }
+
+ public Date getStartDate() {
+ return this.startDate;
+ }
+
+ public Date getLastModificationDate() {
+ return this.lastModificationDate;
+ }
+
+ public void setLastModificationDate(Date date) {
+ this.lastModificationDate = date;
+ }
+
+
+ @PrePersist
+ @PreUpdate
+ public void update() {
+ this.rulesByteArray = this.helper.getSnapshot();
+ }
+
+}
Added: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/WorkItemInfo.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/WorkItemInfo.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/info/WorkItemInfo.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,127 @@
+package org.drools.persistence.info;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.PreUpdate;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.drools.marshalling.impl.InputMarshaller;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
+import org.drools.marshalling.impl.OutputMarshaller;
+import org.drools.persistence.EntityInfo;
+import org.drools.process.instance.WorkItem;
+import org.drools.runtime.Environment;
+
+ at Entity
+public class WorkItemInfo implements EntityInfo {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long workItemId;
+
+ @Version
+ @Column(name = "OPTLOCK")
+ private int version;
+
+ private String name;
+ private Date creationDate;
+ private long processInstanceId;
+ private long state;
+ private @Lob
+ byte[] workItemByteArray;
+ private @Transient
+ WorkItem workItem;
+
+ private @Transient
+ Environment env;
+
+ protected WorkItemInfo() {
+ }
+
+ public WorkItemInfo(WorkItem workItem, Environment env) {
+ this.workItem = workItem;
+ this.name = workItem.getName();
+ this.creationDate = new Date();
+ this.processInstanceId = workItem.getProcessInstanceId();
+ this.env = env;
+ }
+
+ public long getId() {
+ return workItemId;
+ }
+
+ public int getVersion() {
+ return this.version;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ public long getProcessInstanceId() {
+ return processInstanceId;
+ }
+
+ public long getState() {
+ return state;
+ }
+
+ public WorkItem getWorkItem(Environment env) {
+ this.env = env;
+ if ( workItem == null ) {
+ try {
+ ByteArrayInputStream bais = new ByteArrayInputStream( workItemByteArray );
+ MarshallerReaderContext context = new MarshallerReaderContext( bais,
+ null,
+ null,
+ null,
+ env);
+ workItem = InputMarshaller.readWorkItem( context );
+ context.close();
+ } catch ( IOException e ) {
+ e.printStackTrace();
+ throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage() );
+ }
+ }
+ return workItem;
+ }
+
+
+
+ @PreUpdate
+ public void update() {
+ this.state = workItem.getState();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ MarshallerWriteContext context = new MarshallerWriteContext( baos,
+ null,
+ null,
+ null,
+ null,
+ this.env);
+
+ OutputMarshaller.writeWorkItem( context,
+ workItem );
+
+ context.close();
+ this.workItemByteArray = baos.toByteArray();
+ } catch ( IOException e ) {
+ throw new IllegalArgumentException( "IOException while storing workItem " + workItem.getId() + ": " + e.getMessage() );
+ }
+ }
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaJDKTimerService.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaJDKTimerService.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaJDKTimerService.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,106 @@
+/**
+ * Copyright 2010 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.
+ */
+
+package org.drools.persistence.jpa;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+
+import org.drools.command.CommandService;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.time.Job;
+import org.drools.time.JobContext;
+import org.drools.time.Trigger;
+import org.drools.time.impl.JDKTimerService;
+
+/**
+ * A default Scheduler implementation that uses the
+ * JDK built-in ScheduledThreadPoolExecutor as the
+ * scheduler and the system clock as the clock.
+ *
+ */
+public class JpaJDKTimerService extends JDKTimerService {
+
+ private CommandService commandService;
+
+ public void setCommandService(CommandService commandService) {
+ this.commandService = commandService;
+ }
+
+ public JpaJDKTimerService() {
+ this(1);
+ }
+
+ public JpaJDKTimerService(int size) {
+ super(size);
+ }
+
+ protected Callable<Void> createCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ return new JpaJDKCallableJob( job,
+ ctx,
+ trigger,
+ handle,
+ this.scheduler );
+ }
+
+ public class JpaJDKCallableJob extends JDKCallableJob {
+
+ public JpaJDKCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ super(job, ctx, trigger, handle, scheduler);
+ }
+
+ public Void call() throws Exception {
+ JDKCallableJobCommand command = new JDKCallableJobCommand(this);
+ commandService.execute(command);
+ return null;
+ }
+
+ private Void internalCall() throws Exception {
+ return super.call();
+ }
+ }
+
+ public static class JDKCallableJobCommand implements GenericCommand<Void> {
+
+ private static final long serialVersionUID = 4L;
+
+ private JpaJDKCallableJob job;
+
+ public JDKCallableJobCommand(JpaJDKCallableJob job) {
+ this.job = job;
+ }
+
+ public Void execute(Context context) {
+ try {
+ return job.internalCall();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ }
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContextManager.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/DefaultJpaManager.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContextManager.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContextManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,93 @@
+package org.drools.persistence.jpa;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.drools.persistence.PersistenceContext;
+import org.drools.persistence.PersistenceContextManager;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+
+public class JpaPersistenceContextManager
+ implements
+ PersistenceContextManager {
+ Environment env;
+
+ private EntityManagerFactory emf;
+
+ private EntityManager appScopedEntityManager;
+ private EntityManager cmdScopedEntityManager;
+
+ private boolean internalAppScopedEntityManager;
+ private boolean internalCmdScopedEntityManager;
+
+ public JpaPersistenceContextManager(Environment env) {
+ this.env = env;
+ this.emf = ( EntityManagerFactory ) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
+ }
+
+ public PersistenceContext getApplicationScopedPersistenceContext() {
+ if ( this.appScopedEntityManager == null ) {
+ // Use the App scoped EntityManager if the user has provided it, and it is open.
+ this.appScopedEntityManager = (EntityManager) this.env.get( EnvironmentName.APP_SCOPED_ENTITY_MANAGER );
+ if ( this.appScopedEntityManager != null && !this.appScopedEntityManager.isOpen() ) {
+ throw new RuntimeException("Provided APP_SCOPED_ENTITY_MANAGER is not open");
+ }
+
+ if ( this.appScopedEntityManager == null ) {
+ internalAppScopedEntityManager = true;
+ this.appScopedEntityManager = this.emf.createEntityManager();
+
+ this.env.set( EnvironmentName.APP_SCOPED_ENTITY_MANAGER,
+ this.appScopedEntityManager );
+ } else {
+ internalAppScopedEntityManager = false;
+ }
+ }
+ return new JpaPersistenceContext( appScopedEntityManager );
+ }
+
+ public PersistenceContext getCommandScopedPersistenceContext() {
+ return new JpaPersistenceContext( this.cmdScopedEntityManager );
+ }
+
+ public void beginCommandScopedEntityManager() {
+ EntityManager cmdScopedEntityManager = (EntityManager) env.get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+ if ( cmdScopedEntityManager == null || !cmdScopedEntityManager.isOpen() ) {
+ internalCmdScopedEntityManager = true;
+ cmdScopedEntityManager = this.emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
+ this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER,
+ cmdScopedEntityManager );
+ } else {
+ internalCmdScopedEntityManager = false;
+ }
+ cmdScopedEntityManager.joinTransaction();
+ appScopedEntityManager.joinTransaction();
+ }
+
+ public void endCommandScopedEntityManager() {
+ if ( this.internalCmdScopedEntityManager ) {
+ this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER,
+ null );
+ }
+ }
+
+ public void dispose() {
+ if ( this.internalAppScopedEntityManager ) {
+ if ( this.appScopedEntityManager != null && this.appScopedEntityManager.isOpen() ) {
+ this.appScopedEntityManager.close();
+ }
+ this.internalAppScopedEntityManager = false;
+ this.env.set( EnvironmentName.APP_SCOPED_ENTITY_MANAGER, null );
+ }
+
+ if ( this.internalCmdScopedEntityManager ) {
+ if ( this.cmdScopedEntityManager != null && this.cmdScopedEntityManager.isOpen() ) {
+ this.cmdScopedEntityManager.close();
+ }
+ this.internalCmdScopedEntityManager = false;
+ this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER, null );
+ }
+ }
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/KnowledgeStoreServiceImpl.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/KnowledgeStoreServiceImpl.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/KnowledgeStoreServiceImpl.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,192 @@
+package org.drools.persistence.jpa;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.SessionConfiguration;
+import org.drools.command.CommandService;
+import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
+import org.drools.persistence.SingleSessionCommandService;
+import org.drools.persistence.jpa.KnowledgeStoreService;
+import org.drools.persistence.jpa.processinstance.JPAWorkItemManagerFactory;
+import org.drools.process.instance.WorkItemManagerFactory;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.time.TimerService;
+
+public class KnowledgeStoreServiceImpl
+ implements
+ KnowledgeStoreService {
+
+ private Class< ? extends CommandExecutor> commandServiceClass;
+ private Class< ? extends WorkItemManagerFactory> workItemManagerFactoryClass;
+ private Class< ? extends TimerService> timerServiceClass;
+
+ private Properties configProps = new Properties();
+
+ public KnowledgeStoreServiceImpl() {
+ setDefaultImplementations();
+ }
+
+ protected void setDefaultImplementations() {
+ setCommandServiceClass( SingleSessionCommandService.class );
+ setProcessInstanceManagerFactoryClass( "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ setWorkItemManagerFactoryClass( JPAWorkItemManagerFactory.class );
+ setProcessSignalManagerFactoryClass( "org.jbpm.persistence.processinstance.JPASignalManagerFactory" );
+ setTimerServiceClass( JpaJDKTimerService.class );
+ }
+
+ public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration configuration,
+ Environment environment) {
+ if ( configuration == null ) {
+ configuration = new SessionConfiguration();
+ }
+
+ if ( environment == null ) {
+ throw new IllegalArgumentException( "Environment cannot be null" );
+ }
+
+ return new CommandBasedStatefulKnowledgeSession( (CommandService) buildCommanService( kbase,
+ mergeConfig( configuration ),
+ environment ) );
+ }
+
+ public StatefulKnowledgeSession loadStatefulKnowledgeSession(long id,
+ KnowledgeBase kbase,
+ KnowledgeSessionConfiguration configuration,
+ Environment environment) {
+ if ( configuration == null ) {
+ configuration = new SessionConfiguration();
+ }
+
+ if ( environment == null ) {
+ throw new IllegalArgumentException( "Environment cannot be null" );
+ }
+
+ return new CommandBasedStatefulKnowledgeSession( (CommandService) buildCommanService( id,
+ kbase,
+ mergeConfig( configuration ),
+ environment ) );
+ }
+
+ private CommandExecutor buildCommanService(long sessionId,
+ KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+
+ try {
+ Class< ? extends CommandExecutor> serviceClass = getCommandServiceClass();
+ Constructor< ? extends CommandExecutor> constructor = serviceClass.getConstructor( int.class,
+ KnowledgeBase.class,
+ KnowledgeSessionConfiguration.class,
+ Environment.class );
+ return constructor.newInstance( sessionId,
+ kbase,
+ conf,
+ env );
+ } catch ( SecurityException e ) {
+ throw new IllegalStateException( e );
+ } catch ( NoSuchMethodException e ) {
+ throw new IllegalStateException( e );
+ } catch ( IllegalArgumentException e ) {
+ throw new IllegalStateException( e );
+ } catch ( InstantiationException e ) {
+ throw new IllegalStateException( e );
+ } catch ( IllegalAccessException e ) {
+ throw new IllegalStateException( e );
+ } catch ( InvocationTargetException e ) {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ private CommandExecutor buildCommanService(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+
+ Class< ? extends CommandExecutor> serviceClass = getCommandServiceClass();
+ try {
+ Constructor< ? extends CommandExecutor> constructor = serviceClass.getConstructor( KnowledgeBase.class,
+ KnowledgeSessionConfiguration.class,
+ Environment.class );
+ return constructor.newInstance( kbase,
+ conf,
+ env );
+ } catch ( SecurityException e ) {
+ throw new IllegalStateException( e );
+ } catch ( NoSuchMethodException e ) {
+ throw new IllegalStateException( e );
+ } catch ( IllegalArgumentException e ) {
+ throw new IllegalStateException( e );
+ } catch ( InstantiationException e ) {
+ throw new IllegalStateException( e );
+ } catch ( IllegalAccessException e ) {
+ throw new IllegalStateException( e );
+ } catch ( InvocationTargetException e ) {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ private KnowledgeSessionConfiguration mergeConfig(KnowledgeSessionConfiguration configuration) {
+ ((SessionConfiguration) configuration).addProperties( configProps );
+ return configuration;
+ }
+
+ public long getStatefulKnowledgeSessionId(StatefulKnowledgeSession ksession) {
+ if ( ksession instanceof CommandBasedStatefulKnowledgeSession ) {
+ SingleSessionCommandService commandService = (SingleSessionCommandService) ((CommandBasedStatefulKnowledgeSession) ksession).getCommandService();
+ return commandService.getSessionId();
+ }
+ throw new IllegalArgumentException( "StatefulKnowledgeSession must be an a CommandBasedStatefulKnowledgeSession" );
+ }
+
+ public void setCommandServiceClass(Class< ? extends CommandExecutor> commandServiceClass) {
+ if ( commandServiceClass != null ) {
+ this.commandServiceClass = commandServiceClass;
+ configProps.put( "drools.commandService",
+ commandServiceClass.getName() );
+ }
+ }
+
+ public Class< ? extends CommandExecutor> getCommandServiceClass() {
+ return commandServiceClass;
+ }
+
+ public void setTimerServiceClass(Class< ? extends TimerService> timerServiceClass) {
+ if ( timerServiceClass != null ) {
+ this.timerServiceClass = timerServiceClass;
+ configProps.put( "drools.timerService",
+ timerServiceClass.getName() );
+ }
+ }
+
+ public Class< ? extends TimerService> getTimerServiceClass() {
+ return timerServiceClass;
+ }
+
+ public void setProcessInstanceManagerFactoryClass(String processInstanceManagerFactoryClass) {
+ configProps.put( "drools.processInstanceManagerFactory",
+ processInstanceManagerFactoryClass );
+ }
+
+ public void setWorkItemManagerFactoryClass(Class< ? extends WorkItemManagerFactory> workItemManagerFactoryClass) {
+ if ( workItemManagerFactoryClass != null ) {
+ this.workItemManagerFactoryClass = workItemManagerFactoryClass;
+ configProps.put( "drools.workItemManagerFactory",
+ workItemManagerFactoryClass.getName() );
+ }
+ }
+
+ public Class< ? extends WorkItemManagerFactory> getWorkItemManagerFactoryClass() {
+ return workItemManagerFactoryClass;
+ }
+
+ public void setProcessSignalManagerFactoryClass(String processSignalManagerFactoryClass) {
+ configProps.put( "drools.processSignalManagerFactory",
+ processSignalManagerFactoryClass );
+ }
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance)
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java 2010-12-14 00:22:42 UTC (rev 36401)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,4 +1,4 @@
-package org.drools.persistence.processinstance;
+package org.drools.persistence.jpa.processinstance;
import java.util.HashMap;
import java.util.HashSet;
@@ -9,6 +9,7 @@
import org.drools.WorkItemHandlerNotFoundException;
import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.persistence.info.WorkItemInfo;
import org.drools.process.instance.WorkItem;
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.impl.WorkItemImpl;
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManagerFactory.java 2010-12-14 00:22:42 UTC (rev 36401)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/JPAWorkItemManagerFactory.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,4 +1,4 @@
-package org.drools.persistence.processinstance;
+package org.drools.persistence.jpa.processinstance;
import org.drools.common.InternalKnowledgeRuntime;
import org.drools.process.instance.WorkItemManager;
Deleted: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/WorkItemInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java 2010-12-14 00:22:42 UTC (rev 36401)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/processinstance/WorkItemInfo.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,126 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.PreUpdate;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-
-import org.drools.marshalling.impl.InputMarshaller;
-import org.drools.marshalling.impl.MarshallerReaderContext;
-import org.drools.marshalling.impl.MarshallerWriteContext;
-import org.drools.marshalling.impl.OutputMarshaller;
-import org.drools.process.instance.WorkItem;
-import org.drools.runtime.Environment;
-
- at Entity
-public class WorkItemInfo {
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private long workItemId;
-
- @Version
- @Column(name = "OPTLOCK")
- private int version;
-
- private String name;
- private Date creationDate;
- private long processInstanceId;
- private long state;
- private @Lob
- byte[] workItemByteArray;
- private @Transient
- WorkItem workItem;
-
- private @Transient
- Environment env;
-
- protected WorkItemInfo() {
- }
-
- public WorkItemInfo(WorkItem workItem, Environment env) {
- this.workItem = workItem;
- this.name = workItem.getName();
- this.creationDate = new Date();
- this.processInstanceId = workItem.getProcessInstanceId();
- this.env = env;
- }
-
- public long getId() {
- return workItemId;
- }
-
- public int getVersion() {
- return this.version;
- }
-
- public String getName() {
- return name;
- }
-
- public Date getCreationDate() {
- return creationDate;
- }
-
- public long getProcessInstanceId() {
- return processInstanceId;
- }
-
- public long getState() {
- return state;
- }
-
- public WorkItem getWorkItem(Environment env) {
- this.env = env;
- if ( workItem == null ) {
- try {
- ByteArrayInputStream bais = new ByteArrayInputStream( workItemByteArray );
- MarshallerReaderContext context = new MarshallerReaderContext( bais,
- null,
- null,
- null,
- env);
- workItem = InputMarshaller.readWorkItem( context );
- context.close();
- } catch ( IOException e ) {
- e.printStackTrace();
- throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage() );
- }
- }
- return workItem;
- }
-
-
-
- @PreUpdate
- public void update() {
- this.state = workItem.getState();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- MarshallerWriteContext context = new MarshallerWriteContext( baos,
- null,
- null,
- null,
- null,
- this.env);
-
- OutputMarshaller.writeWorkItem( context,
- workItem );
-
- context.close();
- this.workItemByteArray = baos.toByteArray();
- } catch ( IOException e ) {
- throw new IllegalArgumentException( "IOException while storing workItem " + workItem.getId() + ": " + e.getMessage() );
- }
- }
-}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionManager.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JtaTransactionManager.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionManager.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionManager.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,229 @@
+package org.drools.persistence.jta;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+
+import org.drools.persistence.TransactionManager;
+import org.drools.persistence.TransactionSynchronization;
+import org.drools.persistence.TransactionSynchronizationRegistryHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JtaTransactionManager
+ implements
+ TransactionManager {
+
+ Logger logger = LoggerFactory.getLogger( getClass() );
+
+ public static final String DEFAULT_USER_TRANSACTION_NAME = "java:comp/UserTransaction";
+
+ public static final String[] FALLBACK_TRANSACTION_MANAGER_NAMES = new String[]{"java:comp/TransactionManager", "java:appserver/TransactionManager", "java:pm/TransactionManager", "java:/TransactionManager"};
+
+ /**
+ * Standard Java EE 5 JNDI location for the JTA TransactionSynchronizationRegistry.
+ * Autodetected when available.
+ */
+ public static final String DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME = "java:comp/TransactionSynchronizationRegistry";
+
+ private static final String TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME = "javax.transaction.TransactionSynchronizationRegistry";
+
+ private static Class< ? > transactionSynchronizationRegistryClass;
+
+ static {
+ ClassLoader cl = JtaTransactionManager.class.getClassLoader();
+ try {
+ transactionSynchronizationRegistryClass = cl.loadClass( TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME );
+ } catch ( ClassNotFoundException e ) {
+ // JTA 1.1 API not available... simply proceed the JTA 1.0 way.
+ }
+ }
+
+ UserTransaction ut;
+ Object tsr;
+ javax.transaction.TransactionManager tm;
+
+ private boolean localTransaction;
+
+ public JtaTransactionManager(Object ut,
+ Object tsr,
+ Object tm) {
+ if ( ut instanceof UserTransaction ) {
+ this.ut = ( UserTransaction ) ut;
+ } else {
+ this.ut = ( UserTransaction ) ( (ut != null) ? ut : findUserTransaction() );
+ }
+
+ if ( tm instanceof javax.transaction.TransactionManager ) {
+ this.tm = ( javax.transaction.TransactionManager ) tm;
+ } else {
+ this.tm = ( javax.transaction.TransactionManager ) ( (tm != null) ? tm : findTransactionManager( this.ut ) );
+ }
+ this.tsr = (tsr != null) ? tsr : findTransactionSynchronizationRegistry( this.ut,
+ this.tm );
+ }
+
+ protected javax.transaction.TransactionManager findTransactionManager(UserTransaction ut) {
+ if ( ut instanceof TransactionManager ) {
+ logger.debug( "JTA UserTransaction object [{}] implements TransactionManager",
+ ut );
+ return (javax.transaction.TransactionManager) ut;
+ }
+
+ InitialContext context = null;
+
+ try {
+ context = new InitialContext();
+ } catch ( NamingException ex ) {
+ logger.debug( "Could not initialise JNDI InitialContext",
+ ex );
+ return null;
+ }
+
+ // Check fallback JNDI locations.
+ for ( String jndiName : FALLBACK_TRANSACTION_MANAGER_NAMES ) {
+ try {
+ javax.transaction.TransactionManager tm = (javax.transaction.TransactionManager) context.lookup( jndiName );
+ logger.debug( "JTA TransactionManager found at fallback JNDI location [{}]",
+ jndiName );
+ return tm;
+ } catch ( NamingException ex ) {
+ logger.debug( "No JTA TransactionManager found at fallback JNDI location [{}]",
+ jndiName,
+ ex );
+ }
+ }
+
+ // OK, so no JTA TransactionManager is available...
+ return null;
+ }
+
+ protected UserTransaction findUserTransaction() {
+ try {
+ InitialContext context = new InitialContext();
+ return (UserTransaction) context.lookup( DEFAULT_USER_TRANSACTION_NAME );
+ } catch ( NamingException ex ) {
+ logger.debug( "No UserTransaction found at JNDI location [{}]",
+ DEFAULT_USER_TRANSACTION_NAME,
+ ex );
+ return null;
+ }
+ }
+
+ protected Object findTransactionSynchronizationRegistry(UserTransaction ut,
+ javax.transaction.TransactionManager tm) {
+
+ if ( transactionSynchronizationRegistryClass == null ) {
+ // JTA 1.1 API not present - skip.
+ logger.debug( "JTA 1.1 [{}] API not available",
+ TRANSACTION_SYNCHRONIZATION_REGISTRY_CLASS_NAME );
+ return null;
+ }
+
+ String jndiName = DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME;
+ try {
+ InitialContext context = new InitialContext();
+ context.lookup( jndiName );
+ logger.debug( "JTA TransactionSynchronizationRegistry found at default JNDI location [{}]",
+ jndiName );
+ return tsr;
+ } catch ( NamingException ex ) {
+ logger.debug( "No JTA TransactionSynchronizationRegistry found at default JNDI location [{}]",
+ jndiName,
+ ex );
+ }
+ // Check whether the UserTransaction or TransactionManager implements it...
+ if ( transactionSynchronizationRegistryClass.isInstance( ut ) ) {
+ return ut;
+ }
+ if ( transactionSynchronizationRegistryClass.isInstance( tm ) ) {
+ return tm;
+ }
+ // OK, so no JTA 1.1 TransactionSynchronizationRegistry is available,
+ // despite the API being present...
+ return null;
+ }
+
+ public void begin() {
+ if ( getStatus() == TransactionManager.STATUS_NO_TRANSACTION ) {
+ this.localTransaction = true;
+ try {
+ this.ut.begin();
+ } catch ( Exception e ) {
+ logger.warn( "Unable to begin transaction", e);
+ throw new RuntimeException( "Unable to begin transaction",
+ e );
+ }
+ } else {
+ this.localTransaction = false;
+ }
+ }
+
+ public void commit() {
+ if ( this.localTransaction ) {
+ try {
+ this.ut.commit();
+ } catch ( Exception e ) {
+ logger.warn( "Unable to commit transaction", e);
+ throw new RuntimeException( "Unable to commit transaction",
+ e );
+ }
+ } else {
+ localTransaction = false;
+ }
+ }
+
+ public void rollback() {
+ localTransaction = false;
+ try {
+ this.ut.rollback();
+ } catch ( Exception e ) {
+ logger.warn( "Unable to rollback transaction", e);
+ throw new RuntimeException( "Unable to rollback transaction",
+ e );
+ }
+ }
+
+ public int getStatus() {
+ int s;
+ try {
+ s = this.ut.getStatus();
+ } catch ( SystemException e ) {
+ throw new RuntimeException( "Unable to get status for transaction",
+ e );
+ }
+
+ switch ( s ) {
+ case Status.STATUS_COMMITTED :
+ return TransactionManager.STATUS_COMMITTED;
+ case Status.STATUS_ROLLEDBACK :
+ return TransactionManager.STATUS_ROLLEDBACK;
+ case Status.STATUS_NO_TRANSACTION :
+ return TransactionManager.STATUS_NO_TRANSACTION;
+ default :
+ return TransactionManager.STATUS_UNKNOWN;
+ }
+ }
+
+ public void registerTransactionSynchronization(final TransactionSynchronization ts) {
+ if ( this.tsr != null ) {
+ TransactionSynchronizationRegistryHelper.registerTransactionSynchronization( this.tsr,
+ ts );
+ } else if ( this.tm != null ) {
+ try {
+ this.tm.getTransaction().registerSynchronization( new JtaTransactionSynchronizationAdapter( ts ) );
+ } catch ( Exception e ) {
+ // No JTA TransactionManager available - log a warning.
+ logger.warn( "Participating in existing JTA transaction, but no JTA TransactionManager or TransactionSychronizationRegistry available: ",
+ e );
+
+ }
+ } else {
+ // No JTA TransactionManager available - log a warning.
+ logger.warn( "Participating in existing JTA transaction, but no JTA TransactionManager or TransactionSychronizationRegistry available: " );
+ }
+ }
+
+}
Copied: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionSynchronizationAdapter.java (from rev 36401, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JtaTransactionSynchronizationAdapter.java)
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionSynchronizationAdapter.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/main/java/org/drools/persistence/jta/JtaTransactionSynchronizationAdapter.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,41 @@
+package org.drools.persistence.jta;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.drools.persistence.TransactionManager;
+import org.drools.persistence.TransactionSynchronization;
+
+public class JtaTransactionSynchronizationAdapter
+ implements
+ Synchronization {
+ TransactionSynchronization ts;
+
+ public JtaTransactionSynchronizationAdapter(TransactionSynchronization ts) {
+ super();
+ this.ts = ts;
+ }
+
+ public void afterCompletion(int status) {
+ switch ( status ) {
+ case Status.STATUS_COMMITTED :
+ this.ts.afterCompletion( TransactionManager.STATUS_COMMITTED );
+ break;
+ case Status.STATUS_ROLLEDBACK :
+ this.ts.afterCompletion( TransactionManager.STATUS_ROLLEDBACK );
+ break;
+ case Status.STATUS_NO_TRANSACTION :
+ this.ts.afterCompletion( TransactionManager.STATUS_NO_TRANSACTION );
+ break;
+ case Status.STATUS_ACTIVE :
+ this.afterCompletion( TransactionManager.STATUS_ACTIVE );
+ break;
+ default :
+ this.ts.afterCompletion( TransactionManager.STATUS_UNKNOWN );
+ }
+ }
+
+ public void beforeCompletion() {
+ this.ts.beforeCompletion();
+ }
+}
Added: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/impl/MapPersistenceTest.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/impl/MapPersistenceTest.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/map/impl/MapPersistenceTest.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,8 @@
+package org.drools.persistence.map.impl;
+
+import junit.framework.TestCase;
+
+
+public class MapPersistenceTest extends TestCase {
+
+}
Added: labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java (rev 0)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java 2010-12-16 17:50:12 UTC (rev 36434)
@@ -0,0 +1,757 @@
+package org.drools.persistence.session;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.InitialContext;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.UserTransaction;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.event.process.ProcessCompletedEvent;
+import org.drools.event.process.ProcessEvent;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.process.ProcessNodeLeftEvent;
+import org.drools.event.process.ProcessNodeTriggeredEvent;
+import org.drools.event.process.ProcessStartedEvent;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
+public class JpaPersistentStatefulSessionTest extends TestCase {
+
+ PoolingDataSource ds1;
+
+ @Override
+ protected void setUp() throws Exception {
+ ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ ds1.close();
+ }
+
+ public void testLocalTransactionPerStatement() {
+ String str = "";
+ str += "package org.drools.test\n";
+ str += "global java.util.List list\n";
+ str += "rule rule1\n";
+ str += "when\n";
+ str += " Integer(intValue > 0)\n";
+ str += "then\n";
+ str += " list.add( 1 );\n";
+ str += "end\n";
+ str += "\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+ List<?> list = new ArrayList<Object>();
+
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.insert( 1 );
+ ksession.insert( 2 );
+ ksession.insert( 3 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 3,
+ list.size() );
+
+ }
+
+ public void testUserTransactions() throws Exception {
+ String str = "";
+ str += "package org.drools.test\n";
+ str += "global java.util.List list\n";
+ str += "rule rule1\n";
+ str += "when\n";
+ str += " $i : Integer(intValue > 0)\n";
+ str += "then\n";
+ str += " list.add( $i );\n";
+ str += "end\n";
+ str += "\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+
+ UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+ ut.commit();
+
+ // EntityManager em = emf.createEntityManager();
+ // SessionInfo sInfo = em.find( SessionInfo.class, 1 );
+ // assertNotNull( sInfo );
+ // //System.out.println( "session creation : " + sInfo.getVersion() );
+ // em.close();
+
+ List<?> list = new ArrayList<Object>();
+
+ // insert and commit
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( 1 );
+ ksession.insert( 2 );
+ ut.commit();
+//
+ // insert and rollback
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 3 );
+ ut.rollback();
+
+ // check we rolled back the state changes from the 3rd insert
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.fireAllRules();
+ ut.commit();
+ assertEquals( 2,
+ list.size() );
+
+// // insert and commit
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 3 );
+ ksession.insert( 4 );
+ ut.commit();
+
+ // rollback again, this is testing that we can do consecutive rollbacks and commits without issue
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 5 );
+ ksession.insert( 6 );
+ ut.rollback();
+
+ ksession.fireAllRules();
+
+ assertEquals( 4,
+ list.size() );
+
+ // now load the ksession
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( ksession.getId(), kbase, null, env );
+
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 7 );
+ ksession.insert( 8 );
+ ut.commit();
+
+ ksession.fireAllRules();
+
+ assertEquals( 6,
+ list.size() );
+ }
+
+ public void test1() {
+
+ }
+
+// public void testPersistenceWorkItems() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// ksession.insert( "TestString" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+// WorkItem workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertEquals( 1,
+// ksession.getObjects().size() );
+// for ( Object o : ksession.getObjects() ) {
+// System.out.println( o );
+// }
+// assertNull( processInstance );
+//
+// }
+//
+// public void testPersistenceWorkItems2() throws Exception {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+// ut.begin();
+//
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// ksession.insert( "TestString" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+// WorkItem workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ut.commit();
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertEquals( 1,
+// ksession.getObjects().size() );
+// for ( Object o : ksession.getObjects() ) {
+// System.out.println( o );
+// }
+// assertNull( processInstance );
+//
+// }
+//
+// public void testPersistenceWorkItems3() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// ksession.getWorkItemManager().registerWorkItemHandler("MyWork", new SystemOutWorkItemHandler());
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// ksession.insert( "TestString" );
+// assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+// }
+//
+// public void testPersistenceState() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "StateProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+// env.set( EnvironmentName.TRANSACTION_MANAGER,
+// TransactionManagerServices.getTransactionManager() );
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.insert(new ArrayList<Object>());
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+//
+// public void testPersistenceRuleSet() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "RuleSetProcess.rf" ),
+// ResourceType.DRF );
+// kbuilder.add( new ClassPathResource( "RuleSetRules.drl" ),
+// ResourceType.DRL );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+// env.set( EnvironmentName.TRANSACTION_MANAGER,
+// TransactionManagerServices.getTransactionManager() );
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// ksession.insert(new ArrayList<Object>());
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.fireAllRules();
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+//
+// public void testPersistenceEvents() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "EventsProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+// WorkItem workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession.signalEvent("MyEvent1", null, processInstance.getId());
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession.signalEvent("MyEvent2", null, processInstance.getId());
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+//
+// public void testProcessListener() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// final List<ProcessEvent> events = new ArrayList<ProcessEvent>();
+// ProcessEventListener listener = new ProcessEventListener() {
+// public void afterNodeLeft(ProcessNodeLeftEvent event) {
+// System.out.println("After node left: " + event.getNodeInstance().getNodeName());
+// events.add(event);
+// }
+// public void afterNodeTriggered(ProcessNodeTriggeredEvent event) {
+// System.out.println("After node triggered: " + event.getNodeInstance().getNodeName());
+// events.add(event);
+// }
+// public void afterProcessCompleted(ProcessCompletedEvent event) {
+// System.out.println("After process completed");
+// events.add(event);
+// }
+// public void afterProcessStarted(ProcessStartedEvent event) {
+// System.out.println("After process started");
+// events.add(event);
+// }
+// public void beforeNodeLeft(ProcessNodeLeftEvent event) {
+// System.out.println("Before node left: " + event.getNodeInstance().getNodeName());
+// events.add(event);
+// }
+// public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
+// System.out.println("Before node triggered: " + event.getNodeInstance().getNodeName());
+// events.add(event);
+// }
+// public void beforeProcessCompleted(ProcessCompletedEvent event) {
+// System.out.println("Before process completed");
+// events.add(event);
+// }
+// public void beforeProcessStarted(ProcessStartedEvent event) {
+// System.out.println("Before process started");
+// events.add(event);
+// }
+// };
+// ksession.addEventListener(listener);
+//
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// assertEquals(12, events.size());
+// assertTrue(events.get(0) instanceof ProcessStartedEvent);
+// assertTrue(events.get(1) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(2) instanceof ProcessNodeLeftEvent);
+// assertTrue(events.get(3) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(4) instanceof ProcessNodeLeftEvent);
+// assertTrue(events.get(5) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(6) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(7) instanceof ProcessNodeLeftEvent);
+// assertTrue(events.get(8) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(9) instanceof ProcessNodeLeftEvent);
+// assertTrue(events.get(10) instanceof ProcessNodeTriggeredEvent);
+// assertTrue(events.get(11) instanceof ProcessStartedEvent);
+//
+// ksession.removeEventListener(listener);
+// events.clear();
+//
+// processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// assertTrue(events.isEmpty());
+// }
+//
+// public void testPersistenceSubProcess() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "SuperProcess.rf" ),
+// ResourceType.DRF );
+// kbuilder.add( new ClassPathResource( "SubProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// ProcessInstance processInstance = ksession.startProcess( "com.sample.SuperProcess" );
+// System.out.println( "Started process instance " + processInstance.getId() );
+//
+// TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+// WorkItem workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
+// null );
+//
+// workItem = handler.getWorkItem();
+// assertNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+//
+// public void testPersistenceVariables() {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "VariablesProcess.rf" ), ResourceType.DRF );
+// for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+// System.out.println(error);
+// }
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+//
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+//
+// Map<String, Object> parameters = new HashMap<String, Object>();
+// parameters.put("name", "John Doe");
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess", parameters );
+//
+// TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+// WorkItem workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+// assertEquals( "John Doe", workItem.getParameter("name"));
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+//
+// workItem = handler.getWorkItem();
+// assertNotNull( workItem );
+// assertEquals( "John Doe", workItem.getParameter("text"));
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+//
+// workItem = handler.getWorkItem();
+// assertNull( workItem );
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+//
+// public void testSetFocus() {
+// String str = "";
+// str += "package org.drools.test\n";
+// str += "global java.util.List list\n";
+// str += "rule rule1\n";
+// str += "agenda-group \"badfocus\"";
+// str += "when\n";
+// str += " Integer(intValue > 0)\n";
+// str += "then\n";
+// str += " list.add( 1 );\n";
+// str += "end\n";
+// str += "\n";
+//
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+// ResourceType.DRL );
+// KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//
+// if ( kbuilder.hasErrors() ) {
+// fail( kbuilder.getErrors().toString() );
+// }
+//
+// kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+// emf );
+// env.set( EnvironmentName.TRANSACTION_MANAGER,
+// TransactionManagerServices.getTransactionManager() );
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// List<?> list = new ArrayList<Object>();
+//
+// ksession.setGlobal( "list",
+// list );
+//
+// ksession.insert( 1 );
+// ksession.insert( 2 );
+// ksession.insert( 3 );
+// ksession.getAgenda().getAgendaGroup("badfocus").setFocus();
+//
+// ksession.fireAllRules();
+//
+// assertEquals( 3,
+// list.size() );
+// }
+//
+// public void testPersistenceTimer() throws Exception {
+// KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+// kbuilder.add( new ClassPathResource( "TimerProcess.rf" ),
+// ResourceType.DRF );
+// KnowledgeBase kbase = kbuilder.newKnowledgeBase();
+//
+// EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+// Environment env = KnowledgeBaseFactory.newEnvironment();
+// env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+// env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+//
+// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+// int id = ksession.getId();
+// ksession.dispose();
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+// ksession.dispose();
+//
+// assertNotNull(TestWorkItemHandler.getInstance().getWorkItem());
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNotNull( processInstance );
+//
+// Thread.sleep(2000);
+//
+// ksession.dispose();
+//
+// ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+// processInstance = ksession.getProcessInstance( processInstance.getId() );
+// assertNull( processInstance );
+// }
+
+}
Modified: labs/jbossrules/dev_tags/persistence_refactor_20101216/osgi-bundles/jxls/org.drools.osgi.wrapper.jxls-reader/maven-eclipse.xml
===================================================================
--- labs/jbossrules/dev_tags/persistence_refactor_20101216/osgi-bundles/jxls/org.drools.osgi.wrapper.jxls-reader/maven-eclipse.xml 2010-12-16 17:35:19 UTC (rev 36433)
+++ labs/jbossrules/dev_tags/persistence_refactor_20101216/osgi-bundles/jxls/org.drools.osgi.wrapper.jxls-reader/maven-eclipse.xml 2010-12-16 17:50:12 UTC (rev 36434)
@@ -1,11 +1,11 @@
-<project default="copy-resources">
- <target name="init"/>
- <target name="copy-resources" depends="init">
- <copy todir="target/classes/META-INF" filtering="false">
- <fileset dir="META-INF" includes="" excludes="**/*.java"/>
- </copy>
- <copy todir="target/classes/lib" filtering="false">
- <fileset dir="lib" includes="*.jar" excludes="**/*.java"/>
- </copy>
- </target>
+<project default="copy-resources">
+ <target name="init"/>
+ <target name="copy-resources" depends="init">
+ <copy todir="target/classes/META-INF" filtering="false">
+ <fileset dir="META-INF" includes="" excludes="**/*.java"/>
+ </copy>
+ <copy todir="target/classes/lib" filtering="false">
+ <fileset dir="lib" includes="*.jar" excludes="**/*.java"/>
+ </copy>
+ </target>
</project>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list