[jboss-cvs] JBoss Messaging SVN: r1943 - in trunk: src/main/org/jboss/jms/client/container and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 10 07:56:57 EST 2007


Author: ovidiu.feodorov at jboss.com
Date: 2007-01-10 07:56:46 -0500 (Wed, 10 Jan 2007)
New Revision: 1943

Added:
   trunk/src/main/org/jboss/jms/client/FailureDetector.java
   trunk/tests/etc/poison.xml
   trunk/tests/src/org/jboss/test/messaging/tools/aop/
   trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonAspect.java
   trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonInterceptor.java
Modified:
   trunk/src/main/org/jboss/jms/client/FailoverCommandCenter.java
   trunk/src/main/org/jboss/jms/client/FailoverValve.java
   trunk/src/main/org/jboss/jms/client/container/ConnectionFailureListener.java
   trunk/src/main/org/jboss/jms/client/container/FailoverValveInterceptor.java
   trunk/src/main/org/jboss/jms/server/ServerPeer.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RemoteTestServer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/Server.java
Log:
Added the framework that allow killing a cluster node in middle of an invocation.
This will allow us to test various failover edge cases.
For an example, see FailoverTest.testFailureInTheMiddleOfAnInvocation()


Modified: trunk/src/main/org/jboss/jms/client/FailoverCommandCenter.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/FailoverCommandCenter.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/client/FailoverCommandCenter.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -49,7 +49,7 @@
    {
       this.state = state;
       failoverListeners = new ArrayList();
-      valve = new FailoverValve();
+      valve = new FailoverValve(this);
    }
 
    // Public ---------------------------------------------------------------------------------------
@@ -58,9 +58,12 @@
     * Method called by failure detection components (FailoverValveInterceptors and
     * ConnectionListeners) when they have reasons to belive that a server failure occured.
     */
-   public void failureDetected(Throwable reason, JMSRemotingConnection remotingConnection)
+   public void failureDetected(Throwable reason, FailureDetector source,
+                               JMSRemotingConnection remotingConnection)
       throws Exception
    {
+      log.debug("failure detected by " + source);
+
       // generate a FAILURE_DETECTED event
       broadcastFailoverEvent(new FailoverEvent(FailoverEvent.FAILURE_DETECTED, this));
 
@@ -166,6 +169,11 @@
 
    // Package protected ----------------------------------------------------------------------------
 
+   ConnectionState getConnectionState()
+   {
+      return state;
+   }
+
    // Protected ------------------------------------------------------------------------------------
 
    // Private --------------------------------------------------------------------------------------

Modified: trunk/src/main/org/jboss/jms/client/FailoverValve.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/FailoverValve.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/client/FailoverValve.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -63,10 +63,22 @@
    private Map debugCloses;
    private Map debugEnters;
 
+   private FailoverCommandCenter fcc;
+
    // Constructors ---------------------------------------------------------------------------------
 
    public FailoverValve()
    {
+      this(null);
+   }
+
+   /**
+    * @param fcc - can be null, for an uninitialized valve.
+    */
+   public FailoverValve(FailoverCommandCenter fcc)
+   {
+      this.fcc = fcc;
+
       // We're using reentrant locks because we will need to to acquire read locks after write locks
       // have been already acquired. There is also a case when a readLock will be promoted to
       // writeLock when a failover occurs; using reentrant locks will make this usage transparent
@@ -86,6 +98,8 @@
 
    public void enter() throws InterruptedException
    {
+      if (trace) { log.trace("entering " + this); }
+
       lock.readLock().acquire();
 
       getCounter().counter++;
@@ -101,10 +115,14 @@
          getStackEnters().push(ex);
          debugEnters.put(ex, Thread.currentThread());
       }
+
+      if (trace) { log.trace("entered " + this); }
    }
 
    public void leave() throws InterruptedException
    {
+      if (trace) { log.trace("leaving " + this); }
+
       lock.readLock().release();
 
       // sanity check
@@ -123,10 +141,14 @@
          Exception ex = (Exception) getStackEnters().pop();
          debugEnters.remove(ex);
       }
+
+      if (trace) { log.trace("left " + this); }
    }
 
    public void close() throws InterruptedException
    {
+      log.debug(this + " closing ...");
+
       // Before assuming a write lock, we need to release reentrant read locks.
       // When simultaneous threads are closing a valve (as simultaneous threads are capturing a
       // failure) we won't be able to close the valve until all the readLocks are released. This
@@ -147,18 +169,21 @@
       }
 
       boolean acquired = false;
