[jboss-cvs] JBoss Messaging SVN: r2777 - in trunk: src/main/org/jboss/jms/server and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 13 06:56:05 EDT 2007


Author: sergeypk
Date: 2007-06-13 06:56:04 -0400 (Wed, 13 Jun 2007)
New Revision: 2777

Added:
   trunk/tests/src/org/jboss/test/messaging/jms/server/ServerPeerConfigurationTest.java
Modified:
   trunk/src/etc/xmdesc/ServerPeer-xmbean.xml
   trunk/src/main/org/jboss/jms/server/ServerPeer.java
   trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java
   trunk/tests/smoke/build.xml
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ServerManagementTest.java
   trunk/tests/src/org/jboss/test/messaging/tools/jboss/MBeanConfigurationElement.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java
Log:
http://jira.jboss.com/jira/browse/JBMESSAGING-981
Also changed the ServerPeer MBean attribute name from serverPeerID to ServerPeerID.

Modified: trunk/src/etc/xmdesc/ServerPeer-xmbean.xml
===================================================================
--- trunk/src/etc/xmdesc/ServerPeer-xmbean.xml	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/src/etc/xmdesc/ServerPeer-xmbean.xml	2007-06-13 10:56:04 UTC (rev 2777)
@@ -24,6 +24,10 @@
       </parameter>
    </constructor>
 
+   <constructor>
+      <name>ServerPeer</name>
+   </constructor>
+
    <!-- Managed attributes -->
 
    <!-- plugins ObjectNames -->
@@ -110,19 +114,19 @@
       <type>int</type>
    </attribute>
 
-   <attribute access="read-only" getMethod="getServerPeerID">
+   <attribute access="read-write" getMethod="getServerPeerID" setMethod="setServerPeerID">
       <description>The ID of the ServerPeer. Must be unique per JBoss instance</description>
-      <name>serverPeerID</name>
+      <name>ServerPeerID</name>
       <type>int</type>
    </attribute>
 
-   <attribute access="read-only" getMethod="getDefaultQueueJNDIContext">
+   <attribute access="read-write" getMethod="getDefaultQueueJNDIContext" setMethod="setDefaultQueueJNDIContext">
       <description>The default JNDI context queues are bound under.</description>
       <name>DefaultQueueJNDIContext</name>
       <type>java.lang.String</type>
    </attribute>
 
-   <attribute access="read-only" getMethod="getDefaultTopicJNDIContext">
+   <attribute access="read-write" getMethod="getDefaultTopicJNDIContext" setMethod="setDefaultTopicJNDIContext">
       <description>The default JNDI context topics are bound under.</description>
       <name>DefaultTopicJNDIContext</name>
       <type>java.lang.String</type>

Modified: trunk/src/main/org/jboss/jms/server/ServerPeer.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -104,12 +104,12 @@
 
    // Attributes -----------------------------------------------------------------------------------
 
-   private int serverPeerID;
+   private int serverPeerID = -1;
    private byte[] clientAOPStack;
    private Version version;
 
-   private String defaultQueueJNDIContext;
-   private String defaultTopicJNDIContext;
+   private String defaultQueueJNDIContext = "";
+   private String defaultTopicJNDIContext = "";
 
    private boolean started;
 
@@ -168,19 +168,34 @@
    protected Queue defaultExpiryQueue;
 
    // Constructors ---------------------------------------------------------------------------------
+   public ServerPeer() throws Exception
+   {
+      log.info(this + " creating server peer");
 
+      // Some wired components need to be started here
+      securityStore = new SecurityMetadataStore();
+
+      version = Version.instance();
+      
+      failoverStatusLock = new Object();
+      
+      sessions = new ConcurrentReaderHashMap();
+
+      started = false;
+   }
+
    public ServerPeer(int serverPeerID,
                      String defaultQueueJNDIContext,
                      String defaultTopicJNDIContext) throws Exception
    {
+      this();
+
       if (serverPeerID < 0)
       {
          throw new IllegalArgumentException("ID cannot be negative");
       }
       
-      log.info(this + " creating server peer with ID " + serverPeerID);
-
-      this.serverPeerID = serverPeerID;
+      setServerPeerID(serverPeerID);
       this.defaultQueueJNDIContext = defaultQueueJNDIContext;
       this.defaultTopicJNDIContext = defaultTopicJNDIContext;
 
@@ -208,6 +223,11 @@
          {
             return;
          }
+         
+         if (serverPeerID < 0)
+         {
+            throw new IllegalStateException(" ServerPeerID not set");
+         }
 
          log.debug(this + " starting");
 
@@ -454,21 +474,6 @@
    {
       return version.getProviderMinorVersion();
    }
-
-   public int getServerPeerID()
-   {
-      return serverPeerID;
-   }
-
-   public String getDefaultQueueJNDIContext()
-   {
-      return defaultQueueJNDIContext;
-   }
-
-   public String getDefaultTopicJNDIContext()
-   {
-      return defaultTopicJNDIContext;
-   }
    
    //Read - write attributes
 
@@ -574,6 +579,50 @@
       this.defaultMessageCounterHistoryDayLimit = limit;
    }
    
