Renamed to EventHandler and added 'info, debug, warning and error'

This commit is contained in:
Jonas Bonér 2011-03-02 18:19:17 +01:00
parent a41fd15228
commit 793ad9ac03
16 changed files with 132 additions and 123 deletions

View file

@ -1,4 +1,14 @@
/** /**
* Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se> * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
*/ */
@ -73,63 +83,54 @@ class ActorKilledException private[akka](message: String) extends AkkaEx
class ActorInitializationException private[akka](message: String) extends AkkaException(message) class ActorInitializationException private[akka](message: String) extends AkkaException(message)
class ActorTimeoutException private[akka](message: String) extends AkkaException(message) class ActorTimeoutException private[akka](message: String) extends AkkaException(message)
sealed trait ErrorHandlerEventLevel {
def asString: String
}
object HighErrorHandlerEventLevel extends ErrorHandlerEventLevel {
def asString = "high"
}
object MediumErrorHandlerEventLevel extends ErrorHandlerEventLevel {
def asString = "medium"
}
object LowErrorHandlerEventLevel extends ErrorHandlerEventLevel {
def asString = "low"
}
case class ErrorHandlerEvent(
@BeanProperty val cause: Throwable,
@BeanProperty val instance: AnyRef,
@BeanProperty val message: String = "",
@BeanProperty val level: ErrorHandlerEventLevel = MediumErrorHandlerEventLevel) {
@BeanProperty val thread: Thread = Thread.currentThread
}
// FIXME add flume listener
// document writing custom
/** /**
* Error handler. * Error handler.
* *
* Create, add and remove a listener: * Create, add and remove a listener:
* <pre> * <pre>
* val errorHandlerEventListener = new Actor { * val errorHandlerEventListener = new Actor {
* self.dispatcher = ErrorHandler.ErrorHandlerDispatcher * self.dispatcher = EventHandler.EventHandlerDispatcher
* *
* def receive = { * def receive = {
* case ErrorHandlerEvent(cause, message, level) => * case EventHandler.Error(cause, instance, message) => ...
* case EventHandler.Warning(cause, instance, message) => ...
* case EventHandler.Info(instance, message) => ...
* case EventHandler.Debug(instance, message) => ...
* } * }
* } * }
* *
* ErrorHandler.addListener(errorHandlerEventListener) * EventHandler.addListener(errorHandlerEventListener)
* ... * ...
* ErrorHandler.removeListener(errorHandlerEventListener) * EventHandler.removeListener(errorHandlerEventListener)
* </pre> * </pre>
* *
* Log an error event: * Log an error event:
* <pre> * <pre>
* ErrorHandler notifyListeners ErrorHandlerEvent(reason, this, message.toString) * EventHandler notifyListeners EventHandler.Error(exception, this, message.toString)
* </pre> * </pre>
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/ */
object ErrorHandler extends ListenerManagement { object EventHandler extends ListenerManagement {
import java.io.{StringWriter, PrintWriter} import java.io.{StringWriter, PrintWriter}
import java.text.DateFormat import java.text.DateFormat
import java.util.Date import java.util.Date
import akka.dispatch.Dispatchers import akka.dispatch.Dispatchers
val error = "[error:%s] [%s] [%s] [%s] %s\n%s".intern sealed trait Event {
val ID = "default:error:handler" val thread: Thread = Thread.currentThread
val ErrorHandlerDispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(ID).build }
case class Error(cause: Throwable, instance: AnyRef, message: String = "") extends Event
case class Warning(cause: Throwable, instance: AnyRef, message: String = "") extends Event
case class Info(instance: AnyRef, message: String = "") extends Event
case class Debug(instance: AnyRef, message: String = "") extends Event
val error = "[ERROR] [%s] [%s] [%s] %s\n%s".intern
val warning = "[WARN] [%s] [%s] [%s] %s\n%s".intern
val info = "[INFO] [%s] [%s] [%s] %s".intern
val debug = "[DEBUG] [%s] [%s] [%s] %s".intern
val ID = "default:error:handler".intern
val EventHandlerDispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(ID).build
def formattedTimestamp = DateFormat.getInstance.format(new Date) def formattedTimestamp = DateFormat.getInstance.format(new Date)
@ -142,18 +143,35 @@ object ErrorHandler extends ListenerManagement {
class DefaultListener extends Actor { class DefaultListener extends Actor {
self.id = ID self.id = ID
self.dispatcher = ErrorHandlerDispatcher self.dispatcher = EventHandlerDispatcher
def receive = { def receive = {
case event @ ErrorHandlerEvent(cause, instance, message, level) => case event @ Error(cause, instance, message) =>
val log = error.format( println(error.format(
level.asString,
formattedTimestamp, formattedTimestamp,
event.thread.getName, event.thread.getName,
instance.getClass.getSimpleName, instance.getClass.getSimpleName,
message, message,
stackTraceFor(cause)) stackTraceFor(cause)))
println(log) case event @ Warning(cause, instance, message) =>
println(warning.format(
formattedTimestamp,
event.thread.getName,
instance.getClass.getSimpleName,
message,
stackTraceFor(cause)))
case event @ Info(instance, message) =>
println(info.format(
formattedTimestamp,
event.thread.getName,
instance.getClass.getSimpleName,
message))
case event @ Debug(instance, message) =>
println(debug.format(
formattedTimestamp,
event.thread.getName,
instance.getClass.getSimpleName,
message))
case _ => {} case _ => {}
} }
} }

View file

@ -799,7 +799,8 @@ class LocalActorRef private[akka] (
else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString) else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString)
} else { } else {
val future = if (senderFuture.isDefined) senderFuture else Some(new DefaultCompletableFuture[T](timeout)) val future = if (senderFuture.isDefined) senderFuture else Some(new DefaultCompletableFuture[T](timeout))
dispatcher dispatchMessage new MessageInvocation(this, message, senderOption, future.asInstanceOf[Some[CompletableFuture[Any]]]) dispatcher dispatchMessage new MessageInvocation(
this, message, senderOption, future.asInstanceOf[Some[CompletableFuture[Any]]])
future.get future.get
} }
} }
@ -808,8 +809,7 @@ class LocalActorRef private[akka] (
* Callback for the dispatcher. This is the single entry point to the user Actor implementation. * Callback for the dispatcher. This is the single entry point to the user Actor implementation.
*/ */
protected[akka] def invoke(messageHandle: MessageInvocation): Unit = guard.withGuard { protected[akka] def invoke(messageHandle: MessageInvocation): Unit = guard.withGuard {
if (isShutdown) {} if (!isShutdown) {
else {
currentMessage = messageHandle currentMessage = messageHandle
try { try {
try { try {
@ -817,14 +817,16 @@ class LocalActorRef private[akka] (
actor(messageHandle.message) actor(messageHandle.message)
currentMessage = null // reset current message after successful invocation currentMessage = null // reset current message after successful invocation
} catch { } catch {
case e: InterruptedException => { currentMessage = null } // received message while actor is shutting down, ignore case e: InterruptedException =>
case e => handleExceptionInDispatch(e, messageHandle.message) currentMessage = null // received message while actor is shutting down, ignore
case e =>
handleExceptionInDispatch(e, messageHandle.message)
} finally { } finally {
checkReceiveTimeout // Reschedule receive timeout checkReceiveTimeout // Reschedule receive timeout
} }
} catch { } catch {
case e => case e: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this, messageHandle.message.toString) EventHandler notifyListeners EventHandler.Error(e, this, messageHandle.message.toString)
throw e throw e
} }
} }
@ -839,7 +841,7 @@ class LocalActorRef private[akka] (
dead.restart(reason, maxRetries, within) dead.restart(reason, maxRetries, within)
case _ => case _ =>
if(_supervisor.isDefined) if (_supervisor.isDefined)
notifySupervisorWithMessage(Exit(this, reason)) notifySupervisorWithMessage(Exit(this, reason))
else else
dead.stop dead.stop
@ -986,7 +988,7 @@ class LocalActorRef private[akka] (
} }
private def handleExceptionInDispatch(reason: Throwable, message: Any) = { private def handleExceptionInDispatch(reason: Throwable, message: Any) = {
ErrorHandler notifyListeners ErrorHandlerEvent(reason, this, message.toString) EventHandler notifyListeners EventHandler.Error(reason, this, message.toString)
//Prevent any further messages to be processed until the actor has been restarted //Prevent any further messages to be processed until the actor has been restarted
dispatcher.suspend(this) dispatcher.suspend(this)

View file

@ -38,7 +38,7 @@ object Scheduler {
initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]] initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this, receiver + " @ " + message) EventHandler notifyListeners EventHandler.Error(e, this, receiver + " @ " + message)
throw SchedulerException(message + " could not be scheduled on " + receiver, e) throw SchedulerException(message + " could not be scheduled on " + receiver, e)
} }
} }
@ -59,7 +59,7 @@ object Scheduler {
service.scheduleAtFixedRate(runnable, initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]] service.scheduleAtFixedRate(runnable, initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw SchedulerException("Failed to schedule a Runnable", e) throw SchedulerException("Failed to schedule a Runnable", e)
} }
} }
@ -74,7 +74,7 @@ object Scheduler {
delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]] delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this, receiver + " @ " + message) EventHandler notifyListeners EventHandler.Error(e, this, receiver + " @ " + message)
throw SchedulerException( message + " could not be scheduleOnce'd on " + receiver, e) throw SchedulerException( message + " could not be scheduleOnce'd on " + receiver, e)
} }
} }
@ -95,7 +95,7 @@ object Scheduler {
service.schedule(runnable,delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]] service.schedule(runnable,delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw SchedulerException("Failed to scheduleOnce a Runnable", e) throw SchedulerException("Failed to scheduleOnce a Runnable", e)
} }
} }