+
       do
       {
          acquired = lock.writeLock().attempt(5000);
 
          if (!acquired)
          {
-            log.warn("Couldn't close valve, trying again", new Exception());
+            log.warn(this + " could not close, trying again ...", new Exception());
             if (trace) { log.trace(debugValve()); }
          }
       }
       while (!acquired);
 
+      log.debug(this + " closed");
+
       activeCloses++;
       activeLocks++;
 
@@ -184,6 +209,8 @@
          throw new IllegalStateException("Valve not closed");
       }
 
+      log.debug(this + " opening ...");
+
       activeCloses--;
       activeLocks--;
 
@@ -201,6 +228,8 @@
          Exception ex = (Exception) getStackCloses().pop();
          debugCloses.remove(ex);
       }
+
+      log.debug(this + " opened");
    }
 
    public synchronized int getActiveLocks()
@@ -208,6 +237,15 @@
       return activeLocks;
    }
 
+   public String toString()
+   {
+      return "FailoverValve[" +
+         (fcc == null ?
+            "UNINITIALIZED" :
+            "connectionID=" + fcc.getConnectionState().getDelegate().getID()) +
+         "]";
+   }
+
    // Package protected ----------------------------------------------------------------------------
 
    // Protected ------------------------------------------------------------------------------------

Added: trunk/src/main/org/jboss/jms/client/FailureDetector.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/FailureDetector.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/client/FailureDetector.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -0,0 +1,17 @@
+/**
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.jms.client;
+
+/**
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @version <tt>$Revision$</tt>
+ * 
+ * $Id$
+ */
+public interface FailureDetector
+{
+}


Property changes on: trunk/src/main/org/jboss/jms/client/FailureDetector.java
___________________________________________________________________
Name: svn:keywords
   + Id LastChangedDate Author Revision

Modified: trunk/src/main/org/jboss/jms/client/container/ConnectionFailureListener.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/ConnectionFailureListener.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/client/container/ConnectionFailureListener.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -10,6 +10,7 @@
 import org.jboss.remoting.Client;
 import org.jboss.logging.Logger;
 import org.jboss.jms.client.FailoverCommandCenter;
+import org.jboss.jms.client.FailureDetector;
 import org.jboss.jms.client.remoting.JMSRemotingConnection;
 
 /**
@@ -21,7 +22,7 @@
  *
  * $Id$
  */