+   public synchronized void setServerPeerID(int serverPeerID)
+   {
+      if (started)
+      {
+         throw new IllegalStateException("Cannot set ServerPeerID while the service is running");
+      }
+      this.serverPeerID = serverPeerID;
+   }
+
+   public int getServerPeerID()
+   {
+      return serverPeerID;
+   }
+
+   public String getDefaultQueueJNDIContext()
+   {
+      return defaultQueueJNDIContext;
+   }
+   
+   public synchronized void setDefaultQueueJNDIContext(String defaultQueueJNDIContext)
+   {
+      if (started)
+      {
+         throw new IllegalStateException("Cannot set DefaultQueueJNDIContext while the service is running");
+      }
+
+      this.defaultQueueJNDIContext = defaultQueueJNDIContext;
+   }
+
+   public String getDefaultTopicJNDIContext()
+   {
+      return defaultTopicJNDIContext;
+   }
+
+   public void setDefaultTopicJNDIContext(String defaultTopicJNDIContext)
+   {
+      if (started)
+      {
+         throw new IllegalStateException("Cannot set DefaultTopicJNDIContext while the service is running");
+      }
+
+      this.defaultTopicJNDIContext = defaultTopicJNDIContext;
+   }
+   
    public void enableMessageCounters()
    {      
       messageCounterManager.start();

Modified: trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/src/main/org/jboss/jms/server/ServerPeerMBean.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -43,6 +43,8 @@
    
    int getServerPeerID();
    
+   void setServerPeerID(int serverPeerID);
+   
    String getJMSVersion();
 
    int getJMSMajorVersion();
@@ -58,9 +60,13 @@
    int getProviderMinorVersion();
 
    String getDefaultQueueJNDIContext();
+   
+   void setDefaultQueueJNDIContext(String defaultQueueJNDIContext);
 
    String getDefaultTopicJNDIContext();
    
+   void setDefaultTopicJNDIContext(String defaultQueueJNDIContext);
+   
    void setSecurityDomain(String securityDomain) throws Exception;
 
    String getSecurityDomain();

Modified: trunk/tests/smoke/build.xml
===================================================================
--- trunk/tests/smoke/build.xml	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/tests/smoke/build.xml	2007-06-13 10:56:04 UTC (rev 2777)
@@ -620,7 +620,7 @@
 
       <java classname="org.jboss.console.twiddle.Twiddle" fork="yes" failonerror="yes"
             dir="${jboss.home}/bin">
-         <arg line="-s jnp://localhost:${jnpPort} get jboss.messaging:service=ServerPeer serverPeerID"/>
+         <arg line="-s jnp://localhost:${jnpPort} get jboss.messaging:service=ServerPeer ServerPeerID"/>
          <classpath>
             <path refid="twiddle.classpath"/>
          </classpath>

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ServerManagementTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ServerManagementTest.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ServerManagementTest.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -60,7 +60,7 @@
          ServerManagement.start(7, "all");
 
          Integer index = (Integer)ServerManagement.
-            getAttribute(7, new ObjectName("jboss.messaging:service=ServerPeer"), "serverPeerID");
+            getAttribute(7, new ObjectName("jboss.messaging:service=ServerPeer"), "ServerPeerID");
 
          assertEquals(7, index.intValue());
 
@@ -101,7 +101,7 @@
          ServerManagement.start(1, "all");
 
          Integer index = (Integer)ServerManagement.
-            getAttribute(1, new ObjectName("jboss.messaging:service=ServerPeer"), "serverPeerID");
+            getAttribute(1, new ObjectName("jboss.messaging:service=ServerPeer"), "ServerPeerID");
 
          assertEquals(1, index.intValue());
 

Added: trunk/tests/src/org/jboss/test/messaging/jms/server/ServerPeerConfigurationTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/server/ServerPeerConfigurationTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/test/messaging/jms/server/ServerPeerConfigurationTest.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -0,0 +1,152 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.messaging.jms.server;
+
+import javax.management.ObjectName;
+import javax.management.RuntimeMBeanException;
+
+import org.jboss.test.messaging.MessagingTestCase;
+import org.jboss.test.messaging.tools.jboss.MBeanConfigurationElement;
+import org.jboss.test.messaging.tools.jmx.ServiceAttributeOverrides;
+import org.jboss.test.messaging.tools.jmx.ServiceContainer;
+import org.jboss.test.messaging.tools.jmx.rmi.LocalTestServer;
+
+/**
+ * Test ServerPeer configuration.
+ *
+ * @author <a href="sergey.koshcheyev at jboss.com">Sergey Koshcheyev</a>
+ * @version <tt>$Revision$</tt>
+ * 
+ * $Id$
+ */
+public class ServerPeerConfigurationTest extends MessagingTestCase
+{
+   // Constants -----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Constructors --------------------------------------------------
+   
+   public ServerPeerConfigurationTest(String name)
+   {
+      super(name);
+   }
+
+   // Public --------------------------------------------------------
+   
+   /**
+    * Test that the ServerPeer can be configured without using
+    * the &lt;constructor&gt; element, only through attributes.
+    */
+   public void testConstructorlessConfiguration() throws Exception
+   {
+      MyLocalTestServer server = new MyLocalTestServer();
+      server.start("all", false);
+      server.stop();
+   }
+   
+   public void testServerPeerID() throws Exception
+   {
+      testConstructorArgumentAttribute("ServerPeerID", new Integer(5), new Integer(10));
+   }
+
+   public void testDefaultQueueJNDIContext() throws Exception
+   {
+      testConstructorArgumentAttribute("DefaultQueueJNDIContext", "/myqueues", "/otherqueues");
+   }
+
+   public void testDefaultTopicJNDIContext() throws Exception
+   {
+      testConstructorArgumentAttribute("DefaultTopicJNDIContext", "/mytopics", "/othertopics");
+   }
+   
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+   
+   // Private -------------------------------------------------------
+
+   private void testConstructorArgumentAttribute(String attributeName,
+         Object initialAttributeValue, Object anotherAttributeValue) throws Exception
+   {
+      MyLocalTestServer server = new MyLocalTestServer();
+      ServiceAttributeOverrides overrides = new ServiceAttributeOverrides();
+      // Can't use server.getServerPeerObjectName() here since it's not known to the server yet.
+      overrides.put(ServiceContainer.SERVER_PEER_OBJECT_NAME, attributeName, initialAttributeValue.toString());
+      
+      server.start("all", overrides, false, true);
+      try
+      {
+         ObjectName sp = server.getServerPeerObjectName();
+         Object actualValue = server.getServiceContainer()
+            .getAttribute(server.getServerPeerObjectName(), attributeName);
+
+         assertEquals(initialAttributeValue, actualValue);
+
+         try
+         {
+            server.getServiceContainer().setAttribute(sp, attributeName, anotherAttributeValue.toString());
+            fail("Should throw an exception when setting " + attributeName + " after startup");
+         }
+         catch (RuntimeMBeanException e)
+         {
+            assertTrue(e.getCause() instanceof IllegalStateException);
+         }
+      }
+      finally
+      {
+         server.stop();
+      }
+   }
+
+   // Inner classes -------------------------------------------------
+   
+   /**
+    * Configures ServerPeer through attributes instead of constructor
+    * arguments.
+    */
+   private class MyLocalTestServer extends LocalTestServer
+   {
+      @Override
+      protected void overrideServerPeerConfiguration(MBeanConfigurationElement config,
+            int serverPeerID, String defaultQueueJNDIContext, String defaultTopicJNDIContext)
+         throws Exception
+      {
+         config.removeConstructors();
+         
+         config.setAttribute("ServerPeerID", Integer.toString(serverPeerID));
+         config.setAttribute("DefaultQueueJNDIContext",
+               defaultQueueJNDIContext == null ? "/queue" : defaultQueueJNDIContext);
+         config.setAttribute("DefaultTopicJNDIContext",
+               defaultTopicJNDIContext == null? "/topic" : defaultTopicJNDIContext);
+      }
+      
+      // Make public
+      @Override
+      public ServiceContainer getServiceContainer()
+      {
+         return super.getServiceContainer();
+      }
+   }
+}


Property changes on: trunk/tests/src/org/jboss/test/messaging/jms/server/ServerPeerConfigurationTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jboss/MBeanConfigurationElement.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jboss/MBeanConfigurationElement.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jboss/MBeanConfigurationElement.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -8,6 +8,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -233,7 +234,25 @@
       c.setArgValue(paramIndex, value);
    }
 