View file

@ -5,7 +5,7 @@
package akka.config package akka.config
import akka.AkkaException import akka.AkkaException
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
import net.lag.configgy.{Config => CConfig, Configgy, ParseException} import net.lag.configgy.{Config => CConfig, Configgy, ParseException}
import java.net.InetSocketAddress import java.net.InetSocketAddress
@ -63,7 +63,7 @@ object Config {
val e = new ConfigurationException( val e = new ConfigurationException(
"Config could not be loaded from -Dakka.config=" + configFile + "Config could not be loaded from -Dakka.config=" + configFile +
"\n\tdue to: " + cause.toString) "\n\tdue to: " + cause.toString)
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw e throw e
} }
@ -77,7 +77,7 @@ object Config {
val e = new ConfigurationException( val e = new ConfigurationException(
"Can't load '" + confName + "' config file from application classpath," + "Can't load '" + confName + "' config file from application classpath," +
"\n\tdue to: " + cause.toString) "\n\tdue to: " + cause.toString)
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw e throw e
} }
Configgy.config Configgy.config
@ -94,7 +94,7 @@ object Config {
"AKKA_HOME is defined as [" + HOME.get + "] " + "AKKA_HOME is defined as [" + HOME.get + "] " +
"\n\tbut the 'akka.conf' config file can not be found at [" + HOME.get + "/config/"+ confName + "]," + "\n\tbut the 'akka.conf' config file can not be found at [" + HOME.get + "/config/"+ confName + "]," +
"\n\tdue to: " + cause.toString) "\n\tdue to: " + cause.toString)
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw e throw e
} }
Configgy.config Configgy.config