-public class ConnectionFailureListener implements ConnectionListener
+public class ConnectionFailureListener implements ConnectionListener, FailureDetector
 {
    // Constants ------------------------------------------------------------------------------------
 
@@ -53,7 +54,7 @@
       {
          log.debug(this + " is being notified of connection failure: " + throwable);
 
-         fcc.failureDetected(throwable, remotingConnection);
+         fcc.failureDetected(throwable, this, remotingConnection);
 
       }
       catch (Throwable e)

Modified: trunk/src/main/org/jboss/jms/client/container/FailoverValveInterceptor.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/FailoverValveInterceptor.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/client/container/FailoverValveInterceptor.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -8,13 +8,16 @@
 
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.jms.client.delegate.DelegateSupport;
 import org.jboss.jms.client.state.HierarchicalState;
 import org.jboss.jms.client.state.ConnectionState;
 import org.jboss.jms.client.FailoverCommandCenter;
 import org.jboss.jms.client.FailoverValve;
+import org.jboss.jms.client.FailureDetector;
 import org.jboss.jms.client.remoting.JMSRemotingConnection;
 import org.jboss.remoting.CannotConnectException;
+import org.jboss.logging.Logger;
 
 import java.io.IOException;
 
@@ -36,12 +39,16 @@
  * @version <tt>$Revision$</tt>
  * $Id$
  */
-public class FailoverValveInterceptor implements Interceptor
+public class FailoverValveInterceptor implements Interceptor, FailureDetector
 {
    // Constants ------------------------------------------------------------------------------------
 
+   private static final Logger log = Logger.getLogger(FailoverValveInterceptor.class);
+
    // Static ---------------------------------------------------------------------------------------
 
+   private static final boolean trace = log.isTraceEnabled();
+
    // Attributes -----------------------------------------------------------------------------------
 
    private DelegateSupport delegate;
@@ -94,6 +101,7 @@
       }
 
       JMSRemotingConnection remotingConnection = null;
+      String methodName = ((MethodInvocation)invocation).getMethod().getName();
 
       try
       {
@@ -105,12 +113,20 @@
       }
       catch (CannotConnectException e)
       {
-         fcc.failureDetected(e, remotingConnection);
+         log.debug(this + " putting " + methodName + "() on hold until failover completes");
+
+         fcc.failureDetected(e, this, remotingConnection);
+
+         log.debug(this + " resuming " + methodName + "()");
          return invocation.invokeNext();
       }
       catch (IOException e)
       {
-         fcc.failureDetected(e, remotingConnection);
+         log.debug(this + " putting " + methodName + "() on hold until failover completes");
+
+         fcc.failureDetected(e, this, remotingConnection);
+
+         log.debug(this + " resuming " + methodName + "()");
          return invocation.invokeNext();
       }
       catch (Throwable e)

Modified: trunk/src/main/org/jboss/jms/server/ServerPeer.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/src/main/org/jboss/jms/server/ServerPeer.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -92,9 +92,10 @@
  *
  * $Id$
  */
-public class ServerPeer extends ServiceMBeanSupport implements ClientAOPStackProvider, ServerPeerMBean
+public class ServerPeer extends ServiceMBeanSupport
+   implements ClientAOPStackProvider, ServerPeerMBean
 {
-   // Constants -----------------------------------------------------
+   // Constants ------------------------------------------------------------------------------------
 
    private static final Logger log = Logger.getLogger(ServerPeer.class);
 
@@ -102,9 +103,9 @@
    // Remoting connector
    public static final String REMOTING_JMS_SUBSYSTEM = "JMS";
 
-   // Static --------------------------------------------------------
+   // Static ---------------------------------------------------------------------------------------
 
-   // Attributes ----------------------------------------------------
+   // Attributes -----------------------------------------------------------------------------------
 
    private int serverPeerID;
    private byte[] clientAOPStack;
@@ -119,7 +120,8 @@
 
    private int objectIDSequence = 1;
 
-   //The default maximum number of delivery attempts before sending to DLQ - can be overridden on the destination
+   // The default maximum number of delivery attempts before sending to DLQ - can be overridden on
+   // the destination
    private int defaultMaxDeliveryAttempts = 10;
 
    private Object failoverStatusLock;
@@ -173,7 +175,7 @@
 
    private JMSServerInvocationHandler handler;
 
-   // Constructors --------------------------------------------------
+   // Constructors ---------------------------------------------------------------------------------
 
    public ServerPeer(int serverPeerID,
                      String defaultQueueJNDIContext,
@@ -200,7 +202,7 @@
       started = false;
    }      
 
-   // ServiceMBeanSupport overrides ---------------------------------
+   // ServiceMBeanSupport overrides ----------------------------------------------------------------
 
    public synchronized void startService() throws Exception
    {
@@ -250,7 +252,8 @@
          connectorManager = new SimpleConnectorManager();
          memoryManager = new SimpleMemoryManager();
          messageStore = new SimpleMessageStore();
-         txRepository = new TransactionRepository(persistenceManager, messageStore, transactionIDManager);
+         txRepository =
+            new TransactionRepository(persistenceManager, messageStore, transactionIDManager);
          messageCounterManager = new MessageCounterManager(queueStatsSamplePeriod);
 
          // Start the wired components
@@ -342,7 +345,7 @@
       }
    }
 
-   // JMX Attributes ------------------------------------------------
+   // JMX Attributes -------------------------------------------------------------------------------
 
    // Plugins
    
@@ -589,7 +592,7 @@
       this.defaultMessageCounterHistoryDayLimit = limit;
    }
    
-   // JMX Operations ------------------------------------------------
+   // JMX Operations -------------------------------------------------------------------------------
 
    public String createQueue(String name, String jndiName) throws Exception
    {
@@ -888,14 +891,14 @@
    }
    
 
-   // ClientAOPStackProvider implementation -------------------------------
+   // ClientAOPStackProvider implementation --------------------------------------------------------
 
    public byte[] getClientAOPStack()
    {
       return clientAOPStack;
    }
 
-   // Public --------------------------------------------------------
+   // Public ---------------------------------------------------------------------------------------
    
    public MessageCounterManager getMessageCounterManager()
    {
@@ -1230,11 +1233,11 @@
       return "ServerPeer[" + getServerPeerID() + "]";
    }
 
