[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