[jboss-svn-commits] JBL Code SVN: r11639 - in labs/jbossrules/trunk/drools-jbrms/src: test/java/org/drools/brms/server and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 3 07:28:35 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-05-03 07:28:34 -0400 (Thu, 03 May 2007)
New Revision: 11639

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-839

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-03 11:05:50 UTC (rev 11638)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-05-03 11:28:34 UTC (rev 11639)
@@ -284,14 +284,17 @@
     }    
 
     @WebRemote
-    public String checkinVersion(RuleAsset asset) throws SerializableException {  
+    public String checkinVersion(RuleAsset asset) throws SerializableException { 
+        
         log.info( "CHECKING IN asset: [" + asset.metaData.name + "] UUID: [" + asset.uuid + "]  ARCHIVED [" + asset.archived + "]");
-        
-        System.out.println("CHECKING IN asset: [" + asset.metaData.name + "] UUID: [" + asset.uuid + "]  ARCHIVED [" + asset.archived + "]");
 
         
         AssetItem repoAsset = repository.loadAssetByUUID( asset.uuid );
+        if (asset.metaData.lastModifiedDate.before( repoAsset.getLastModified().getTime())  ) {
+            throw new SerializableException("This asset was saved by someone else previously, and this version will not be overwritten.");
+        }
         
+        
         repoAsset.archiveItem( asset.archived );
         MetaData meta = asset.metaData;
         

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-05-03 11:05:50 UTC (rev 11638)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-05-03 11:28:34 UTC (rev 11639)
@@ -319,7 +319,9 @@
                                           "drl" );
         RuleAsset asset = impl.loadRuleAsset( uuid );
         impl.checkinVersion( asset ); //1
+        asset = impl.loadRuleAsset( uuid );
         impl.checkinVersion( asset ); //2
+        asset = impl.loadRuleAsset( uuid );
         impl.checkinVersion( asset ); //HEAD   
 
         TableDataResult result = impl.loadAssetHistory( uuid );
@@ -425,6 +427,26 @@
         assertEquals( "testCheckinCategory/deeper",
                       asset2.metaData.categories[2] );
 
+        
+        //now lets try a concurrent edit of an asset. 
+        //asset3 will be loaded and edited, and then asset2 will try to clobber, it, which should fail.
+        //as it is optimistically locked.
+        RuleAsset asset3 = serv.loadRuleAsset( asset2.uuid );
+        asset3.metaData.subject =  "new sub";
+        serv.checkinVersion( asset3 );
+        
+        asset3 = serv.loadRuleAsset( asset2.uuid );
+        assertFalse(asset3.metaData.versionNumber == asset2.metaData.versionNumber);
+        
+        try {
+            serv.checkinVersion( asset2 );
+            fail("should have failed optimistic lock.");
+        } catch (SerializableException e) {
+            assertNotNull(e.getMessage());
+            assertEquals(-1, e.getMessage().indexOf( "server" ));
+        }
+        
+        
     }
 
     public void testArchivePackage() throws Exception {




More information about the jboss-svn-commits mailing list