-   // Package protected ---------------------------------------------
+   // Package protected ----------------------------------------------------------------------------
 
-   // Protected -----------------------------------------------------
+   // Protected ------------------------------------------------------------------------------------
 
-   // Private -------------------------------------------------------
+   // Private --------------------------------------------------------------------------------------
   
    private void initializeRemoting(MBeanServer mbeanServer) throws Exception
    {
@@ -1414,7 +1417,7 @@
       return true;
    }
 
-   // Inner classes -------------------------------------------------
+   // Inner classes --------------------------------------------------------------------------------
    
    private class FailoverListener implements ReplicationListener
    {

Added: trunk/tests/etc/poison.xml
===================================================================
--- trunk/tests/etc/poison.xml	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/etc/poison.xml	2007-01-10 12:56:46 UTC (rev 1943)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE aop PUBLIC
+   "-//JBoss//DTD JBOSS AOP 1.0//EN"
+   "http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
+<aop>
+
+   <interceptor class="org.jboss.test.messaging.tools.aop.PoisonInterceptor" scope="PER_VM"/>
+
+   <bind pointcut="execution(* org.jboss.jms.server.endpoint.advised.ConnectionAdvised->createSessionDelegate(..))">
+      <interceptor-ref name="org.jboss.test.messaging.tools.aop.PoisonInterceptor"/>
+   </bind>
+
+</aop>
\ No newline at end of file


Property changes on: trunk/tests/etc/poison.xml
___________________________________________________________________
Name: svn:keywords
   + "Id LastChangedDate Author Revision"

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -11,8 +11,10 @@
 import org.jboss.jms.client.JBossConnection;
 import org.jboss.jms.client.FailoverListener;
 import org.jboss.jms.client.FailoverEvent;
+import org.jboss.jms.client.remoting.JMSRemotingConnection;
 import org.jboss.jms.client.state.ConnectionState;
 import org.jboss.jms.client.delegate.DelegateSupport;
+import org.jboss.jms.client.delegate.ClientConnectionDelegate;
 
 import javax.jms.Connection;
 import javax.jms.Session;
@@ -1514,45 +1516,94 @@
       simpleFailover("john", "needle");
    }
 
+   public void testMethodSmackingIntoFailure() throws Exception
+   {
+      Connection conn = null;
 
-   // I need this, Clebert.
+      try
+      {
+         conn = cf.createConnection();
+         conn.close();
 
-//   public void testTemp() throws Exception
-//   {
-//      Connection conn = null;
-//
-//      try
-//      {
-//         conn = cf.createConnection();
-//         conn.close();
-//
-//         conn = cf.createConnection();
-//
-//         assertEquals(1, ((JBossConnection)conn).getServerID());
-//
-//         // we "cripple" the remoting connection by removing ConnectionListener. This way, failures
-//         // cannot be "cleanly" detected by the client-side pinger, and we'll fail on an invocation
-//         JMSRemotingConnection rc = ((ClientConnectionDelegate)((JBossConnection)conn).
-//            getDelegate()).getRemotingConnection();
-//         rc.removeConnectionListener();
-//
-//         ServerManagement.killAndWait(1);
-//
-//         log.info("########");
-//         log.info("######## KILLED NODE 1");
-//         log.info("########");
-//
-//         Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//      }
-//      finally
-//      {
-//         if (conn != null)
-//         {
-//            conn.close();
-//         }
-//      }
-//   }
+         conn = cf.createConnection();
 
+         assertEquals(1, ((JBossConnection)conn).getServerID());
+
+         // we "cripple" the remoting connection by removing ConnectionListener. This way, failures
+         // cannot be "cleanly" detected by the client-side pinger, and we'll fail on an invocation
+         JMSRemotingConnection rc = ((ClientConnectionDelegate)((JBossConnection)conn).
+            getDelegate()).getRemotingConnection();
+         rc.removeConnectionListener();
+
+         ServerManagement.killAndWait(1);
+
+         log.info("########");
+         log.info("######## KILLED NODE 1");
+         log.info("########");
+
+         conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      }
+      finally
+      {
+         if (conn != null)
+         {
+            conn.close();
+         }
+      }
+   }
+
+   public void testFailureInTheMiddleOfAnInvocation() throws Exception
+   {
+      Connection conn = null;
+
+      try
+      {
+         conn = cf.createConnection();
+         conn.close();
+
+         conn = cf.createConnection();
+
+         assertEquals(1, ((JBossConnection)conn).getServerID());
+
+         // we "cripple" the remoting connection by removing ConnectionListener. This way, failures
+         // cannot be "cleanly" detected by the client-side pinger, and we'll fail on an invocation
+         JMSRemotingConnection rc = ((ClientConnectionDelegate)((JBossConnection)conn).
+            getDelegate()).getRemotingConnection();
+         rc.removeConnectionListener();
+
+         SimpleFailoverListener failoverListener = new SimpleFailoverListener();
+         ((JBossConnection)conn).registerFailoverListener(failoverListener);
+
+         // poison the server
+         ServerManagement.poisonTheServer(1);
+
+         // this invocation will halt the server ...
+         Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+         // ... and hopefully it be failed over
+
+         MessageConsumer cons = session.createConsumer(queue[0]);
+         MessageProducer prod = session.createProducer(queue[0]);
+
+         prod.send(session.createTextMessage("after-poison"));
+
+         conn.start();
+
+         TextMessage tm = (TextMessage)cons.receive(2000);
+
+         assertNotNull(tm);
+         assertEquals("after-poison", tm.getText());
+
+      }
+      finally
+      {
+         if (conn != null)
+         {
+            conn.close();
+         }
+      }
+   }
+
    // Package protected ----------------------------------------------------------------------------
 
    // Protected ------------------------------------------------------------------------------------