+   /**
+    * Removes all &lt;constructor&gt; elements from the configuration.
+    */
+   public void removeConstructors()
+   {
+      if (constructors.isEmpty())
+      {
+         return;
+      }
 
+      for (Iterator iter = constructors.iterator(); iter.hasNext();)
+      {
+         ConstructorElement element = (ConstructorElement) iter.next();
+         element.node.getParentNode().removeChild(element.node);
+      }
+      
+      constructors.clear();
+   }
+
    public String toString()
    {
       return getMBeanClassName() + "[" + getObjectName() + "]";

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -133,6 +133,8 @@
 
    // Used only on testcases where Socket and HTTP are deployed at the same time
    public static ObjectName HTTP_REMOTING_OBJECT_NAME;
+   
+   public static ObjectName SERVER_PEER_OBJECT_NAME;
 
    public static String DATA_SOURCE_JNDI_NAME = "java:/DefaultDS";
    public static String TRANSACTION_MANAGER_JNDI_NAME = "java:/TransactionManager";
@@ -181,6 +183,9 @@
 
          HTTP_REMOTING_OBJECT_NAME =
          new ObjectName("jboss.messaging:service=Connector,transport=http");
+         
+         SERVER_PEER_OBJECT_NAME =
+         new ObjectName("jboss.messaging:service=ServerPeer");
       }
       catch(Exception e)
       {

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java	2007-06-13 10:50:28 UTC (rev 2776)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java	2007-06-13 10:56:04 UTC (rev 2777)
@@ -331,18 +331,9 @@
             ServiceConfigHelper.getServiceConfiguration(mdd, "ServerPeer");
 
          // overwrite the file configuration, if needed
-         serverPeerConfig.setConstructorArgumentValue(0, 0, String.valueOf(serverPeerID));
+         overrideServerPeerConfiguration(serverPeerConfig, serverPeerID, defaultQueueJNDIContext,
+               defaultTopicJNDIContext);
 
-         if (defaultQueueJNDIContext != null)
-         {
-            serverPeerConfig.setConstructorArgumentValue(0, 1, defaultQueueJNDIContext);
-         }
-         
-         if (defaultTopicJNDIContext != null)
-         {
-            serverPeerConfig.setConstructorArgumentValue(0, 2, defaultTopicJNDIContext);
-         }
-
          serverPeerObjectName = sc.registerAndConfigureService(serverPeerConfig);
 
          overrideAttributes(serverPeerObjectName, attrOverrides);
@@ -845,13 +836,31 @@
 
    // Package protected ----------------------------------------------------------------------------
 
-   ServiceContainer getServiceContainer()
+   // Protected ------------------------------------------------------------------------------------
+
+   protected ServiceContainer getServiceContainer()
    {
       return sc;
    }
 
-   // Protected ------------------------------------------------------------------------------------
+   protected void overrideServerPeerConfiguration(MBeanConfigurationElement config,
+         int serverPeerID, String defaultQueueJNDIContext, String defaultTopicJNDIContext)
+      throws Exception
+   {
+      // overwrite the file configuration, if needed
+      config.setConstructorArgumentValue(0, 0, String.valueOf(serverPeerID));
 
+      if (defaultQueueJNDIContext != null)
+      {
+         config.setConstructorArgumentValue(0, 1, defaultQueueJNDIContext);
+      }
+      
+      if (defaultTopicJNDIContext != null)
+      {
+         config.setConstructorArgumentValue(0, 2, defaultTopicJNDIContext);
+      }
+   }
+
    // Private --------------------------------------------------------------------------------------
 
    private void overrideAttributes(ObjectName on, ServiceAttributeOverrides attrOverrides)




More information about the jboss-cvs-commits mailing list