Hallo,
ich habe einen Logger geschrieben, der über RMI angesprochen wird. Allerdings bekomme ich in der Startklasse des Clients eine Fehlermeldung. Leider weiß ich nicht mehr weiter. Es wird ein MasterLogger erstellt, ein logfile initialisiert und ein selbstgeschriebener Logger erstellt, der die Clientanfragen handelt. Und da hängt alles. Vielleicht weiß jemand von euch weiter? Das Problem ist leider doch noch nicht gelöst. War wohl schon etwas spät...
Jetzt der Code und die Konsolenausgabe:
Startklasse des Clients
LoggingInterface log = (LoggingInterface) Naming.lookup(url +"logging");//Verbinden mit dem LoggingServer
log.init(LogFile);//LogBuch erstellt
System.out.println ("LogBook initialisiert");
System.out.println (module);
System.out.println(log);
//Übergabe des Modulnamens an den Logger
CoyoteLogger logger = log.getLoggerForModule(module); --> hier findet der Fehler statt!
System.out.println ("Verbunden mit LoggingServer");
logger.info("Es wurde ein Logger erfolgreich initialisiert", simTime, null);
Konsolenausgabe:
LogBook initialisiert
WorkflowServer
Proxy[LoggingInterface,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[192.168.0.105:1446](remote),objID:[3f085891:fe9fa64d3d:-8000, 0]]]]]
Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.util.logging.Logger
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy1.getLoggerForModule(Unknown Source)
at workflowServer.StartClass.main(StartClass.java:49) ...
LoggingImpl:
/**
* Logger für Module erstellen, wenn kein Modul für Logger existiert wird ein neuer Logger erstellt
* @param name Name des Moduls
* @return CoyoteLogger
*/
public CoyoteLogger getLoggerForModule(String name){
System.out.println ("in LoggingImpl - getLoggerForModule");
CoyoteLogger reply = (CoyoteLogger) allLoggers.get(name);//Auslesen, ob Logger in Hashtabhle existiert
if (reply == null){//Wenn kein Logger für dieses Modul existiert, ...
reply = createLogger(name);//... wird einer neu erstellt
System.out.println (reply + " getLoggerForModule");
}
return reply;//Rückgabe des Loggers
}//end getLoggerForModule
/**
* Logger für Modul neu erstellen
* @param name Modulname
* @return Neuer Logger
*/
public CoyoteLogger createLogger(String name){
CoyoteLogger newLogger = new CoyoteLogger(masterLogger);// Logger neu erstellen
newLogger.setModuleName(name);//Modulname zum Logger hinzufügen
allLoggers.put(name, newLogger);//Eintragen des Loggers in Hashtable
return newLogger;//Rückgabe des neuen Loggers
}//end createLogger
Konsolenausgabe für LoggingImpl:
Serverimplementierungen konstruieren
LoggingServer erfolgreich gestartet!
MasterLogger in LoggingImpl initialisiert
init in MasterLogger
zu JavaLogger hinzugefügt.
Level zu JavaLogger gesetzt
MasterLogger in LoggingImpl erstellt
in LoggingImpl - getLoggerForModule
logging.CoyoteLogger@181afa3 getLoggerForModule
ich habe einen Logger geschrieben, der über RMI angesprochen wird. Allerdings bekomme ich in der Startklasse des Clients eine Fehlermeldung. Leider weiß ich nicht mehr weiter. Es wird ein MasterLogger erstellt, ein logfile initialisiert und ein selbstgeschriebener Logger erstellt, der die Clientanfragen handelt. Und da hängt alles. Vielleicht weiß jemand von euch weiter? Das Problem ist leider doch noch nicht gelöst. War wohl schon etwas spät...
Jetzt der Code und die Konsolenausgabe:
Startklasse des Clients
LoggingInterface log = (LoggingInterface) Naming.lookup(url +"logging");//Verbinden mit dem LoggingServer
log.init(LogFile);//LogBuch erstellt
System.out.println ("LogBook initialisiert");
System.out.println (module);
System.out.println(log);
//Übergabe des Modulnamens an den Logger
CoyoteLogger logger = log.getLoggerForModule(module); --> hier findet der Fehler statt!
System.out.println ("Verbunden mit LoggingServer");
logger.info("Es wurde ein Logger erfolgreich initialisiert", simTime, null);
Konsolenausgabe:
LogBook initialisiert
WorkflowServer
Proxy[LoggingInterface,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[192.168.0.105:1446](remote),objID:[3f085891:fe9fa64d3d:-8000, 0]]]]]
Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.util.logging.Logger
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy1.getLoggerForModule(Unknown Source)
at workflowServer.StartClass.main(StartClass.java:49) ...
LoggingImpl:
/**
* Logger für Module erstellen, wenn kein Modul für Logger existiert wird ein neuer Logger erstellt
* @param name Name des Moduls
* @return CoyoteLogger
*/
public CoyoteLogger getLoggerForModule(String name){
System.out.println ("in LoggingImpl - getLoggerForModule");
CoyoteLogger reply = (CoyoteLogger) allLoggers.get(name);//Auslesen, ob Logger in Hashtabhle existiert
if (reply == null){//Wenn kein Logger für dieses Modul existiert, ...
reply = createLogger(name);//... wird einer neu erstellt
System.out.println (reply + " getLoggerForModule");
}
return reply;//Rückgabe des Loggers
}//end getLoggerForModule
/**
* Logger für Modul neu erstellen
* @param name Modulname
* @return Neuer Logger
*/
public CoyoteLogger createLogger(String name){
CoyoteLogger newLogger = new CoyoteLogger(masterLogger);// Logger neu erstellen
newLogger.setModuleName(name);//Modulname zum Logger hinzufügen
allLoggers.put(name, newLogger);//Eintragen des Loggers in Hashtable
return newLogger;//Rückgabe des neuen Loggers
}//end createLogger
Konsolenausgabe für LoggingImpl:
Serverimplementierungen konstruieren
LoggingServer erfolgreich gestartet!
MasterLogger in LoggingImpl initialisiert
init in MasterLogger
zu JavaLogger hinzugefügt.
Level zu JavaLogger gesetzt
MasterLogger in LoggingImpl erstellt
in LoggingImpl - getLoggerForModule
logging.CoyoteLogger@181afa3 getLoggerForModule