|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectde.frame4j.util.App
de.a_weinert.WinApp
de.a_weinert.apps.FileServices
public class FileServices
Aufdat- und Aufräumdienste für Dateien.
Einleitung
Diese Anwendung kann im Dauerbetrieb auf einem Rechner laufen, der im
folgenden Data-Server genannt wird. Dies kann ein
Windows-NT/XP/2000/2003-PC, ein NT/200/2003-Server oder (fast) jede
andere Plattform mit Java (JVM) sein. Auf diesem Data-Server realisiert
diese Anwendung verschiedene einmalige oder zyklische Dateiaufdatdienste,
die sehr granular konfiguriert werden können.
Neben üblichen Archivierungs- und Sicherungsfunktionen kann man
FileServices auch dazu verwenden, Dateien von WWW-Lieferanten aus dem
Data-Server in einen WWW-Server zu transportieren.
Die Idee dahinter:
Die Anwender erhalten fein verteilte (NTFS-) Schreibrechte
auf dem Data-Server, sie haben aber keine Rechte auf dem eigentlichen
WWW-Server. Die feingranularen Dateirechte lassen sich im Allgemeinen
mit NT-/2000-/2003-ACLS (access control lists, NTFS) gut realisieren.
Linux-/Unix-Systeme, meist ja die Heimat der WWW-Sever, sind auf diesem
Gebiet (mit den steinzeitlichen 9 Rechtebits) ja vollkommen
rückständig. (Genauso kritisch ist natürlich anzumerken, dass die
Java-File-Klassen selbst auch keine Dateisystem-ACLs handhaben
können.)
Alle Dienste des Programms werden über Properties gesteuert, die zunächst
aus der Datei FileServices.properties im Startverzeichnis der Anwendung,
aus ...\jre\lib\ oder aus dem .jar-File dieser Anwendung geladen und
danach ggf. mit Startparametern (direkt und/oder durch zusätzliche
Properties-Datei) verändert werden. Alle hier genannten Namen,
Verzeichnisse Listen von Dateitypen etc. sind Beispiele; die
tatsächliche
Einstellung erfolgt durch eine zugehörige Property (im folgenden jeweils
mit ihrem %Namen% in Prozentzeichen geklammert bezeichnet).
Zu Einzelheiten siehe die Datei FileServices.properties, die ein
integraler Bestandteil dieser Anwendung ist.
Der Datei-Aufdatdienst
Ein Aufdatdienst kopiert nach gewissen Kriterien Dateien von einem
Quell- in ein Zielverzeichnis; dort "verdrängte" Dateien
können in ein Backup-Verzeichnis kopiert werden.
Mehrere solche Dienste sind flexibel konfigurierbar.
Für jeden Aufdatdienst können Quell-, Ziel- und optional auch
Backup-Verzeichnis über Properties angegeben werden :
Ohne %bvz0%-Angabe entfällt das weiter Schieben in ein Backup-Verzeichnis. Die 0 ist nur ein Beispiel. Hier kann 0 bis 99 stehen (< 10 einstellig).Quellverzeichnis: %qvz0% z.B. D:\WWW\AktuellerStand Zielverzeichnis: %zvz0% z.B. W: Backup-Verzeichnis: %bvz0% z.B. D:\WWW\WWWBack
Beispielauszug aus einer Properties-Datei%types0% html;gif;jpg;css # nur diese Dateitypen aufdaten, # default die Typen %types% %lcNames0% true # Erzeugung von Dateien (und ggf. von neuen vorgelagerten # Verzeichnissen) mit klein geschriebenen Dateinamen, # default %lcNames%; %lcnames default false %noLCforTypes0% .java;.class;.html # Im Falle %lcNames0% true trotzdem keine Kleinschreibung (nur) # des Dateinamens für die angegebenen Dateitypen # default %noLCforType%; %noLCforTypes default .java;.class %fast0% true # Abarbeiten im schnelleren Takt; default seltener %delEmpty0% true # Löschen von Dateien der Länge 0 im # Zielverzeichnis, default kein Löschen %clean0% false # Löschen von an der Quelle nicht vorhandenen Dateien im # Zielverzeichnis, default kein Säubern %noRec0% true # keine Rekursion in Unterverzeichnisse # default !%recursion%; %recursion% default true %noMd0% true # kein Erzeugen nicht vorhandener Unterverzeichnisse # default !%noMd%; %noMd% default false %noNew0% true # kein Erzeugen nicht vorhandener Dateien # (nur ggf. Aktualisieren) # default !%noNew%; %noNew% default false %noDif0% true # kein Mindestaltersunterschied fürs Aufdaten # (default false) %difOld0% 60000 # Mindestaltersunterschied 60000 ms = 1 min # default %difOld%; %difOld% default 120000 = 2 Minuten %thoseDirs0% work? # nur aus Verzeichnissen work? aufdaten # default %dirCritWild%; # %dirCritWild% ist default null also alle %omitDirs0% D:\Programme;WinNT # nicht aus Verzeichnissen, die D:\Programme oder WinNT # enthalten, aufdaten. # default %dirCritOmit%; # %dirCritOmit% default null also kein Ausschluss
#Zusatzdienst 4 (pl server web ltz) qvz4= D:\\AktuellerStand\\pl\\ zvz4= W:\\pl bvz4= LetzterStand\\pl types4= html;css;jpg ### oder statt qvz4= und types4= nur qvz4= D:\\AktuellerStand\\pl\\html;css;jpg
Beispielauszug aus einer Properties-Datei%clean0% true # bei true Aufräum- sonst Aufdatdienst # default false %delEmpty0% true # Löschen von (ggf. nach dem Aufräumen) leeren Zielverzeichnissen, # default kein Löschen leerer Verzeichnisse %noMd0% # bei Aufräumdienst bedeutungslos %noNew0% # bei Aufräumdienst bedeutungslos %noDif0% # bei Aufräumdienst bedeutungslos %difOld0% # bei Aufräumdienst bedeutungslos
#Aufräumdienst 40 (pl server web ltz) qvz40= D:\\AktuellerStand\\pl\\ zvz40= W:\\pl bvz40= LetzterStand\\pl clean40= true delEmpty40= true
WinApp beruhenden graphischen Bedienschnittstelle.
Gibt es zyklische Aufdatdienste, läuft FileServices im Dauerbetrieb und
ist zunächst nur durch diese graphische Schnittstelle zu beeinflussen und
insbesondere zu beenden.clientOrder(). Diese und weitere Bedien- und Beobachtungsmöglichkeiten
können über einen (JMX-) WWW-Server (siehe
ServeJMBW) verfügbar gemacht werden. Dieser wird
gestartet und genutzt, wenn im Dauerbetrieb useJMX true
ist.FileServices läuft, auf dem
"Data-Server" ein.Öffentliche Objektvariable werden ggf. viaProp.setfields()gesetzt und auf öffentliche set-Methoden wird ggf. vonProp.setfields()zugegriffen.
de.a_weinert,
App,
Prop,
DataFile,
FileService| Field Summary | |
|---|---|
int |
atHour
Die Stunde für Aufdatdienste. |
int |
atMinute
Die Minute für Aufdatdienste. |
boolean |
delEmpty
Löschen von Dateien der Länge 0 im Zielverzeichnis. |
int |
difOld
Mindestaltersunterschied für Verdrängen (Aufdatdienst) / ms. default: 120000 (120s = 2 min) |
int |
fastRate
Die Periode der häufigen Aufdatdienste (in Minuten). |
boolean |
fastSilent
Keine Meldungen bei häufigen Aufdatdiensten ("Schnelldiensten"). |
boolean |
lcNames
Beim Aufdaten Datei- und Verzeichnisnamen in Kleinschrift erzeugen. |
boolean |
noClean
Sperren der Aufräumdienste. |
String |
noLCforTypes
Kein Erzeugen von Dateien bestimmter Typen in Kleinbuchstaben. Diese Eigenschaft noLCforTypes wirkt jeweils nur wenn
sie ungleich null ist und wenn lcNames true ist.Falls in diesem Falle die (zu erzeugende) Datei von einem dieser Eigenschaft entsprechenden Typ ist, werden zwar ggf. |
boolean |
noMd
Kein Erzeugen noch nicht vorhandener Verzeichnisse. |
boolean |
noNew
Kein Erzeugen noch nicht vorhandener Dateien. |
boolean |
noOut
Keine Normalausgabe (z.B. für javaw-Start). |
int |
rate
Die Periode der Aufdatdienste (in Minuten). |
boolean |
recursion
Beim Aufdaten default auch rekursiv in Unterverzeichnisse. |
boolean |
useJMX
JMX-Server nutzen / generieren. |
protected String |
wedaClock
Interner Merker für nutzersprachabhängiges Datum/Uhrzeit-Format. |
boolean |
zoneSafe
Besondere Behandlung von Altersunterschieden im Aufdatdienst. |
| Fields inherited from class de.a_weinert.WinApp |
|---|
actSize, backGround, canvas, fileDialog, icon, killFast, lastShownText, LOG_SHOW_SIZE, menuBar, myCntPane, myFrame, OUT_SHOW_SIZE, preferredSize, showOutAuto, showOutConti, textPanel, textPanelCont, textPanelFont, textPanelFontSize, tickThread, twoTicks, xmlMBdescr |
| Fields inherited from class de.frame4j.util.App |
|---|
ano, appBase, appIO, appStartTime, args, bgColor, err, fullClassName, help, INIT_ERROR, jmxRemoteNote, JOB_DONE_OK, log, LOG_OUT_ERROR, MAIN_THREAD_EXC, mainThread, myClass, 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 | |
|---|---|
FileServices()
Konstruktor von FileServices. |
|
| Method Summary | |
|---|---|
String |
clientOrder(String command)
Kommando von einem Klient an dieses FileServices-Objekt. |
int |
doIt()
Arbeitsmethode von FileServices. |
Object |
getAttribute(String attName)
DynamicMBean - Implementierung. |
String |
getStateString()
Status dieses JMBW-Objekts als Text . |
int |
initWinApp()
(Zusätzliche) Initialisierungen vor dem sichtbar Machen. |
Object |
invoke(String operationName,
Object[] params,
String[] signature)
DynamicMBean - Implementierung. |
boolean |
isNnoClean()
Sperren der Aufräumdienste. |
static void |
main(String[] args)
Startmethode von FileServices. |
boolean |
performeAction(String command,
AWTEvent e)
Ausführung der Reaktion auf eine Aktion (i.A. eines Menus). |
void |
setAtHour(CharSequence atHour)
Die Stunde für Aufdatdienste setzen. |
void |
setAtMinute(CharSequence atMinute)
Die Minute für Aufdatdienste setzen. |
protected int |
setAttribute(String name,
char name0,
Object value,
Class<?> vClass,
boolean isNull,
boolean isStringVal)
DynamicMBean - indirekte Implementierung. |
void |
setFastSilent(boolean fastSilent)
Keine Meldungen bei häufigen Aufdatdiensten ("Schnelldiensten"). |
void |
setNoClean(boolean noClean)
Sperren der Aufräumdienste An / Aus. |
boolean |
showServices(StringBuilder oPw)
Anzeigen der Dienste (mit Rekursionskontrolle). |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface java.awt.event.ActionListener |
|---|
actionPerformed |
| Field Detail |
|---|
public boolean noOut
public boolean fastSilent
public boolean lcNames
public String noLCforTypes
noLCforTypes wirkt jeweils nur wenn
sie ungleich null ist und wenn lcNames true ist.
public boolean recursion
public int atHour
rate wird auf 24*60 = 1440, d.h auf täglich,
gesetzt.
public int atMinute
rate wird auf 60 gesetzt, falls es < 115 ist, ansonsten
wird es auf volle Stunden gerundet.
public int rate
atMinute oder
atHour erhöht diesen Wert auf mindestens
eine Stunde beziehungsweise setzt ihn auf einen Tag.
public int fastRate
rate !)
Ein negativer Wert oder 0 heißt so oft, wie die
normalen Aufdatdienste (rate).
public boolean noClean
public boolean delEmpty
public boolean zoneSafe
public int difOld
public boolean noMd
public boolean noNew
protected String wedaClock
valueLang("wedaclock", "D, d.m.Y, H:i:s")
public boolean useJMX
| Constructor Detail |
|---|
public FileServices()
WinApp mit
super(81920, -1)
auf um einen 80K großen Puffer für die Protokoll-Ausgabe bzw.
-Anzeige bereit zustellen.
| Method Detail |
|---|
public void setFastSilent(boolean fastSilent)
public void setAtHour(CharSequence atHour)
atHour entsprechend gesetzt wird. Eine führende 0 ist bei
"00" bis "09" erlaubt. Ggf. führendes und
nachlaufendes whitespace wird ignoriert.atHour nicht, alles übrige (d.h. alles außerhalb von
0 bzw. 00 bis 23 setzt atHour auf -1.
public void setAtMinute(CharSequence atMinute)
atMinute entsprechend gesetzt wird. Eine führende 0 ist bei
"00" bis "09" erlaubt. Ggf. führendes und
nachlaufendes whitespace wird ignoriert.atMinute nicht, alles übrige (d.h. alles außerhalb von
0 bzw. 00 bis 59 setzt atMinute auf -1.
public final boolean isNnoClean()
public void setNoClean(boolean noClean)
public static void main(String[] args)
args - Kommandozeilen-Parameter
public boolean performeAction(String command,
AWTEvent e)
dort verwirklichten
Kommandos hinaus reagiert sie auf die Kommandos:
performeAction in class WinAppcommand - Das "action command"e - ggf. ein ActionEvent oder ein ItemEventpublic boolean showServices(StringBuilder oPw)
public int initWinApp()
initWinApp in class WinApppublic int doIt()
doIt in class WinAppWinApp.WinApp(),
App.JOB_DONE_OKpublic String clientOrder(String command)
clientOrder()
in App.
clientOrder in class Apppublic String getStateString()
getStateString in class App
protected int setAttribute(String name,
char name0,
Object value,
Class<?> vClass,
boolean isNull,
boolean isStringVal)
App.setAttribute(name, value) verwirklichten hinaus alle schreibenden
Zugriffe auf folgende Attribute: fastSilent, doClean (als !noclean),
delEmpty .
setAttribute in class Appname - name of the property (never empty)name0 - first character of name (>= a)value - the (new) value of the propertyvClass - the (original) class of value (or null if isNull)isNull - true if value is nullisStringVal - true if value is of type StringApp.setAttribute(String, Object),
public Object getAttribute(String attName)
throws AttributeNotFoundException,
MBeanException,
ReflectionException
App.getAttribute(attName)
verwirklichten hinaus alle lesenden Zugriffe auf folgende Attribute:
fastSilent, doClean (als !noclean), delEmpty .
getAttribute in interface DynamicMBeangetAttribute in class AppAttributeNotFoundException
MBeanException
ReflectionException
public Object invoke(String operationName,
Object[] params,
String[] signature)
throws MBeanException,
ReflectionException
WinApp bzw.
App.invoke()
geerbten Operationen:
invoke in interface DynamicMBeaninvoke in class AppMBeanException
ReflectionException
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||