/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
* (C) 2008,
* @author JBoss Inc.
*/
package org.jboss.test.jbossts.recovery;
import java.io.Serializable;
/**
* Specification of what to do when a failure is injected.
*/
public class ASFailureMode implements Serializable
{
private static final int _NONE = 0;
private static final int _HALT = 1;
private static final int _EXIT = 2;
private static final int _SUSPEND = 3;
private static final int _XAEXCEPTION = 4;
private static final int _EJBEXCEPTION = 5;
private static final int _ROLLBACK_ONLY = 6;
private static final String _NONE_NAME = "NONE";
private static final String _HALT_NAME = "HALT";
private static final String _EXIT_NAME = "EXIT";
private static final String _SUSPEND_NAME = "SUSPEND";
private static final String _XAEXCEPTION_NAME = "XAEXCEPTION";
private static final String _EJBEXCEPTION_NAME = "EJBEXCEPTION";
private static final String _ROLLBACK_ONLY_NAME = "ROLLBACK_ONLY";
/* just for simpler transition from the enum type */
public static final ASFailureMode NONE = new ASFailureMode(_NONE);
public static final ASFailureMode HALT = new ASFailureMode(_HALT);
public static final ASFailureMode EXIT = new ASFailureMode(_EXIT);
public static final ASFailureMode SUSPEND = new ASFailureMode(_SUSPEND);
public static final ASFailureMode XAEXCEPTION = new ASFailureMode(_XAEXCEPTION);
public static final ASFailureMode EJBEXCEPTION = new ASFailureMode(_EJBEXCEPTION);
public static final ASFailureMode ROLLBACK_ONLY = new ASFailureMode(_ROLLBACK_ONLY);
private int mode;
public ASFailureMode(int mode)
{
this.mode = mode;
}
public boolean willTerminateVM()
{
switch (mode)
{
case _HALT:
case _EXIT:
return true;
default:
return false;
}
}
public boolean isException()
{
switch (mode)
{
case _XAEXCEPTION:
case _EJBEXCEPTION:
return true;
default:
return false;
}
}
/* enum like methods */
public String name()
{
switch (mode)
{
case _NONE:
return _NONE_NAME;
case _HALT:
return _HALT_NAME;
case _EXIT:
return _EXIT_NAME;
case _SUSPEND:
return _SUSPEND_NAME;
case _XAEXCEPTION:
return _XAEXCEPTION_NAME;
case _EJBEXCEPTION:
return _EJBEXCEPTION_NAME;
case _ROLLBACK_ONLY:
return _ROLLBACK_ONLY_NAME;
default:
return "uninstantiated";
}
}
public int ordinal()
{
return mode;
}
public static ASFailureMode valueOf(String mode)
{
if (_NONE_NAME.equalsIgnoreCase(mode))
return NONE;
else if (_HALT_NAME.equalsIgnoreCase(mode))
return HALT;
else if (_EXIT_NAME.equalsIgnoreCase(mode))
return EXIT;
else if (_SUSPEND_NAME.equalsIgnoreCase(mode))
return SUSPEND;
else if (_XAEXCEPTION_NAME.equalsIgnoreCase(mode))
return XAEXCEPTION;
else if (_EJBEXCEPTION_NAME.equalsIgnoreCase(mode))
return EJBEXCEPTION;
else if (_ROLLBACK_ONLY_NAME.equalsIgnoreCase(mode))
return ROLLBACK_ONLY;
else
throw new IllegalArgumentException("There is no such value of ASFailureMode like " + mode);
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + mode;
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ASFailureMode other = (ASFailureMode) obj;
if (mode != other.mode)
return false;
return true;
}
@Override
public String toString()
{
return name();
}
/*
NONE
,HALT // halt the JVM
,EXIT // exit the JVM
,SUSPEND // suspend the calling thread
,XAEXCEPTION // fail via one of the xa exception codes
,EJBEXCEPTION // fail via EJBException -- for using only with ASFailureType.PRE_PREPARE and SYNCH_BEFORE
,ROLLBACK_ONLY // mark a transaction as rollback-only -- for using only with ASFailureType.PRE_PREPARE and SYNCH_BEFORE
;
public boolean willTerminateVM()
{
switch (this)
{
case HALT:
case EXIT:
return true;
default:
return false;
}
}
public static ASFailureMode toEnum(String mode)
{
return ASFailureMode.valueOf(mode.toUpperCase());
}
*/
}