You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2003/01/19 15:22:45 UTC
cvs commit: jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/common AltrmiRuntimeException.java
hammant 2003/01/19 06:22:45
Modified: altrmi/src/java/org/apache/excalibur/altrmi/blocks/publishing
AbstractPublisher.java
altrmi/src/java/org/apache/excalibur/altrmi/server
ServerException.java
altrmi/src/java/org/apache/excalibur/altrmi/server/impl/http
CustomHttpServer.java
altrmi/src/java/org/apache/excalibur/altrmi/server/impl/socket
AbstractCompleteSocketStreamServer.java
Added: altrmi/src/java/org/apache/excalibur/altrmi/common
AltrmiRuntimeException.java
Log:
Basic client and server dependencies on A-F removed.
Revision Changes Path
1.4 +1 -1 jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/blocks/publishing/AbstractPublisher.java
Index: AbstractPublisher.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/blocks/publishing/AbstractPublisher.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractPublisher.java 5 Jan 2003 23:24:08 -0000 1.3
+++ AbstractPublisher.java 19 Jan 2003 14:22:45 -0000 1.4
@@ -1 +1 @@
-/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.altrmi.blocks.publishing;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
import java.util.Vector;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.excalibur.altrmi.common.MethodRequest;
import org.apache.excalibur.altrmi.server.Authenticator;
import org.apache.excalibur.altrmi.server.Publisher;
import org.apache.excalibur.altrmi.server.ClassRetriever;
import org.apache.excalibur.altrmi.server.MethodInvocationHandler;
import org.apache.excalibur.altrmi.server.PublicationDescription;
import org.apache.excalibur.altrmi.server.PublicationException;
import org.apache.excalibur.altrmi.server.impl.AbstractServer;
import org.apache.excalibur.altrmi.server.impl.classretrievers.AbstractDynamicGeneratorClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.BcelDynamicGeneratorClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.JarFileClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.NoClassRetriever;
import org.apache.avalon.framework.context.ContextException;
/**
* Abstract Publisher.
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @author Thomas Kiesgen
* @version $Revision$
*/
public abstract class AbstractPublisher
extends AbstractLogEnabled
implements Publisher, Startable, Serviceable, Contextualizable, Configurable,
Initializable
{
private AbstractServer m_abstractServer;
private ClassRetriever m_classRetriever;
private Authenticator m_altrmiAuthenticator;
protected File m_baseDirectory;
private boolean m_isDynamicPublisher = false;
/**
*
* @param configuration
* @throws ConfigurationException
*/
public void configure( Configuration configuration )
throws ConfigurationException
{
String classRetrieverType = configuration.getChild( "classRetrieverType" ).getValue();
if( classRetrieverType.equals( "jarFile" ) )
{
StringTokenizer st =
new StringTokenizer( configuration.getChild( "generatedClassJarURLs" ).getValue(),
"," );
Vector vector = new Vector();
while( st.hasMoreTokens() )
{
try
{
String url = st.nextToken();
if( url.startsWith( "./" ) )
{
File file = new File( m_baseDirectory, url.substring( 2, url.length() ) );
vector.add( file.toURL() );
}
else
{
vector.add( new URL( url ) );
}
}
catch( MalformedURLException e )
{
getLogger()
.debug( "Can't create URL from config element 'generatedClassJarURLs'",
e );
}
}
URL[] urls = new URL[ vector.size() ];
vector.copyInto( urls );
m_classRetriever = new JarFileClassRetriever( urls );
}
else if( classRetrieverType.equals( "none" ) )
{
m_classRetriever = new NoClassRetriever();
}
else if( classRetrieverType.equals( "bcel" ) )
{
AbstractDynamicGeneratorClassRetriever generator = new BcelDynamicGeneratorClassRetriever();
File classGenDir = new File( m_baseDirectory, configuration.getChild( "classGenDir" ).getValue( "" ) );
generator.setClassGenDir( classGenDir.getAbsolutePath() );
m_classRetriever = generator;
m_isDynamicPublisher = true;
getLogger().debug( "setting classgen dir for generator to " + classGenDir.getAbsolutePath() );
getLogger().debug( "setting class retriever to bcel dynamic generator" );
}
else
{
throw new ConfigurationException(
"classRetrieverType must be 'bcel', 'jarFile' or 'none'" );
}
}
/**
* contextualize as per Contextualizable interface
* @param context
*/
public void contextualize( final Context context ) throws ContextException
{
m_baseDirectory = ( File ) context.get("app.home");
}
/**
* Service as per Serviceable interface
* @param manager a service manager
* @throws ServiceException if a problem during servicing
* @phoenix:dependency name="org.apache.excalibur.altrmi.server.Authenticator"
*/
public void service( ServiceManager manager )
throws ServiceException
{
m_altrmiAuthenticator =
(Authenticator)manager.lookup( Authenticator.class.getName() );
}
/**
* initialize as per Initializable interface
* @throws Exception
*/
public void initialize() throws Exception
{
m_abstractServer.setClassRetriever( m_classRetriever );
m_abstractServer.setAuthenticator( m_altrmiAuthenticator );
}
/**
*
* @param implementation
* @param asName
* @param interfaceToExpose
* @throws PublicationException
*/
public void publish( Object implementation, String asName, Class interfaceToExpose )
throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Publishing object [as: " + asName + ", impl: " + implementation
+ ", interf: "+ interfaceToExpose + "]" );
if( m_isDynamicPublisher )
{
( ( AbstractDynamicGeneratorClassRetriever ) m_classRetriever ).generate( asName, interfaceToExpose, this.getClass().getClassLoader() );
if( getLogger().isDebugEnabled() )
{
getLogger().debug( "generated dynamic proxy for published interface " + asName );
}
}
m_abstractServer.publish( implementation, asName, interfaceToExpose );
}
/**
* Publish an service
* @param implementation
* @param asName
* @param publicationDescription
* @throws PublicationException
*/
public void publish(
Object implementation, String asName, PublicationDescription publicationDescription )
throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Publishing object [as: " + asName + ", impl: " + implementation + "]" );
if( m_isDynamicPublisher )
{
( ( AbstractDynamicGeneratorClassRetriever ) m_classRetriever ).generate( asName, publicationDescription, this.getClass().getClassLoader() );
if( getLogger().isDebugEnabled() )
{
getLogger().debug( "generated dynamic proxy for published interface " + asName );
}
}
m_abstractServer.publish( implementation, asName, publicationDescription );
}
/**
*
* @param object
* @param asName
* @throws PublicationException
*/
public void unPublish( Object object, String asName ) throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Unpublishing object [nane: " + asName + ", impl: " + object + "]" );
m_abstractServer.unPublish( object, asName );
}
/**
*
* @param object
* @param asName
* @param o1
* @throws PublicationException
*/
public void replacePublished( Object object, String asName, Object o1 ) throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Replacing published object [nane: " + asName + ", existing: " + object + ", new: " + o1 + "]" );
m_abstractServer.replacePublished( object, asName, o1 );
}
/**
*
* @throws Exception
*/
public void start() throws Exception
{
m_abstractServer.start();
}
/**
*
* @throws Exception
*/
public void stop() throws Exception
{
m_abstractServer.stop();
}
/**
*
* @param request
* @param publishedName
* @return
*/
public MethodInvocationHandler getMethodInvocationHandler( MethodRequest request, String publishedName )
{
return m_abstractServer.getMethodInvocationHandler( request, publishedName );
}
/**
*
* @param publishedName
* @return
*/
public MethodInvocationHandler getMethodInvocationHandler(String publishedName)
{
return m_abstractServer.getMethodInvocationHandler( publishedName );
}
/**
*
* @return
*/
protected AbstractServer getAbstractServer()
{
return m_abstractServer;
}
/**
*
* @param abstractServer
*/
protected void setAbstractServer( AbstractServer abstractServer )
{
m_abstractServer = abstractServer;
}
}
\ No newline at end of file
+/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.altrmi.blocks.publishing;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
import java.util.Vector;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.excalibur.altrmi.common.MethodRequest;
import org.apache.excalibur.altrmi.server.Authenticator;
import org.apache.excalibur.altrmi.server.Publisher;
import org.apache.excalibur.altrmi.server.ClassRetriever;
import org.apache.excalibur.altrmi.server.MethodInvocationHandler;
import org.apache.excalibur.altrmi.server.PublicationDescription;
import org.apache.excalibur.altrmi.server.PublicationException;
import org.apache.excalibur.altrmi.server.impl.AbstractServer;
import org.apache.excalibur.altrmi.server.impl.LogEnabledServerMonitor;
import org.apache.excalibur.altrmi.server.impl.classretrievers.AbstractDynamicGeneratorClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.BcelDynamicGeneratorClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.JarFileClassRetriever;
import org.apache.excalibur.altrmi.server.impl.classretrievers.NoClassRetriever;
import org.apache.avalon.framework.context.ContextException;
/**
* Abstract Publisher.
*
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @author Thomas Kiesgen
* @version $Revision$
*/
public abstract class AbstractPublisher
extends AbstractLogEnabled
implements Publisher, Startable, Serviceable, Contextualizable, Configurable,
Initializable
{
private AbstractServer m_abstractServer;
private ClassRetriever m_classRetriever;
private Authenticator m_altrmiAuthenticator;
protected File m_baseDirectory;
private boolean m_isDynamicPublisher = false;
/**
*
* @param configuration
* @throws ConfigurationException
*/
public void configure( Configuration configuration )
throws ConfigurationException
{
String classRetrieverType = configuration.getChild( "classRetrieverType" ).getValue();
if( classRetrieverType.equals( "jarFile" ) )
{
StringTokenizer st =
new StringTokenizer( configuration.getChild( "generatedClassJarURLs" ).getValue(),
"," );
Vector vector = new Vector();
while( st.hasMoreTokens() )
{
try
{
String url = st.nextToken();
if( url.startsWith( "./" ) )
{
File file = new File( m_baseDirectory, url.substring( 2, url.length() ) );
vector.add( file.toURL() );
}
else
{
vector.add( new URL( url ) );
}
}
catch( MalformedURLException e )
{
getLogger()
.debug( "Can't create URL from config element 'generatedClassJarURLs'",
e );
}
}
URL[] urls = new URL[ vector.size() ];
vector.copyInto( urls );
m_classRetriever = new JarFileClassRetriever( urls );
}
else if( classRetrieverType.equals( "none" ) )
{
m_classRetriever = new NoClassRetriever();
}
else if( classRetrieverType.equals( "bcel" ) )
{
AbstractDynamicGeneratorClassRetriever generator = new BcelDynamicGeneratorClassRetriever();
File classGenDir = new File( m_baseDirectory, configuration.getChild( "classGenDir" ).getValue( "" ) );
generator.setClassGenDir( classGenDir.getAbsolutePath() );
m_classRetriever = generator;
m_isDynamicPublisher = true;
getLogger().debug( "setting classgen dir for generator to " + classGenDir.getAbsolutePath() );
getLogger().debug( "setting class retriever to bcel dynamic generator" );
}
else
{
throw new ConfigurationException(
"classRetrieverType must be 'bcel', 'jarFile' or 'none'" );
}
}
/**
* contextualize as per Contextualizable interface
* @param context
*/
public void contextualize( final Context context ) throws ContextException
{
m_baseDirectory = ( File ) context.get("app.home");
}
/**
* Service as per Serviceable interface
* @param manager a service manager
* @throws ServiceException if a problem during servicing
* @phoenix:dependency name="org.apache.excalibur.altrmi.server.Authenticator"
*/
public void service( ServiceManager manager )
throws ServiceException
{
m_altrmiAuthenticator =
(Authenticator)manager.lookup( Authenticator.class.getName() );
}
/**
* initialize as per Initializable interface
* @throws Exception
*/
public void initialize() throws Exception
{
m_abstractServer.setClassRetriever( m_classRetriever );
m_abstractServer.setAuthenticator( m_altrmiAuthenticator );
}
/**
*
* @param implementation
* @param asName
* @param interfaceToExpose
* @throws PublicationException
*/
public void publish( Object implementation, String asName, Class interfaceToExpose )
throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Publishing object [as: " + asName + ", impl: " + implementation
+ ", interf: "+ interfaceToExpose + "]" );
if( m_isDynamicPublisher )
{
( ( AbstractDynamicGeneratorClassRetriever ) m_classRetriever ).generate( asName, interfaceToExpose, this.getClass().getClassLoader() );
if( getLogger().isDebugEnabled() )
{
getLogger().debug( "generated dynamic proxy for published interface " + asName );
}
}
m_abstractServer.publish( implementation, asName, interfaceToExpose );
}
/**
* Publish an service
* @param implementation
* @param asName
* @param publicationDescription
* @throws PublicationException
*/
public void publish(
Object implementation, String asName, PublicationDescription publicationDescription )
throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Publishing object [as: " + asName + ", impl: " + implementation + "]" );
if( m_isDynamicPublisher )
{
( ( AbstractDynamicGeneratorClassRetriever ) m_classRetriever ).generate( asName, publicationDescription, this.getClass().getClassLoader() );
if( getLogger().isDebugEnabled() )
{
getLogger().debug( "generated dynamic proxy for published interface " + asName );
}
}
m_abstractServer.publish( implementation, asName, publicationDescription );
}
/**
*
* @param object
* @param asName
* @throws PublicationException
*/
public void unPublish( Object object, String asName ) throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Unpublishing object [nane: " + asName + ", impl: " + object + "]" );
m_abstractServer.unPublish( object, asName );
}
/**
*
* @param object
* @param asName
* @param o1
* @throws PublicationException
*/
public void replacePublished( Object object, String asName, Object o1 ) throws PublicationException
{
if( getLogger().isDebugEnabled() )
getLogger().debug( "Replacing published object [nane: " + asName + ", existing: " + object + ", new: " + o1 + "]" );
m_abstractServer.replacePublished( object, asName, o1 );
}
/**
*
* @throws Exception
*/
public void start() throws Exception
{
m_abstractServer.start();
}
/**
*
* @throws Exception
*/
public void stop() throws Exception
{
m_abstractServer.stop();
}
/**
*
* @param request
* @param publishedName
* @return
*/
public MethodInvocationHandler getMethodInvocationHandler( MethodRequest request, String publishedName )
{
return m_abstractServer.getMethodInvocationHandler( request, publishedName );
}
/**
*
* @param publishedName
* @return
*/
public MethodInvocationHandler getMethodInvocationHandler(String publishedName)
{
return m_abstractServer.getMethodInvocationHandler( publishedName );
}
/**
*
* @return
*/
protected AbstractServer getAbstractServer()
{
return m_abstractServer;
}
/**
*
* @param abstractServer
*/
protected void setAbstractServer( AbstractServer abstractServer )
{
m_abstractServer = abstractServer;
LogEnabledServerMonitor sm = new LogEnabledServerMonitor();
sm.enableLogging(getLogger());
m_abstractServer.setServerMonitor(sm);
}
}
\ No newline at end of file
1.3 +15 -4 jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/ServerException.java
Index: ServerException.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/ServerException.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ServerException.java 11 Jan 2003 16:10:08 -0000 1.2
+++ ServerException.java 19 Jan 2003 14:22:45 -0000 1.3
@@ -7,7 +7,6 @@
*/
package org.apache.excalibur.altrmi.server;
-import org.apache.avalon.framework.CascadingException;
/**
* Class ServerException
@@ -16,9 +15,11 @@
* @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
* @version $Revision$
*/
-public class ServerException extends CascadingException
+public class ServerException extends Exception
{
+ Throwable m_throwable;
+
/**
* Construct an ServerException with a message
*
@@ -41,8 +42,18 @@
*/
public ServerException(String message, Throwable throwable)
{
- super(message, throwable);
+ super(message);
+ m_throwable = throwable;
}
+ /**
+ * Retrieve root cause of the exception.
+ *
+ * @return the root cause
+ */
+ public final Throwable getCause()
+ {
+ return m_throwable;
+ }
}
1.5 +1 -2 jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/http/CustomHttpServer.java
Index: CustomHttpServer.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/http/CustomHttpServer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CustomHttpServer.java 19 Jan 2003 11:10:01 -0000 1.4
+++ CustomHttpServer.java 19 Jan 2003 14:22:45 -0000 1.5
@@ -7,7 +7,6 @@
*/
package org.apache.excalibur.altrmi.server.impl.http;
-import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.excalibur.altrmi.server.ServerException;
import org.apache.excalibur.altrmi.server.impl.AbstractServer;
import org.apache.excalibur.altrmi.server.impl.ServerCustomStreamReadWriter;
1.12 +4 -4 jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/socket/AbstractCompleteSocketStreamServer.java
Index: AbstractCompleteSocketStreamServer.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/socket/AbstractCompleteSocketStreamServer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- AbstractCompleteSocketStreamServer.java 19 Jan 2003 11:10:01 -0000 1.11
+++ AbstractCompleteSocketStreamServer.java 19 Jan 2003 14:22:45 -0000 1.12
@@ -14,7 +14,7 @@
import org.apache.excalibur.altrmi.server.impl.AbstractServer;
import org.apache.excalibur.altrmi.server.impl.ServerStreamReadWriter;
import org.apache.excalibur.altrmi.server.impl.adapters.InvocationHandlerAdapter;
-import org.apache.avalon.framework.CascadingRuntimeException;
+import org.apache.excalibur.altrmi.common.AltrmiRuntimeException;
/**
@@ -150,14 +150,14 @@
{
setState(SHUTTINGDOWN);
-
+
try
{
m_serverSocket.close();
}
catch ( IOException ioe )
{
- throw new CascadingRuntimeException("Error stopping Complete Socket server", ioe);
+ throw new AltrmiRuntimeException("Error stopping Complete Socket server", ioe);
}
killAllConnections();
getThread().interrupt();
1.1 jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/common/AltrmiRuntimeException.java
Index: AltrmiRuntimeException.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 1997-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.altrmi.common;
/**
* RumtimeException with cascade features.
* Allows recording of nested exceptions.
*
* @author <a href="mailto:avalon-dev@jakarta.apache.org">Avalon Development Team</a>
*/
public class AltrmiRuntimeException
extends RuntimeException
{
private final Throwable m_throwable;
/**
* Construct a new <code>CascadingRuntimeException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
public AltrmiRuntimeException( final String message, final Throwable throwable )
{
super( message );
m_throwable = throwable;
}
/**
* Retrieve root cause of the exception.
*
* @return the root cause
*/
public final Throwable getCause()
{
return m_throwable;
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>