Class LogServer

java.lang.Object
  extended by de.frame4j.util.App
      extended by LogServer
All Implemented Interfaces:
AttrSettable, TextHelper.MessageComponents, UIInfo, ActionListener, Runnable, EventListener, DynamicMBean

@MinDoc(copyright="Copyright 2005, 2006, 2009  A. Weinert",
        author="Albrecht Weinert",
        version="V.2",
        lastModified="12.02.2010",
        lastModifiedBy="A. Weinert",
        usage="java.exe or jmx.bat LogServer [optionen] \n java LogServer -?",
        purpose="Server application f. admin, log, ..")
public final class LogServer
extends App
implements Runnable

Server für Anmeldung, Log und dergleichen.

Dies ist eine Server-Anwendung, die anderen Anwendungen und Servlets administrative Dienste anbietet bzw. ermöglicht. Hierzu läuft sie im Allgemeinen

Mit den so gegebenen Möglichkeiten bietet sie dann Die Anwendung wartet auf Aufträge in der Form Meldungen zu den jeweiligen Vorgängen werden mit Zeitstempel und Sequenznummern versehen und geloggt. Das Loggen erfolgt in die Log-Ausgabe (App.log, Konsole und ggf. Datei) und ggf. auch in eine Log-Datenbank (dbServer->dbSchema->dBtableName).

Zur Ausführung von -workstn und -command wird unter den meisten Umständen ein eigener Thread gestartet. Alles Andere läuft im (single accept) Thread dieser Server-Anwendung. Dieser Server zur Unterstützung relativ seltener administrativer Vorgänge verschwendet keine Ressourcen, um hohe und konkurrierende Lastfälle besser abfahren zu können.

