AMETAS.servicedev
Class AMETASServiceManager

java.lang.Object
  extended byAMETAS.place.AMETASPlaceUser
      extended byAMETAS.servicedev.AMETASServiceManager
All Implemented Interfaces:
AMETASNotifiable, java.io.Serializable

public class AMETASServiceManager
extends AMETASPlaceUser
implements AMETASNotifiable

Verwaltet ein Dienstobjekt. ServiceManager gehören neben Agenten und Benutzeradaptern zu den Stellennutzern, sie liegen alle auf derselben Ebene. Sie kommunizieren über das Nachrichtensystem der Stelle und werden in der Stelle auf die gleiche Art verwaltet. Ein Objekt dieser Klasse verwaltet einen Dienst, der als AMETASServiceObject implementiert ist. Es regelt all die Dinge, um die sich der Entwickler des Dienstes nicht kümmern sollte und bietet eine einfache Schnittstelle zum ServiceObject an. Der Entwickler implementiert das ServiceObject. Der ServiceManager lädt das ServiceObject, holt aus ihm die Dienstbeschreibung und meldet mit dieser den Dienst beim Dienstvermittler der Stelle an. Er hört nun auf Dienstanfragen von anderen PlaceUsern und gibt die wesentlichen Teile dieser Nachricht an das ServiceObject weiter, welches die Dienstanfrage bearbeitet und eine Antwort generiert, die es dann dem ServiceManager zur Auslieferung an den Klienten übergibt. Je nach Interaktiontyp des ServiceObject verwaltet der Manager dieses auf unterschiedliche Weise. So werden z.B. bei einem NON_SHARED_SESSION-ServiceObject alle derzeit aktiven Objekte in einem Hashtable gehalten und bei einer Dienstanfrage wird überprüft, ob der Klient sich bereits mit einem ServiceObject in einer Sitzung befindet. Ist dies der Fall, so wird ihm dieses ServiceObject erneut zugeordnet.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class AMETAS.place.AMETASPlaceUser
m_drvPU
 
Constructor Summary
AMETASServiceManager(java.lang.String sServiceName, java.lang.Class clsService, AMETASPrivilegeList prlRequired, java.util.Vector vctServiceParams)
          Erzeugt einen neuen ServiceManager.
 
Method Summary
 boolean accessControlEnabled()
          Gibt an, ob die Zugriffskontrolle aktiv ist.
 void bookAccount(AMETASPlaceUserID idClient)
          Wird vom Dienstobjekt aufgerufen, um eine Abrechnung für die Nutzung durchzuführen.
 void cleanup()
          Reinigt die Tabelle der akzeptierten PUIDs.
protected  int dispatchMessage(AMETASMessage mes)
          Wird von notifyListener aufgerufen.
 void enableAccessControl(boolean bOn)
          Aktiviert die Zugriffskontrolle.
 AMETASServiceManagerDriverIf getDriver()
          Liefert den Treiber dieses ServiceManagers.
 AMETASPlace getPlace()
          Liefert eine Referenz auf die Stelle.
 java.lang.ClassLoader getPULoader()
          Liefert den Klassenlader.
 void invoke()
          Startet den ServiceManager.
 void notifyListener(AMETASEvent evt)
          Wird von PostOffice der Stelle aufgerufen, wenn eine Nachricht für diesen ServiceManager eintrifft.
 void serviceError(AMETASPlaceUserIDMask idmClient, AMETASMessageID midRequest, java.lang.String sError, java.lang.String sErrorDetail)
          Wird von diesem Service aufgerufen, wenn ein Fehler auftrat und der Auftrag nicht erledigt werden konnte.
 void setDriverIf(AMETASServiceManagerDriverIf drv)
          Setzt die Treiberschnittstelle dieses Stellennutzers.
 java.lang.String toString()
          Liefert eine Stringrepräsentation dieses ServiceManagers zurück.
 
Methods inherited from class AMETAS.place.AMETASPlaceUser
checkPermission, getID, getName, getPUDriverIf, getSignableData, handleApplicationMessage, handleCustomMessage, handleMessageMessage, handlePlaceMessage, handleSecurityMessage, handleServiceMessage, handleTradingMessage, output, recoverError, specializeTypes, submitMessage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AMETASServiceManager

public AMETASServiceManager(java.lang.String sServiceName,
                            java.lang.Class clsService,
                            AMETASPrivilegeList prlRequired,
                            java.util.Vector vctServiceParams)
Erzeugt einen neuen ServiceManager.

Parameters:
sServiceName - Name des Dienstes inklusive Parameterkennung.
clsService - Dienstklasse.
prlRequired - Erforderliche Privilegien zur Nutzung des Dienstes.
vctServiceParams - Parameter des Dienstes.
Method Detail

enableAccessControl

public void enableAccessControl(boolean bOn)
Aktiviert die Zugriffskontrolle. Der Dienstzugriff wird nur erlaubt, wenn der Klient die nötigen Rechte besitzt. Diese Methode sollte vom ServiceObject aufgerufen werden.

Parameters:
bOn - wenn true, ist die Zugriffskontrolle aktiv.

getDriver

public AMETASServiceManagerDriverIf getDriver()
Liefert den Treiber dieses ServiceManagers.

Returns:
Treiber des ServiceManagers.

setDriverIf

public void setDriverIf(AMETASServiceManagerDriverIf drv)
Setzt die Treiberschnittstelle dieses Stellennutzers. Dies ist nur einmal möglich und wird durch den Treiber vorgenommen.