@@ -1631,42 +1682,6 @@
       }
    }
 
-//   public void testTemp() throws Exception
-//   {
-//      Connection conn = null;
-//
-//      try
-//      {
-//         conn = cf.createConnection();
-//         conn.close();
-//
-//         conn = cf.createConnection();
-//
-//         assertEquals(1, ((JBossConnection)conn).getServerID());
-//
-//         // we "cripple" the remoting connection by removing ConnectionListener. This way, failures
-//         // cannot be "cleanly" detected by the client-side pinger, and we'll fail on an invocation
-//         JMSRemotingConnection rc = ((ClientConnectionDelegate)((JBossConnection)conn).
-//            getDelegate()).getRemotingConnection();
-//         rc.removeConnectionListener();
-//
-//         ServerManagement.killAndWait(1);
-//
-//         log.info("########");
-//         log.info("######## KILLED NODE 1");
-//         log.info("########");
-//
-//         Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//      }
-//      finally
-//      {
-//         if (conn != null)
-//         {
-//            conn.close();
-//         }
-//      }
-//   }
-
    // Package protected ----------------------------------------------------------------------------
 
    // Protected ------------------------------------------------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -608,6 +608,18 @@
       }
    }
 
+   /**
+    * Install dynamically an AOP advice that will do "bad things" on the server, simulating all
+    * sorts of failures. I expect the name of this method to be refactored as we learn more about
+    * this type of testing.
+    */
+   public static void poisonTheServer(int serverIndex) throws Exception
+   {
+      insureStarted(serverIndex);
+      servers[serverIndex].getServer().poisonTheServer();
+   }
+
+
    public static Set query(ObjectName pattern) throws Exception
    {
       insureStarted();
@@ -742,11 +754,11 @@
       configureSecurityForDestination(0, destName, config);
    }
 
-   public static void configureSecurityForDestination(int serverId, String destName, String config)
+   public static void configureSecurityForDestination(int serverID, String destName, String config)
       throws Exception
    {
-      insureStarted(serverId);
-      servers[serverId].getServer().configureSecurityForDestination(destName, config);
+      insureStarted(serverID);
+      servers[serverID].getServer().configureSecurityForDestination(destName, config);
    }
 
    public static void setDefaultSecurityConfig(String config) throws Exception

