[jboss-cvs] JBossAS SVN: r108474 - in projects/metadata/ejb/trunk/src: main/java/org/jboss/metadata/ejb/spec and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 7 02:58:56 EDT 2010


Author: jaikiran
Date: 2010-10-07 02:58:56 -0400 (Thu, 07 Oct 2010)
New Revision: 108474

Modified:
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/MessageDrivenBean31MetaData.java
   projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
   projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/schedule/unit/ScheduleTestCase.java
Log:
JBMETA-301 Fix merging of timer metadata

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBean31MetaData.java	2010-10-07 06:09:21 UTC (rev 108473)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMessageDrivenBean31MetaData.java	2010-10-07 06:58:56 UTC (rev 108474)
@@ -22,6 +22,7 @@
 package org.jboss.metadata.ejb.jboss;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ejb.Schedule;
@@ -31,6 +32,7 @@
 import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.spec.MessageDrivenBean31MetaData;
 import org.jboss.metadata.ejb.spec.TimerMetaData;
+import org.jboss.metadata.merge.MergeUtil;
 
 /**
  * Metadata for EJB3.1 MDBs
@@ -85,22 +87,17 @@
       JBossMessageDrivenBean31MetaData joverride = (JBossMessageDrivenBean31MetaData) override;
       MessageDrivenBean31MetaData soriginal = (MessageDrivenBean31MetaData) original;
       
-      if(joverride != null && joverride.timers != null)
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = soriginal == null ? null : soriginal.getTimers();
+      Collection<TimerMetaData> overrideTimers = joverride == null ? null : joverride.timers;
+      if(originalTimers != null || overrideTimers != null)
       {
          if (this.timers == null)
          {
             this.timers = new ArrayList<TimerMetaData>();
          }
-         this.timers.addAll(joverride.timers);
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
       }
-      else if (soriginal != null && soriginal.getTimers() != null)
-      {
-         if (this.timers == null)
-         {
-            this.timers = new ArrayList<TimerMetaData>();
-         }
-         this.timers.addAll(soriginal.getTimers());
-      }
 
    }
    
@@ -113,23 +110,19 @@
       
       JBossMessageDrivenBean31MetaData override = overrideEjb instanceof JBossGenericBeanMetaData ? null: (JBossMessageDrivenBean31MetaData) overrideEjb;
       JBossMessageDrivenBean31MetaData original = originalEjb instanceof JBossGenericBeanMetaData ? null: (JBossMessageDrivenBean31MetaData) originalEjb;
-      
-      if(override != null && override.timers != null)
+
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = original == null ? null : original.timers;
+      Collection<TimerMetaData> overrideTimers = override == null ? null : override.timers;
+      if(originalTimers != null || overrideTimers != null)
       {
          if (this.timers == null)
          {
             this.timers = new ArrayList<TimerMetaData>();
          }
-         this.timers.addAll(override.timers);
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
       }
-      else if (original != null && original.timers != null)
-      {
-         if (this.timers == null)
-         {
-            this.timers = new ArrayList<TimerMetaData>();
-         }
-         this.timers.addAll(original.timers);
-      }
+      
    }
  
 }

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2010-10-07 06:09:21 UTC (rev 108473)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossSessionBean31MetaData.java	2010-10-07 06:58:56 UTC (rev 108474)
@@ -43,6 +43,7 @@
 import org.jboss.metadata.ejb.spec.SessionBean31MetaData;
 import org.jboss.metadata.ejb.spec.SessionType;
 import org.jboss.metadata.ejb.spec.TimerMetaData;
+import org.jboss.metadata.merge.MergeUtil;
 
 /**
  * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
@@ -364,14 +365,6 @@
          {
             this.dependsOn = joverride.dependsOn;
          }
-         if (joverride.timers != null)
-         {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(joverride.timers);
-         }
       }
       else if (soriginal != null)
       {
@@ -401,15 +394,9 @@
          {
             this.dependsOn = soriginal.dependsOn;
          }
-         if (soriginal.timers != null)
-         {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(soriginal.timers);
-         }
       }
+      // merge timers
+      this.mergeTimers(joverride, soriginal);
 
    }
 
@@ -453,14 +440,7 @@
          {
             this.dependsOn = joverride.dependsOn;
          }
-         if (joverride.timers != null)
-         {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(joverride.timers);
-         }
+        
       }
       else if (soriginal != null)
       {
@@ -490,15 +470,10 @@
          {
             this.dependsOn = soriginal.getDependsOn();
          }
-         if (soriginal.getTimers() != null)
-         {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(soriginal.getTimers());
-         }
       }
+      
+      // merge timers
+      this.mergeTimers(joverride, soriginal);
 
    }
 
@@ -510,5 +485,35 @@
       if (original != null)
          asyncMethods.addAll(original);
    }
+   
+   private void mergeTimers(JBossSessionBean31MetaData override, SessionBean31MetaData original)
+   {
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = original == null ? null : original.getTimers();
+      Collection<TimerMetaData> overrideTimers = override == null ? null : override.timers;
+      if(originalTimers != null || overrideTimers != null)
+      {
+         if (this.timers == null)
+         {
+            this.timers = new ArrayList<TimerMetaData>();
+         }
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
+      }
+   }
+   
+   private void mergeTimers(JBossSessionBean31MetaData override, JBossSessionBean31MetaData original)
+   {
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = original == null ? null : original.timers;
+      Collection<TimerMetaData> overrideTimers = override == null ? null : override.timers;
+      if(originalTimers != null || overrideTimers != null)
+      {
+         if (this.timers == null)
+         {
+            this.timers = new ArrayList<TimerMetaData>();
+         }
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
+      }
+   }
 
 }

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/MessageDrivenBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/MessageDrivenBean31MetaData.java	2010-10-07 06:09:21 UTC (rev 108473)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/MessageDrivenBean31MetaData.java	2010-10-07 06:58:56 UTC (rev 108474)
@@ -22,6 +22,7 @@
 package org.jboss.metadata.ejb.spec;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ejb.Schedule;
@@ -30,6 +31,7 @@
 
 import org.jboss.metadata.common.ejb.IScheduleTarget;
 import org.jboss.metadata.common.ejb.ITimeoutTarget;
+import org.jboss.metadata.merge.MergeUtil;
 import org.jboss.xb.annotations.JBossXmlConstants;
 import org.jboss.xb.annotations.JBossXmlType;
 
@@ -93,22 +95,17 @@
       MessageDrivenBean31MetaData overrideMetaData = (MessageDrivenBean31MetaData) override;
       MessageDrivenBean31MetaData originalMetaData = (MessageDrivenBean31MetaData) original;
       
-      if (overrideMetaData != null && overrideMetaData.timers != null)
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = original == null ? null : originalMetaData.timers;
+      Collection<TimerMetaData> overrideTimers = override == null ? null : overrideMetaData.timers;
+      if(originalTimers != null || overrideTimers != null)
       {
          if (this.timers == null)
          {
             this.timers = new ArrayList<TimerMetaData>();
          }
-         this.timers.addAll(overrideMetaData.timers);
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
       }
-      else if (originalMetaData != null && originalMetaData.timers != null)
-      {
-         if (this.timers == null)
-         {
-            this.timers = new ArrayList<TimerMetaData>();
-         }
-         this.timers.addAll(originalMetaData.timers);
-      }
       
    }
 }

Modified: projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java
===================================================================
--- projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2010-10-07 06:09:21 UTC (rev 108473)
+++ projects/metadata/ejb/trunk/src/main/java/org/jboss/metadata/ejb/spec/SessionBean31MetaData.java	2010-10-07 06:58:56 UTC (rev 108474)
@@ -36,6 +36,7 @@
 import org.jboss.metadata.common.ejb.IScheduleTarget;
 import org.jboss.metadata.common.ejb.ITimeoutTarget;
 import org.jboss.metadata.javaee.spec.EmptyMetaData;
+import org.jboss.metadata.merge.MergeUtil;
 
 /**
  * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
@@ -400,14 +401,6 @@
          {
             this.dependsOn = override.dependsOn;
          }
-         if (override.timers != null)
-         {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(override.timers);
-         }
       }
       else if (original != null)
       {
@@ -443,14 +436,23 @@
          {
             this.dependsOn = original.dependsOn;
          }
-         if (original.timers != null)
+      }
+      // merge timers
+      this.mergeTimers(override, original);
+   }
+   
+   private void mergeTimers(SessionBean31MetaData override, SessionBean31MetaData original)
+   {
+      // merge the (auto)timer metadata
+      Collection<TimerMetaData> originalTimers = original == null ? null : original.timers;
+      Collection<TimerMetaData> overrideTimers = override == null ? null : override.timers;
+      if(originalTimers != null || overrideTimers != null)
+      {
+         if (this.timers == null)
          {
-            if (this.timers == null)
-            {
-               this.timers = new ArrayList<TimerMetaData>();
-            }
-            this.timers.addAll(original.timers);
+            this.timers = new ArrayList<TimerMetaData>();
          }
+         MergeUtil.merge(this.timers, overrideTimers, originalTimers);
       }
    }
 }

Modified: projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/schedule/unit/ScheduleTestCase.java
===================================================================
--- projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/schedule/unit/ScheduleTestCase.java	2010-10-07 06:09:21 UTC (rev 108473)
+++ projects/metadata/ejb/trunk/src/test/java/org/jboss/metadata/ejb/test/schedule/unit/ScheduleTestCase.java	2010-10-07 06:58:56 UTC (rev 108474)
@@ -877,8 +877,207 @@
       }
 
    }
+   
+   /**
+    * Test that {@link SessionBean31MetaData#merge(EnterpriseBeanMetaData, EnterpriseBeanMetaData)}
+    * works as expected for timer metadata
+    */
+   @Test
+   public void testSessionBeanTimerMerge()
+   {
+      TimerMetaData nonPersistentTimer = new TimerMetaData();
+      nonPersistentTimer.setPersistent(false);
+      
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      SessionBean31MetaData original = new SessionBean31MetaData();
+      original.setEjbName("DummyBean");
+      original.addTimer(nonPersistentTimer);
+      
+      SessionBean31MetaData overriden = new SessionBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      SessionBean31MetaData mergedBean = new SessionBean31MetaData();
+      mergedBean.merge(overriden, original);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 2, mergedTimers.size());
+      
+      boolean foundPersistentTimer = false;
+      boolean foundNonPersistentTimer = false;
+      
+      for (TimerMetaData timer : mergedTimers)
+      {
+         if (timer.isPersistent())
+         {
+            foundPersistentTimer = true;
+         }
+         else
+         {
+            foundNonPersistentTimer = true;
+         }
+      }
+      Assert.assertTrue("Persistent timer not found in merged metadata", foundPersistentTimer);
+      Assert.assertTrue("Non-Persistent timer not found in merged metadata", foundNonPersistentTimer);
+      
+   }
+   
+   /**
+    * Test that {@link SessionBean31MetaData#merge(EnterpriseBeanMetaData, EnterpriseBeanMetaData)} works as 
+    * expected for timer metadata
+    */
+   @Test
+   public void testSessionBeanTimerMerge2()
+   {
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      SessionBean31MetaData original = new SessionBean31MetaData();
+      original.setEjbName("DummyBean");
+      
+      SessionBean31MetaData overriden = new SessionBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      SessionBean31MetaData mergedBean = new SessionBean31MetaData();
+      mergedBean.merge(overriden, original);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 1, mergedTimers.size());
+      Assert.assertTrue("Timer in merged metadata is not persistent", mergedTimers.get(0).isPersistent());
+   }
+   
+   /**
+    * Test that {@link JBossSessionBean31MetaData#merge(JBossEnterpriseBeanMetaData, JBossEnterpriseBeanMetaData)}
+    * works as expected for timer metadata
+    */
+   @Test
+   public void testJBossSessionBeanTimerMerge()
+   {
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      JBossSessionBean31MetaData original = new JBossSessionBean31MetaData();
+      original.setEjbName("DummyBean");
+      
+      JBossSessionBean31MetaData overriden = new JBossSessionBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      JBossSessionBean31MetaData mergedBean = new JBossSessionBean31MetaData();
+      mergedBean.merge(overriden, original);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 1, mergedTimers.size());
+      Assert.assertTrue("Timer in merged metadata is not persistent", mergedTimers.get(0).isPersistent());
+   }
+   
+   /**
+    * Test that {@link JBossMessageDrivenBean31MetaData#merge(JBossEnterpriseBeanMetaData, JBossEnterpriseBeanMetaData)}
+    * works as expected for timer metadata 
+    */
+   @Test
+   public void testJBossMessageDrivenBeanTimerMerge()
+   {
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      JBossMessageDrivenBean31MetaData original = new JBossMessageDrivenBean31MetaData();
+      original.setEjbName("DummyBean");
+      
+      JBossMessageDrivenBean31MetaData overriden = new JBossMessageDrivenBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      JBossMessageDrivenBean31MetaData mergedBean = new JBossMessageDrivenBean31MetaData();
+      mergedBean.merge(overriden, original);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 1, mergedTimers.size());
+      Assert.assertTrue("Timer in merged metadata is not persistent", mergedTimers.get(0).isPersistent());
+   }
+   
+   /**
+    * Test that {@link MessageDrivenBean31MetaData#merge(EnterpriseBeanMetaData, EnterpriseBeanMetaData)} works
+    * as expected for timer metadata
+    */
+   @Test
+   public void testMDBTimerMerge()
+   {
+      TimerMetaData nonPersistentTimer = new TimerMetaData();
+      nonPersistentTimer.setPersistent(false);
+      
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      MessageDrivenBean31MetaData original = new MessageDrivenBean31MetaData();
+      original.setEjbName("DummyBean");
+      original.addTimer(nonPersistentTimer);
+      
+      MessageDrivenBean31MetaData overriden = new MessageDrivenBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      MessageDrivenBean31MetaData mergedBean = new MessageDrivenBean31MetaData();
+      mergedBean.merge(overriden, original);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 2, mergedTimers.size());
+      
+      boolean foundPersistentTimer = false;
+      boolean foundNonPersistentTimer = false;
+      
+      for (TimerMetaData timer : mergedTimers)
+      {
+         if (timer.isPersistent())
+         {
+            foundPersistentTimer = true;
+         }
+         else
+         {
+            foundNonPersistentTimer = true;
+         }
+      }
+      Assert.assertTrue("Persistent timer not found in merged metadata", foundPersistentTimer);
+      Assert.assertTrue("Non-Persistent timer not found in merged metadata", foundNonPersistentTimer);
+      
+   }
 
    /**
+    * Test that {@link MessageDrivenBean31MetaData#merge(EnterpriseBeanMetaData, EnterpriseBeanMetaData)} works
+    * as expected for timer metadata
+    */
+   @Test
+   public void testMDBTimerMerge2()
+   {
+      TimerMetaData persistentTimer = new TimerMetaData();
+      persistentTimer.setPersistent(true);
+      
+      MessageDrivenBean31MetaData original = new MessageDrivenBean31MetaData();
+      original.setEjbName("DummyBean");
+      
+      MessageDrivenBean31MetaData overriden = new MessageDrivenBean31MetaData();
+      overriden.setEjbName("DummyBean");
+      overriden.addTimer(persistentTimer);
+      
+      MessageDrivenBean31MetaData mergedBean = new MessageDrivenBean31MetaData();
+      mergedBean.merge(original, overriden);
+      
+      List<TimerMetaData> mergedTimers = mergedBean.getTimers();
+      Assert.assertNotNull("Merged timers is null", mergedTimers);
+      Assert.assertEquals("Unexpected number of timers in merged metadata", 1, mergedTimers.size());
+      Assert.assertTrue("Timer in merged metadata is not persistent", mergedTimers.get(0).isPersistent());
+      
+      
+   }
+   /**
     * Utility method
     * @param <T>
     * @param type



More information about the jboss-cvs-commits mailing list