View file

@ -7,7 +7,7 @@ package akka.dataflow
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
import java.util.concurrent.{ConcurrentLinkedQueue, LinkedBlockingQueue} import java.util.concurrent.{ConcurrentLinkedQueue, LinkedBlockingQueue}
import akka.actor.{Actor, ActorRef, ErrorHandler, ErrorHandlerEvent} import akka.actor.{Actor, ActorRef, EventHandler}
import akka.actor.Actor._ import akka.actor.Actor._
import akka.dispatch.CompletableFuture import akka.dispatch.CompletableFuture
import akka.AkkaException import akka.AkkaException
@ -148,7 +148,7 @@ object DataFlow {
(out !! Get).as[T] (out !! Get).as[T]
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
out ! Exit out ! Exit
throw e throw e
} }

View file

@ -4,7 +4,7 @@
package akka.dispatch package akka.dispatch
import akka.actor.{ActorRef, IllegalActorStateException, ErrorHandler, ErrorHandlerEvent} import akka.actor.{ActorRef, IllegalActorStateException, EventHandler}
import akka.util.{ReflectiveAccess, Switch} import akka.util.{ReflectiveAccess, Switch}
import java.util.Queue import java.util.Queue
@ -132,7 +132,7 @@ class ExecutorBasedEventDrivenDispatcher(
executorService.get() execute mbox executorService.get() execute mbox
} catch { } catch {
case e: RejectedExecutionException => case e: RejectedExecutionException =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this, _name) EventHandler notifyListeners EventHandler.Warning(e, this, _name)
mbox.dispatcherLock.unlock() mbox.dispatcherLock.unlock()
throw e throw e
} }