Added: trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonAspect.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonAspect.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonAspect.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -0,0 +1,49 @@
+/**
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.test.messaging.tools.aop;
+
+import org.jboss.logging.Logger;
+
+/**
+ * Used to force a "poisoned" server to do all sorts of bad things. Used for testing.
+ *
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @version <tt>$Revision$</tt>
+ * $Id$
+ */
+public class PoisonAspect
+{
+   // Constants ------------------------------------------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(PoisonAspect.class);
+
+   // Static ---------------------------------------------------------------------------------------
+
+   // Attributes -----------------------------------------------------------------------------------
+
+   // Constructors ---------------------------------------------------------------------------------
+
+   // Public ---------------------------------------------------------------------------------------
+
+   /**
+    * Used by the failover tests to kill server in the middle of an invocation.
+    */
+   public void haltTheServer()
+   {
+      log.info("Halting the server ...");
+
+      Runtime.getRuntime().halt(1);
+   }
+
+   // Package protected ----------------------------------------------------------------------------
+
+   // Protected ------------------------------------------------------------------------------------
+
+   // Private --------------------------------------------------------------------------------------
+
+   // Inner classes --------------------------------------------------------------------------------
+}


Property changes on: trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonAspect.java
___________________________________________________________________
Name: svn:keywords
   + "Id LastChangedDate Author Revision"

Added: trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonInterceptor.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonInterceptor.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonInterceptor.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -0,0 +1,72 @@
+/**
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.test.messaging.tools.aop;
+
+import org.jboss.logging.Logger;
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.MethodInvocation;
+
+/**
+ * Used to force a "poisoned" server to do all sorts of bad things. Used for testing.
+ *
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @version <tt>$Revision$</tt>
+ * $Id$
+ */
+public class PoisonInterceptor implements Interceptor
+{
+   // Constants ------------------------------------------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(PoisonInterceptor.class);
+
+   // Static ---------------------------------------------------------------------------------------
+
+   // Attributes -----------------------------------------------------------------------------------
+
+   // Constructors ---------------------------------------------------------------------------------
+
+   // Interceptor implementation -------------------------------------------------------------------
+
+   public String getName()
+   {
+      return "PoisonInterceptor";
+   }
+
+   public Object invoke(Invocation invocation) throws Throwable
+   {
+      MethodInvocation mi = (MethodInvocation)invocation;
+      String methodName = mi.getMethod().getName();
+
+      if ("createSessionDelegate".equals(methodName))
+      {
+         // Used by the failover tests to kill server in the middle of an invocation.
+
+         log.info("#####"); 
+         log.info("#####");
+         log.info("##### Halting the server!");
+         log.info("#####");
+         log.info("#####");
+
+         Runtime.getRuntime().halt(1);
+
+      }
+
+      return invocation.invokeNext();
+   }
+
+   // Public ---------------------------------------------------------------------------------------
+
+   // Package protected ----------------------------------------------------------------------------
+
+   // Protected ------------------------------------------------------------------------------------
+
+   // Private --------------------------------------------------------------------------------------
+
+   // Inner classes --------------------------------------------------------------------------------
+
+}


Property changes on: trunk/tests/src/org/jboss/test/messaging/tools/aop/PoisonInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + "Id LastChangedDate Author Revision"

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/ServiceContainer.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -97,13 +97,13 @@
  */
 public class ServiceContainer
 {
-   // Constants -----------------------------------------------------
+   // Constants ------------------------------------------------------------------------------------
 
    private static final Logger log = Logger.getLogger(ServiceContainer.class);
 
    private static final String CONFIGURATION_FILE_NAME = "container.xml";
 
-   // Static --------------------------------------------------------
+   // Static ---------------------------------------------------------------------------------------
 
    public static ObjectName SERVICE_CONTROLLER_OBJECT_NAME;
    public static ObjectName CLASS_LOADER_OBJECT_NAME;
@@ -169,7 +169,7 @@
       }
    }
 
-   // Attributes ----------------------------------------------------
+   // Attributes -----------------------------------------------------------------------------------
 
    private ServiceContainerConfiguration config;
 
@@ -194,7 +194,7 @@
    // so we don't start up multiple servers with services running on the same port
    private int serverIndex;
 
-   // Static --------------------------------------------------------
+   // Static ---------------------------------------------------------------------------------------
 
    public static Object type(MBeanInfo mbeanInfo, String attributeName, String valueAsString)
       throws Exception
@@ -250,7 +250,7 @@
 
    }
 
-   // Constructors --------------------------------------------------
+   // Constructors ---------------------------------------------------------------------------------
 
    public ServiceContainer(String servicesToStart) throws Exception
    {
@@ -278,7 +278,8 @@
       this.serverIndex = 0;
    }
 
-   public ServiceContainer(String sevicesToStart, TransactionManager tm, int serverIndex) throws Exception
+   public ServiceContainer(String sevicesToStart, TransactionManager tm, int serverIndex)
+      throws Exception
    {
       this.tm = tm;
       parseConfig(sevicesToStart);
@@ -286,7 +287,7 @@
       this.serverIndex = serverIndex;
    }
 
