nirvana.support.services.NirvanaException.scala Maven / Gradle / Ivy
// Copyright 2014 Jun Tsai. All rights reserved.
// site: http://www.ganshane.com
package nirvana.support.services
import java.io.{PrintWriter, PrintStream}
/**
* Nirvana整个系统异常消息
* 异常消息编号有:
* nirvana-support 1000
* nirvana-core 2000
* nirvana-cloud 3000
* nirvana-jni 4000
* nirvana-rpc 5000
* nirvana-matcher.acker 6100
* nirvana-matcher.merger 6200
* nirvana-matcher.processor 6300
* nirvana-matcher.spout 6400
* nirvana-matcher.sync 6500
* nirvana-storage.api 7100
* nirvana-storage.meta 7200
* nirvana-storage.node 7300
* @author jcai
*/
object NirvanaException{
def wrap(exception:Throwable, errorCode:ErrorCode,message:String):NirvanaException={
if (exception.isInstanceOf[NirvanaException]) {
val me = exception.asInstanceOf[NirvanaException]
if (errorCode != null && errorCode != me.errorCode) {
return new NirvanaException(message, exception, errorCode);
}
me
} else {
new NirvanaException(message, exception, errorCode)
}
}
def wrap(exception:Throwable, errorCode:ErrorCode):NirvanaException={
wrap(exception,errorCode,exception.getMessage);
}
def wrap(exception:Throwable):NirvanaException = wrap(exception, null)
}
class NirvanaException(message:String,cause:Throwable,val errorCode:ErrorCode) extends RuntimeException(message,cause){
def this(errorCode:ErrorCode)=this(null,null,errorCode)
def this(message:String, errorCode:ErrorCode)=this(message,null,errorCode)
def this(cause:Throwable, errorCode:ErrorCode )=this(null,cause,errorCode)
override def printStackTrace(s:PrintStream){
s.synchronized{
printStackTrace(new PrintWriter(s))
}
}
override def printStackTrace(s:PrintWriter) {
s.synchronized{
s.println(this)
getStackTrace.foreach{trace=>
s.println("\tat " + trace)
}
if (cause != null) {
cause.printStackTrace(s)
}
s.flush()
}
}
override def toString={
val sb = new StringBuilder
if(errorCode != null){
sb.append("nirvana-").append(errorCode.code).append(":")
sb.append(errorCode.toString).append(" ")
}else{
sb.append("nirvana-0000 UNKNOWN ")
}
if(message != null){sb.append(message)}
if(cause!=null){sb.append(" -> ").append(cause)}
sb.toString()
}
}
abstract class ErrorCode(val code:Int)
© 2015 - 2025 Weber Informatics LLC | Privacy Policy