View file

@ -6,7 +6,7 @@ package akka.dispatch
import akka.AkkaException import akka.AkkaException
import akka.actor.Actor.spawn import akka.actor.Actor.spawn
import akka.actor.{Actor, ErrorHandler, ErrorHandlerEvent} import akka.actor.{Actor, EventHandler}
import akka.routing.Dispatcher import akka.routing.Dispatcher
import akka.japi.Procedure import akka.japi.Procedure
@ -36,8 +36,8 @@ object Futures {
try { try {
f completeWithResult body f completeWithResult body
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
f completeWithException e f completeWithException e
} }
})(dispatcher) })(dispatcher)
@ -103,7 +103,7 @@ object Futures {
result completeWithResult r result completeWithResult r
} catch { } catch {
case e: Exception => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
result completeWithException e result completeWithException e
} }
} }
@ -262,8 +262,8 @@ sealed trait Future[T] {
fa complete (try { fa complete (try {
Right(f(v.right.get)) Right(f(v.right.get))
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
Left(e) Left(e)
}) })
} }
@ -290,8 +290,8 @@ sealed trait Future[T] {
try { try {
f(v.right.get) onComplete (fa.completeWith(_)) f(v.right.get) onComplete (fa.completeWith(_))
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
fa completeWithException e fa completeWithException e
} }
} }
@ -320,8 +320,8 @@ sealed trait Future[T] {
if (p(r)) Right(r) if (p(r)) Right(r)
else Left(new MatchError(r)) else Left(new MatchError(r))
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
Left(e) Left(e)
}) })
} }

View file

@ -10,7 +10,7 @@ import atomic.{AtomicLong, AtomicInteger}
import ThreadPoolExecutor.CallerRunsPolicy import ThreadPoolExecutor.CallerRunsPolicy
import akka.util.Duration import akka.util.Duration
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
object ThreadPoolConfig { object ThreadPoolConfig {
type Bounds = Int type Bounds = Int
@ -208,10 +208,10 @@ class BoundedExecutorDecorator(val executor: ExecutorService, bound: Int) extend
}) })
} catch { } catch {
case e: RejectedExecutionException => case e: RejectedExecutionException =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Warning(e, this)
semaphore.release semaphore.release
case e => case e: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
throw e throw e
} }
} }

View file