Die textuelle Rückantwort (als Byte-Strom) an den aufrufenden Client besteht aus Die Statuszeile hat den Aufbau:
  returnKeyword returnCode -auftrag reqCnt : [optional weitere Statusangaben ..

returnKeyword = "error" bedeutet, dass der gestellte Auftrag gar nicht versucht werden konnte oder durfte (Syntax, Authentifizierung, timeout oder andere grundsätzliche Probleme).

returnKeyword = "failure" bedeutet, dass der gestellte Auftrag versucht wurde, aber dessen wunschgemäße Ausführung gescheitert ist .

Jedes andere returnKeyword bedeutet, dass der gewünschte Auftrag vollständig durchgeführt wurde. Ob dies mit allen vom Client erhofften Ergebnissen geschah, muss evtl. den übrigen Rückgaben entnommen werden.

returnCode ist ein ganzzahliger Rückgabewert z.B. des aufgerufenen Prozesses; 0 bedeutet hier i.A. voller Erfolg.

-auftrag ist die Wiederholung des Kundenauftrags (wie -workstn).

reqCnt ist die Seriennummerierung der Aufträge an diesen Server seit dessen Start. Diese Zahl wird mit geloggt, auch in der Datenbank.

Der Doppelpunkt trennt den eben beschrieben Standardaufbau der Rückantwort von dem Teil der auftrags- und prozessspezifisch ist.


Auftrag "-logon":
Handelt sich um eine von einem zentralen LDAP-Server bestätigte Namen-Passwort-Paarung (-logon ... -acceptLDAP bzw. -logon ... -ldapAccept), so wird dieses Passwort password (bzw. encryptPassw) für Sicherheitsprinzipals des Namens user übernommen. Aufrufe der ersten drei Formen kann die Anwendung LogAlert (das Servlet LogCheck u.A.) erzeugen.

Zur Sicherheit wird die Authentifizierung des Name-Passwort-Paares gegen das AD und evtl. gegen den (Firmen-) LDAP-Server überprüft. Die Synchronisierung — sprich das Setzen des Passworts — wird nur ausgeführt, falls das Passwort beim AD ungültig und beim (Firmen-)LDAP gültig ist.

Auftrag "-logoff":
Dieser Auftrag wird lediglich ("as is") geloggt.
Spätere Versionen können zentrale Aufräumarbeiten für das Abmelden eines Nutzers user von der Arbeitsstation computer ergänzen.

Auftrag "-workstn":
Mit einem Parameter -on bzw. -off wird versucht, die Workstation computer (remote) ein- bzw. auszuschalten. Für das Ausschalten ist der Computername computer wesentlich. Für das Einschalten die MAC-Adresse.
Die MAC-Adresse ist in der Form 00:04:76:19:5C:5F oder 00-04-76-19-5C-5F oder 00 04 76 19 5C 5F anzugeben.
Stimmt weder Form noch Länge (indem da beispielsweise -translate steht), wird versucht, die MAC-Adresse mit der Datei macTranslateFile zu ermitteln.

Auftrag "-account":
Das angegebene Nutzerkonto user wird gesperrt bzw. freigegeben.

Hinweise:

Das Passwort für das Ein- und Ausschalten von Konten und Rechnern ist entweder das des für diese Handlung berechtigten (Domain-) Nutzers oder einer vertrauenswürdigen Webanwendung (Servlet), die ihrerseits die Berechtigung geprüft hat.

Zu dieser Anwendung LogServer (Quelle) gehört (als integraler Bestandteil) eine Properties-Datei namens LogServer.properties. Sie ist vorzugsweise ins selbe .jar-File wie diese Anwendung selbst zu platzieren.

Diese Anwendung funktioniert (Stand 2006) nur unter Windows-Server-Betriebssystemen, deren Tools sie (indirekt via AdmHelper) aufruft.


© Copyright 2005, 2006   Albrecht Weinert

See Also:
App, LogAlert

Field Summary
 String accountPassWord
          Passwort (für -acount-Befehle).
 String dbPassWord
          DB-Nutzer-Passwort (für DB-Logging).
 String dbSchema
          DB-Schema (für DB-Logging).
 String dbServer
          DB-Server (für DB-Logging).
 String dBtableName
          DB-Tabellenname (für DB-Logging).
 String dbUser
          DB-Nutzer (für DB-Logging).
 String ldap1URL
          LDAP-Server für (grundsätzliche / Firmen-) Authentifizierung.
 String ldap1UserBase
          LDAP-OU, für zu authentifizierende Benutzer (Firmen-LDAP).
 String ldapADurl
          LDAP-Server für (zusätzliche / Domain-) Authentifizierung.
 int logServerPort
          LogServer (Port).
 String macTranslateFile
          Übersetzungsdatei MAC-Adresse - Computername.
 boolean useJMX
          JMX-Server nutzen / generieren.
 String workstnPassWord
          Passwort (für -workstn-Befehle).
 
Fields inherited from class de.frame4j.util.App
ano, appBase, appIO, appStartTime, args, bgColor, err, fullClassName, help, icon, INIT_ERROR, jmxRemoteNote, JOB_DONE_OK, log, LOG_OUT_ERROR, MAIN_THREAD_EXC, mainThread, myClass, myFrame, name, NO_PARS_ERROR, objectName, out, outMode, packName, prop, retCode, runFlag, shortClassName, title, verbose, verbosity
 
Fields inherited from interface de.frame4j.net.AttrSettable
ILLEGAL_TYPE, ILLEGAL_VALUE, NO_ATTRIBUTE, NO_KNOWN_ATTRIBUTE, NO_VALUE, OK
 
Constructor Summary
LogServer()
           
 
Method Summary
 int doIt()
          Arbeitsmethode von LogServer.
static void main(String[] args)
          Startmethode von LogServer.
 void run()
          Socket connection thread implementation.
 
Methods inherited from class de.frame4j.util.App
actionPerformed, allowNoPropertiesFile, clientOrder, condHelpLog, connect, errMeld, errMeld, errorExit, errorExit, errorExit, errorText, formMessage, formMessage, getAbout, getAboutText, getActTime, getAppLogger, getAppStartTime, getArgs, getAttribute, getAttributes, getAuthor, getCopyright, getDbLogger, getExecTimeMs, getExecTimeString, getHelp, getHelpText, getIcon, getLanguage, getLogHandler, getMBeanInfo, getMessageComponent, getMessageComponentsLength, getMyFrame, getName, getNameWithVersDate, getOutMode, getProp, getPurpose, getStartTime, getStateString, getTitle, getUsage, getVerbosity, getVerbosityString, getVersDate, getXMLinput, go, go, go, haveIcon, invoke, isDebug, isHelp, isHelpLog, isNormal, isRunFlag, isSilent, isTest, isVerbose, logVerbose, logVerbose, makeDbLogger, makeMenuBar, makeMenuBar, makeStatusTextEnd, makeStatusTextStart, messageFormat, normalExit, parsePartial, performeAction, postDeregister, postRegister, preRegister, queueAction, registerAsMBean, setAboutText, setAttribute, setAttribute, setAttribute, setAttributes, setAuthor, setBgColor, setCodePages, setCopyright, setHelp, setJmxRemoteNote, setLogOut2, setName, setOutMode, setOutMode, setPurpose, setTitle, setUsage, setVerbose, setVerbose, setVerbosity, setVerbosity, setVerbosityString, setVersDate, stop, threeLineEndMsg, toString, twoLineEndMsg, twoLineStartMsg, valueLang, valueLang, wakeMainThread
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logServerPort

public int logServerPort
LogServer (Port).

default: 14577


dbServer

public String dbServer
DB-Server (für DB-Logging).

default: pd321s


dbSchema

public String dbSchema
DB-Schema (für DB-Logging).

default: appLoggs


dbUser

public String dbUser
DB-Nutzer (für DB-Logging).

default: jLogger


dbPassWord

public String dbPassWord
DB-Nutzer-Passwort (für DB-Logging).

default: secret


accountPassWord

public String accountPassWord
Passwort (für -acount-Befehle).

Nie null!

default: secret


workstnPassWord

public String workstnPassWord
Passwort (für -workstn-Befehle).

Nie null!

default: servlet


macTranslateFile

public String macTranslateFile
Übersetzungsdatei MAC-Adresse - Computername.

Achtung: Wird für Übersetzungszwecke ggf. nur im Anlauf ausgewertet.

Der Dateiinhalt wird zeilenweise in einer Form erwartet, die mit der kompatibel ist, die das Programm wol.exe (wake on LAN) bei seinem Dateiparameter erwartet:
  # mac.txt - mac addresses for wakonlan
  00:04:76:19:6D:E7 #  pd3w01
  00:04:76:19:6D:D4 #  pd3w02 
  00:..... u.s.w.
  
  Diese (wol-) Form wird für diese Anwendung auf diese Regeln reduziert:
  1. .) # vorne oder eine offensichtlich syntaktisch falsche MAC-Adresse heißt Kommentarzeile.
  2. .) MAC-Adresse steht vorne, Computername hinten.
  3. .) Vor dem Computernamen steht mindestens ein white space.
  4. .) Drumherum und dazwischen beliebig viel white space.
  5. .) Zwischen Mac-Adresse und Computername stehendes wird ignoriert.

  6. default: C:\bat\mac.txt

    See Also:
    TextHelper.lastIndexOfWS(CharSequence, int)