Parameters:
drv - Treiberschnittstelle des ServiceManagers.
Throws:
java.lang.SecurityException - wenn versucht wird, die Einstellung zu ändern.

accessControlEnabled

public boolean accessControlEnabled()
Gibt an, ob die Zugriffskontrolle aktiv ist.

Returns:
true, wenn die Zugriffskontrolle aktiv ist, sonst false.

invoke

public void invoke()
Startet den ServiceManager. Der ServiceManger wird zunächst als EventListener für an ihn gerichtete Nachrichten registriert. Dann wird eine Instanz des Dienstobjekts erzeugt, aus der die Typbeschreibung gelesen wird. Es wird eine Beschreibung aus dem SPU-Container geholt; wenn dort nichts gefunden wird, dann wird eine Standardbeschreibung generiert, die Mediator-abhängig ist. Der Manager wartet nun für eine bestimmte Zeit auf Anfragen. Diese Zeit kann in der Dienstbeschreibung definiert werden. Ist es ein SESSION-Diensttyp, dann bleibt der Manager so lange aktiv, bis die letzte Sitzung abgeschlossen ist. Anderenfalls läuft die Wartezeit unmittelbar nach dem Aufruf ab. Wenn bis zum Verstreichen kein Klient eine Anfrage stellte, beendet sich der Dienstmanager. Einen weiteren Aufruf auf den Dienst kann ein Klient dann nur erfolgreich stellen, wenn der Dienstmanager von der Stelle wieder aktiviert wird.

Specified by:
invoke in class AMETASPlaceUser
See Also:
AMETASServiceObject, AMETASServiceDescription

notifyListener

public void notifyListener(AMETASEvent evt)
Wird von PostOffice der Stelle aufgerufen, wenn eine Nachricht für diesen ServiceManager eintrifft. Jeder ServiceManager ist ein EventListener. Ein Klient stellt eine Anfrage in Form einer Nachricht und der Dienst wird durch notifyListener über das Eintreffen dieser Nachricht informiert und aktiviert. Er bearbeitet die Anfrage, legt das Ergebnis in das PostOffice und geht wieder in den Wartezustand, bis die nächste Anfrage kommt.

Specified by:
notifyListener in interface AMETASNotifiable
Parameters:
evt - AMETASEvent, der durch das Eintreffen der Nachricht ausgelöst wurde.

dispatchMessage

protected int dispatchMessage(AMETASMessage mes)
Wird von notifyListener aufgerufen. Führt ein Dispatching der eingetroffenen Nachricht durch und startet entsprechende Aktionen abhängig vom Interaktionstyp des verwalteten ServiceObjects.

Overrides:
dispatchMessage in class AMETASPlaceUser
Parameters:
mes - Eingetroffene Nachricht.
Returns:
AMETASErrors.OK, wenn alles geklappt hat; AMETASErrors.BAD_PARAMS, wenn die Nachricht eine keine REQUEST- oder EXIT_SESSION-Nachricht war; AMETASErrors.CREATION_FAILED, wenn die Erzeugung des Dienstobjekts fehlschlug.
See Also:
AMETASPlaceUser.dispatchMessage(AMETAS.data.AMETASMessage)

serviceError

public void serviceError(AMETASPlaceUserIDMask idmClient,
                         AMETASMessageID midRequest,
                         java.lang.String sError,
                         java.lang.String sErrorDetail)
Wird von diesem Service aufgerufen, wenn ein Fehler auftrat und der Auftrag nicht erledigt werden konnte. Es wird eine Nachricht für den Klienten in das PostOffice gelegt, in der die Fehlerquelle näher spezifiziert ist. Die Nutzlast dieser Nachricht enthält als erstes Objekt einen Fehlercode und als zweites Objekt eine kurze Textnachricht.

Parameters:
idmClient - Zu adressierende Klienten.
midRequest - ID der Anfrage, die zu einem Fehler führte.
sError - Fehlerspezifikation.
sErrorDetail - Detailnachricht.

bookAccount

public void bookAccount(AMETASPlaceUserID idClient)
Wird vom Dienstobjekt aufgerufen, um eine Abrechnung für die Nutzung durchzuführen. Die Kosten für die Nutzung stehen in der Dienstbeschreibung.

Parameters:
idClient - Klient.
See Also:
AMETASServiceDescription

getPlace

public AMETASPlace getPlace()
Liefert eine Referenz auf die Stelle. Hiermit wird jedem ServiceObject der freie Zugriff auf die Stelle ermöglicht.

Returns:
Referenz auf die Stelle.

getPULoader

public java.lang.ClassLoader getPULoader()
Liefert den Klassenlader. Dies ist bei Diensten nicht der Klassenlader des Stellennutzers (welcher der Systemlader ist), sondern der verwalteten Dienstobjekte.

Overrides:
getPULoader in class AMETASPlaceUser
Returns:
Klassenlader.

cleanup

public void cleanup()
Reinigt die Tabelle der akzeptierten PUIDs.


toString

public java.lang.String toString()
Liefert eine Stringrepräsentation dieses ServiceManagers zurück. Dabei wird die toString-Methode des/der ServiceObjects aufgerufen, um dessen/deren Stringrepräsentation in den Rückgabewert einzubeziehen.

Overrides:
toString in class AMETASPlaceUser
Returns:
Stringrepräsention.