-   // Public --------------------------------------------------------
+   // Public ---------------------------------------------------------------------------------------
 
 
    /**
@@ -297,7 +298,6 @@
       start(true);
    }
 
-
    public void start(boolean cleanDatabase) throws Exception
    {
       try
@@ -810,7 +810,7 @@
 
    // Protected -----------------------------------------------------
 
-   // Private -------------------------------------------------------
+   // Private --------------------------------------------------------------------------------------
 
    /**
     * Note that this method makes no assumption on whether the service was created or started, nor
@@ -995,7 +995,8 @@
 
       log.debug("bound " + TRANSACTION_MANAGER_JNDI_NAME);
 
-      initialContext.rebind(USER_TRANSACTION_JNDI_NAME, ServerVMClientUserTransaction.getSingleton());
+      initialContext.
+         rebind(USER_TRANSACTION_JNDI_NAME, ServerVMClientUserTransaction.getSingleton());
 
       log.debug("bound " + USER_TRANSACTION_JNDI_NAME);
    }
@@ -1432,5 +1433,5 @@
       }
    }
 
-   // Inner classes -------------------------------------------------
+   // Inner classes --------------------------------------------------------------------------------
 }

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-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/LocalTestServer.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -46,6 +46,7 @@
 import org.jboss.test.messaging.tools.jmx.RemotingJMXWrapper;
 import org.jboss.test.messaging.tools.jmx.ServiceContainer;
 import org.jboss.test.messaging.tools.jndi.Constants;
+import org.jboss.aop.AspectXmlLoader;
 import org.w3c.dom.Element;
 
 /**
@@ -844,6 +845,17 @@
                                       "Register listeners directly instead.");
    }
 
+   public void poisonTheServer() throws Exception
+   {
+      URL url = this.getClass().getClassLoader().getResource("poison.xml");
+      AspectXmlLoader.deployXML(url);
+
+      log.debug(url + " deployed");
+
+//      URL url = this.getClass().getClassLoader().getResource("poison.xml");
+//      AspectXmlLoader.undeployXML(url);
+   }
+
    // Public --------------------------------------------------------
 
    // Package protected ---------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -433,6 +433,11 @@
       return pl.drain();
    }
 
+   public void poisonTheServer() throws Exception
+   {
+      server.poisonTheServer();
+   }
+
    // Public --------------------------------------------------------
 
    // Package protected ---------------------------------------------

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RemoteTestServer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RemoteTestServer.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RemoteTestServer.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -36,20 +36,20 @@
  */
 public class RemoteTestServer extends LocalTestServer
 {
-   // Constants -----------------------------------------------------
+   // Constants ------------------------------------------------------------------------------------
 
-   // Static --------------------------------------------------------
+   // Static ---------------------------------------------------------------------------------------
 
-   // Attributes ----------------------------------------------------
+   // Attributes -----------------------------------------------------------------------------------
 
-   // Constructors --------------------------------------------------
+   // Constructors ---------------------------------------------------------------------------------
    
    public RemoteTestServer(int serverIndex)
    {
       super(serverIndex);
    }
 
-   // Server implementation -----------------------------------------
+   // Server implementation ------------------------------------------------------------------------
 
    /**
     * Only for in-VM use!
@@ -76,16 +76,16 @@
    }
    
 
-   // Public --------------------------------------------------------
+   // Public ---------------------------------------------------------------------------------------
     
-   // Package protected ---------------------------------------------
+   // Package protected ----------------------------------------------------------------------------
 
-   // Protected -----------------------------------------------------
+   // Protected ------------------------------------------------------------------------------------
 
-   // Private -------------------------------------------------------
+   // Private --------------------------------------------------------------------------------------
 
 
-   // Inner classes -------------------------------------------------
+   // Inner classes --------------------------------------------------------------------------------
 
    
 }

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/Server.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/Server.java	2007-01-10 10:38:48 UTC (rev 1942)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/Server.java	2007-01-10 12:56:46 UTC (rev 1943)
@@ -255,4 +255,6 @@
     */
    List pollNotificationListener(long listenerID) throws Exception;
 
+   void poisonTheServer() throws Exception;
+
 }




More information about the jboss-cvs-commits mailing list