dBtableName

public String dBtableName
DB-Tabellenname (für DB-Logging).

default: logDomain


ldap1URL

public String ldap1URL
LDAP-Server für (grundsätzliche / Firmen-) Authentifizierung.

default: ldap://ldap.fh-bochum.de:389

See Also:
ldapADurl

ldap1UserBase

public String ldap1UserBase
LDAP-OU, für zu authentifizierende Benutzer (Firmen-LDAP).

default: ou=People,dc=fh-bochum,dc=de

See Also:
ldap1URL

ldapADurl

public String ldapADurl
LDAP-Server für (zusätzliche / Domain-) Authentifizierung.

default: ldap://193.175.115.2:389
alternativ: ldap://193.175.113.245:389

See Also:
LDAPauthRead.authBy(javax.naming.ldap.InitialLdapContext, CharSequence, CharSequence)

useJMX

public boolean useJMX
JMX-Server nutzen / generieren.

Constructor Detail

LogServer

public LogServer()
Method Detail

main

public static void main(String[] args)
Startmethode von LogServer.

Die Anwendung signalisiert die Antwort / Reaktion über Exit-Kodes.

Parameters:
args - Kommandozeilenparameter
Aufruf : LogServer [@propFile] [optionen] [port]

doIt

public int doIt()
Arbeitsmethode von LogServer.

Specified by:
doIt in class App
Returns:
Exit-Kode

run

public void run()
Socket connection thread implementation.

Specified by:
run in interface Runnable