@ -4,7 +4,7 @@
package akka.routing package akka.routing
import akka.actor.{Actor, ActorRef, ErrorHandler, ErrorHandlerEvent} import akka.actor.{Actor, ActorRef, EventHandler}
/** /**
* Actor pooling * Actor pooling
@ -84,7 +84,7 @@ trait DefaultActorPool extends ActorPool
future completeWithResult (delegate !! msg).getOrElse(None) future completeWithResult (delegate !! msg).getOrElse(None)
} catch { } catch {
case e => case e =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
future completeWithException e future completeWithException e
} }
} }

View file

@ -6,7 +6,7 @@ package akka.util
import java.util.concurrent.locks.{ReentrantReadWriteLock, ReentrantLock} import java.util.concurrent.locks.{ReentrantReadWriteLock, ReentrantLock}
import java.util.concurrent.atomic. {AtomicBoolean} import java.util.concurrent.atomic. {AtomicBoolean}
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
/** /**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
@ -125,8 +125,8 @@ class Switch(startAsOn: Boolean = false) {
try { try {
action action
} catch { } catch {
case t => case t: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(t, this) EventHandler notifyListeners EventHandler.Error(t, this)
switch.compareAndSet(!from, from) //Revert status switch.compareAndSet(!from, from) //Revert status
throw t throw t
} }

View file

@ -124,8 +124,7 @@ object ReflectiveAccess {
ctor.setAccessible(true) ctor.setAccessible(true)
Some(ctor.newInstance(args: _*).asInstanceOf[T]) Some(ctor.newInstance(args: _*).asInstanceOf[T])
} catch { } catch {
case e => case e: Exception =>
//ErrorHandler notifyListeners ErrorHandlerEvent(e, this)
None None
} }
@ -141,8 +140,7 @@ object ReflectiveAccess {
ctor.setAccessible(true) ctor.setAccessible(true)
Some(ctor.newInstance(args: _*).asInstanceOf[T]) Some(ctor.newInstance(args: _*).asInstanceOf[T])
} catch { } catch {
case e => case e: Exception =>
//ErrorHandler notifyListeners ErrorHandlerEvent(e, this)
None None
} }
@ -154,11 +152,9 @@ object ReflectiveAccess {
Option(instance.get(null).asInstanceOf[T]) Option(instance.get(null).asInstanceOf[T])
} catch { } catch {
case e: ClassNotFoundException => { case e: ClassNotFoundException => {
//ErrorHandler notifyListeners ErrorHandlerEvent(e, this)
None None
} }
case ei: ExceptionInInitializerError => { case ei: ExceptionInInitializerError => {
//ErrorHandler notifyListeners ErrorHandlerEvent(ei, this)
throw ei throw ei
} }
} }
@ -167,8 +163,7 @@ object ReflectiveAccess {
assert(fqn ne null) assert(fqn ne null)
Some(classloader.loadClass(fqn).asInstanceOf[Class[T]]) Some(classloader.loadClass(fqn).asInstanceOf[Class[T]])
} catch { } catch {
case e => case e: Exception =>
//ErrorHandler notifyListeners ErrorHandlerEvent(e, this)
None None
} }
} }

View file

@ -5,7 +5,7 @@
package akka.http package akka.http
import akka.actor.{ActorRegistry, ActorRef, Actor} import akka.actor.{ActorRegistry, ActorRef, Actor}
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
import javax.servlet.http.{HttpServletResponse, HttpServletRequest} import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
import javax.servlet.http.HttpServlet import javax.servlet.http.HttpServlet
@ -388,8 +388,8 @@ trait RequestMethod {
true true
} }
} catch { } catch {
case io => case io: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(io, this) EventHandler notifyListeners EventHandler.Error(io, this)
false false
} }
} }
@ -408,7 +408,7 @@ trait RequestMethod {
} }
} catch { } catch {
case io: IOException => case io: IOException =>
ErrorHandler notifyListeners ErrorHandlerEvent(io, this) EventHandler notifyListeners EventHandler.Error(io, this)
} }
} }

View file

@ -7,7 +7,7 @@ package akka.http
import javax.servlet. {AsyncContext, AsyncListener, AsyncEvent}; import javax.servlet. {AsyncContext, AsyncListener, AsyncEvent};
import Types._ import Types._
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
/** /**
* @author Garrick Evans * @author Garrick Evans
@ -36,7 +36,7 @@ trait Servlet30Context extends AsyncListener {
} }
catch { catch {
case ex: IllegalStateException => case ex: IllegalStateException =>
ErrorHandler notifyListeners ErrorHandlerEvent(ex, this) EventHandler notifyListeners EventHandler.Error(ex, this)
false false
} }
} }

View file

@ -23,7 +23,7 @@
package akka.security package akka.security
import akka.actor.{Scheduler, Actor, ActorRef, ActorRegistry, IllegalActorStateException} import akka.actor.{Scheduler, Actor, ActorRef, ActorRegistry, IllegalActorStateException}
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
import akka.actor.Actor._ import akka.actor.Actor._
import akka.config.Config import akka.config.Config
@ -369,8 +369,8 @@ trait SpnegoAuthenticationActor extends AuthenticationActor[SpnegoCredentials] {
Some(UserInfo(user, null, rolesFor(user))) Some(UserInfo(user, null, rolesFor(user)))
} catch { } catch {
case e: PrivilegedActionException => { case e: PrivilegedActionException => {
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
return None None
} }
} }
} }

View file

@ -16,7 +16,7 @@ import akka.remoteinterface._
import akka.actor. {Index, ActorInitializationException, LocalActorRef, newUuid, ActorRegistry, Actor, RemoteActorRef, TypedActor, ActorRef, IllegalActorStateException, RemoteActorSystemMessage, uuidFrom, Uuid, Exit, LifeCycleMessage, ActorType => AkkaActorType} import akka.actor. {Index, ActorInitializationException, LocalActorRef, newUuid, ActorRegistry, Actor, RemoteActorRef, TypedActor, ActorRef, IllegalActorStateException, RemoteActorSystemMessage, uuidFrom, Uuid, Exit, LifeCycleMessage, ActorType => AkkaActorType}
import akka.AkkaException import akka.AkkaException
import akka.actor.Actor._ import akka.actor.Actor._
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
import akka.util._ import akka.util._
import akka.remote.{MessageSerializer, RemoteClientSettings, RemoteServerSettings} import akka.remote.{MessageSerializer, RemoteClientSettings, RemoteServerSettings}
@ -428,8 +428,8 @@ class ActiveRemoteClientHandler(
throw new RemoteClientException("Unknown message received in remote client handler: " + other, client.module, client.remoteAddress) throw new RemoteClientException("Unknown message received in remote client handler: " + other, client.module, client.remoteAddress)
} }
} catch { } catch {
case e: Exception => case e: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
client.notifyListeners(RemoteClientError(e, client.module, client.remoteAddress)) client.notifyListeners(RemoteClientError(e, client.module, client.remoteAddress))
throw e throw e
} }
@ -485,8 +485,8 @@ class ActiveRemoteClientHandler(
.getConstructor(Array[Class[_]](classOf[String]): _*) .getConstructor(Array[Class[_]](classOf[String]): _*)
.newInstance(exception.getMessage).asInstanceOf[Throwable] .newInstance(exception.getMessage).asInstanceOf[Throwable]
} catch { } catch {
case problem => case problem: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(problem, this) EventHandler notifyListeners EventHandler.Error(problem, this)
UnparsableException(classname, exception.getMessage) UnparsableException(classname, exception.getMessage)
} }
} }
@ -557,8 +557,8 @@ class NettyRemoteServer(serverModule: NettyRemoteServerModule, val host: String,
bootstrap.releaseExternalResources bootstrap.releaseExternalResources
serverModule.notifyListeners(RemoteServerShutdown(serverModule)) serverModule.notifyListeners(RemoteServerShutdown(serverModule))
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
} }
} }
} }
@ -589,8 +589,8 @@ trait NettyRemoteServerModule extends RemoteServerModule { self: RemoteModule =>
currentServer.set(Some(new NettyRemoteServer(this, _hostname, _port, loader))) currentServer.set(Some(new NettyRemoteServer(this, _hostname, _port, loader)))
} }
} catch { } catch {
case e => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
notifyListeners(RemoteServerError(e, this)) notifyListeners(RemoteServerError(e, this))
} }
this this
@ -903,7 +903,7 @@ class RemoteServerHandler(
val actorRef = val actorRef =
try { createActor(actorInfo, channel).start } catch { try { createActor(actorInfo, channel).start } catch {
case e: SecurityException => case e: SecurityException =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
write(channel, createErrorReplyMessage(e, request, AkkaActorType.ScalaActor)) write(channel, createErrorReplyMessage(e, request, AkkaActorType.ScalaActor))
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
return return
@ -990,8 +990,8 @@ class RemoteServerHandler(
write(channel, messageBuilder.build) write(channel, messageBuilder.build)
} catch { } catch {
case e: Throwable => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
} }
@ -1007,11 +1007,11 @@ class RemoteServerHandler(
} }
} catch { } catch {
case e: InvocationTargetException => case e: InvocationTargetException =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
write(channel, createErrorReplyMessage(e.getCause, request, AkkaActorType.TypedActor)) write(channel, createErrorReplyMessage(e.getCause, request, AkkaActorType.TypedActor))
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
case e: Throwable => case e: Exception =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
write(channel, createErrorReplyMessage(e, request, AkkaActorType.TypedActor)) write(channel, createErrorReplyMessage(e, request, AkkaActorType.TypedActor))
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
} }
@ -1070,8 +1070,8 @@ class RemoteServerHandler(
server.actorsByUuid.put(actorRef.uuid.toString, actorRef) // register by uuid server.actorsByUuid.put(actorRef.uuid.toString, actorRef) // register by uuid
actorRef actorRef
} catch { } catch {
case e => case e: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
throw e throw e
} }
@ -1137,8 +1137,8 @@ class RemoteServerHandler(
server.typedActors.put(parseUuid(uuid).toString, newInstance) // register by uuid server.typedActors.put(parseUuid(uuid).toString, newInstance) // register by uuid
newInstance newInstance
} catch { } catch {
case e => case e: Throwable =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this) EventHandler notifyListeners EventHandler.Error(e, this)
server.notifyListeners(RemoteServerError(e, server)) server.notifyListeners(RemoteServerError(e, server))
throw e throw e
} }

View file

@ -6,7 +6,7 @@ package akka.transactor
import akka.config.Config import akka.config.Config
import akka.stm.{Atomic, DefaultTransactionConfig, TransactionFactory} import akka.stm.{Atomic, DefaultTransactionConfig, TransactionFactory}
import akka.actor.{ErrorHandler, ErrorHandlerEvent} import akka.actor.{EventHandler}
import org.multiverse.api.{Transaction => MultiverseTransaction} import org.multiverse.api.{Transaction => MultiverseTransaction}
import org.multiverse.commitbarriers.CountDownCommitBarrier import org.multiverse.commitbarriers.CountDownCommitBarrier
@ -133,13 +133,7 @@ class Coordinated(val message: Any, barrier: CountDownCommitBarrier) {
factory.addHooks factory.addHooks
val result = body val result = body
val timeout = factory.config.timeout val timeout = factory.config.timeout
try {
barrier.tryJoinCommit(mtx, timeout.length, timeout.unit) barrier.tryJoinCommit(mtx, timeout.length, timeout.unit)
} catch {
// Need to catch IllegalStateException until we have fix in Multiverse, since it throws it by mistake
case e: IllegalStateException =>
ErrorHandler notifyListeners ErrorHandlerEvent(e, this)
}
result result
} }
}) })