JBoss-Anwendung soll im Singleton-Mode laufen

andisima

Mitglied
Hi,
ich bin nicht wirklich firm in der JBoss-Programmierung - und doch ist es mir gelungen eine JBoss-Anwendung zu schreiben, die ein Verzeichnis nach .zip-Files durchsucht, um diese dann in ein anderes Verzeichnis auszupacken. Diese JBoss-Anwendung habe ich in einem (der beiden laufenden JBosse) deployed - und siehe da: Es funktioniert(e)...

Nun hat man die JBoss-Umgebung jedoch leider geändert - und beide JBosse benutzen das gleiche deploy-Verzeichnis. Die Auswirkung auf meine JBoss-Anwendung: Sie läuft in beiden JBossen gleichzeitig - und ich bekomme ständig Fehlermeldungen, die besagen, dass eine Datei nicht mehr gefunden wurde (klar - sie wurde von meiner JBoss-Anwendung im anderen JBoss bereits ausgepackt...).

Nach intensiver Google-Befragung - und dem studieren diverser Artikel (bei den meisten verstehe ich leider nur Bahnhof) habe ich zwar herausgefunden, dass meine JBoss-Anwendung im Singleton-Mode laufen muss - hingekriegt habe ich es aber nicht.

Ich habe es als POJO mit der "@Service(objectName = "myexample:service=UnZipper")"-Annotation probiert - doch leider hat das nichts gebracht...

Leider finde ich aber keine verständlichen, simplen Beispiele...

Kann mir bitte jemand ein WRIKLICH simples Beispiel bringen, das in einem Clustered-JBoss nur einmal laufen würde?

Vielen Dank schon mal an alle!
 
Zuletzt bearbeitet:

FArt

Top Contributor
Hi,
ich bin nicht wirklich firm in der JBoss-Programmierung - und doch ist es mir gelungen eine JBoss-Anwendung zu schreiben, die ein Verzeichnis nach .zip-Files durchsucht, um diese dann in ein anderes Verzeichnis auszupacken. Diese JBoss-Anwendung habe ich in einem (der beiden laufenden JBosse) deployed - und siehe da: Es funktioniert(e)...

Nun hat man die JBoss-Umgebung jedoch leider geändert - und beide JBosse benutzen das gleiche deploy-Verzeichnis. Die Auswirkung auf meine JBoss-Anwendung: Sie läuft in beiden JBossen gleichzeitig - und ich bekomme ständig Fehlermeldungen, die besagen, dass eine Datei nicht mehr gefunden wurde (klar - sie wurde von meiner JBoss-Anwendung im anderen JBoss bereits ausgepackt...).

Nach intensiver Google-Befragung - und dem studieren diverser Artikel (bei den meisten verstehe ich leider nur Bahnhof) habe ich zwar herausgefunden, dass meine JBoss-Anwendung im Singleton-Mode laufen muss - hingekriegt habe ich es aber nicht.

Ich habe es als POJO mit der "@Service(objectName = "myexample:service=UnZipper")"-Annotation probiert - doch leider hat das nichts gebracht...

Leider finde ich aber keine verständlichen, simplen Beispiele...

Kann mir bitte jemand ein WRIKLICH simples Beispiel bringen, das in einem Clustered-JBoss nur einmal laufen würde?

Vielen Dank schon mal an alle!

Aua... du hast keine Ahnung, sollst aber etwas relativ anspruchsvolles realisieren.

1. Anmerkung
Hier steht wirklich ganz genau wie es geht: Writing a Clustered HA Singleton Service - JBoss Community. Das solltest du hinbekommen oder die Finger davon lassen!

2. Anmerkung
Ohne die Theorie und die Spezifikationen zu kennen solltest du keine Enterpriseanwendungen realsieren, schon gar nicht in einer Clusterumgebung. Warum funktioniert eine EE Anwendung plötzlich nicht mehr? Weil der Zuständige sich mit EE nicht ausgekannt hat, die Spezifikationen nicht kennt und somit auch nicht berücksichtigt.

3. Anmerkung
Ich nehme an du meinst mit "JBoss Anwenung" einen Service und keine EJBs. In EJBs sind Fileoperationen verboten. Aber auch in einem Service (geclustert) sind Filezugriffe mit Vorsicht zu genießen. Wenn man um Filezugriffe nicht herumkommt, dann sollte man das über VFS machen. So wird hoffentlich verhindert, dass die Applikation nach einer (auch kleinen) Änderung an der Infrastruktur plötzlich wieder nicht funktioniert.
 
Zuletzt bearbeitet:

andisima

Mitglied
Vielen Dank für Ihre Antwort - der Link war sehr erfolgreich...

Zwischenzeitlich habe ich gelernt, dass ich einen Ressource-Adapter geschrieben habe :lol:

Ich habe einen Service daraus gemacht (war doch gar nicht so schwer) - und siehe da: Es funzt...

Für den Ressource-Adapter habe ich aber auch noch eine Lösung gefunden: Ich frage einfach via JMXConnector ab, ob der aktuelle JBoss der "Main"-JBoss ist. -Nur dann wird der Code ausgeführt...
 

FArt

Top Contributor
Zwischenzeitlich habe ich gelernt, dass ich einen Ressource-Adapter geschrieben habe :lol:
Ressourceadapter ist eine konsistente und sinnvolle Lösung für Zugriffe auf das Filesystem. Ich empfehle trotzdem die Verwendung des VFS, welches mit neueren Versionen des JBoss eingeführt wurde.

Ich frage einfach via JMXConnector ab, ob der aktuelle JBoss der "Main"-JBoss ist. -Nur dann wird der Code ausgeführt...
Funktioniert das auch dann noch sinnvoll, wenn der Masterknoten heruntergefahren wird und ein anderer Knoten dessen Aufgabe übernimmt?
Eigentlich sorgt der Applicationserver dafür, dass ein clusterweiter Singletonservice genau einmal im Cluster aktiv läuft.
 

andisima

Mitglied
Hi,

ich habe es so gelöst:

Auszug aus meiner "ZIPExtractorAdapter.java:
Java:
	...

	private boolean isOnMasterRunning = false;

	...

	public void run() {
		try {
			initialize(zipExtractorConfig, getInPathList(), getOutPathList(), getFileCntList(), getFileMaskList());
		} catch (Exception e1) {
			logger.error("Illegal configuration values:" + e1.getMessage());
		}
		ZIPExtractor zipExtract = new ZIPExtractor(zipExtractorConfig);
		while (isRunning) {
			try {
				JMXServiceURL jmxUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:10033/jmxrmi");
				JMXConnector jmxConn = JMXConnectorFactory.connect(jmxUrl);
				if (null != jmxConn) {
					MBeanServerConnection mbsc = jmxConn.getMBeanServerConnection();
					ObjectName objectName = new ObjectName("jboss.ha:service=HASingletonDeployer");
					if ("true".equalsIgnoreCase(mbsc.getAttribute(objectName, "MasterNode").toString())) {
						if (!isOnMasterRunning) {
							isOnMasterRunning = true;
							logger.info("ZIPExtractor is now running on host: " + 
									InetAddress.getLocalHost().getHostName());
						}
						zipExtract.startScan();
					}
					else {
						if (isOnMasterRunning) {
							isOnMasterRunning = false;
							logger.info("ZIPExtractor is no more running on host: " +
									InetAddress.getLocalHost().getHostName());
						}
					}
				    jmxConn.close();
				}
				else {
					logger.error("No connection to JMX-Connector ("+jmxUrl.toString()+") possible!");
				}
				Thread.sleep(5000);
			} catch (Exception e) {
				logger.error("Error in run method: " + e); //.getMessage());
			}
		}
	}

	...

Ich habe es getestet: Sobald ein JBoss im Cluster heruntergefahren wird, übernimmt der andere JBoss die Arbeit - und ich bekomme die Ausgabe: "ZIPExtractor is now running on host: ...".

Der ZIPExtractor übernimmt dann auf dem "neuen" Master die Arbeit. :toll:

Habt Ihr noch Verbesserungsforschläge (außer einen Service im HASingleton schreiben - das werde ich als nächstes mal ausprobieren)?

VFS kenne ich überhaupt nicht... -muss mich da wohl mal schlau machen :rtfm:
 

FArt

Top Contributor
Wow, dass das so funktioniert... Respekt! ;-)
Wie sieht es mit der Synchronisation zwischen den Knoten aus. Also wenn z.B. der Knoten heruntergefahren wird während du eine Datei verabeitest? Wird dann die Datei noch einmal oder gar nicht verarbeitet?

Ja, ein HASingletonService wäre eleganter, weil du dir die Abfrage sparst. Insgesamt könnte man die Abfrage über die Monitoringschnittstelle des JBoss sicher auch eleganter lösen. Du könntest dir den passenden Service injekten lassen (dann musst du ihn nicht suchen) und kannst dann das entsprechende Attribut abfragen.

Deine Variante tendiert dazu mit anderen (neueren) Versionen von JBoss nicht mehr zu funktionieren, weil doch sehr viel Internas hartcodiert sind.
 

andisima

Mitglied
Hi,

die Synchronisierung ist kein Problem: Die eigentliche .zip-Datei wird erst nach komplettem Auspacken aus dem Input-Verzeichnis gelöscht. Eine Weiterverarbeitung der ausgepackten Dateien startet erst dann, wenn eine im .zip-File vorhandene, das .zip-File beschreibende .xml-Datei vorhanden ist. Diese wird jedoch erst als letzte Datei entpackt...

Sollte also das Auspacken unterbrochen werden, so wird diese Datei im nächsten Durchlauf einfach noch einmal ausgepackt - und ggf. bereits ausgepackte Dateien einfach überschrieben. :bae:

Soweit ich weiß setzen wir die aktuellste JBoss-Version ein - Ich greife aber Deinen Einwand auf jeden Fall auf und realisiere das ganze noch als HASingletonService (jetzt habe ich Blut geleckt :D).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Eclipse - Server einbinden, jBoss Java Basics - Anfänger-Themen 2
G jboss - NameNotFoundException Java Basics - Anfänger-Themen 3
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
K Mail senden, nachdem Anwendung beendet wurde (gleich wie) Java Basics - Anfänger-Themen 4
P Best Practice Druck aus Java Anwendung in MacOs Java Basics - Anfänger-Themen 0
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
J Was mache ich falsch in meiner Java Anwendung? Java Basics - Anfänger-Themen 11
I Java Anwendung auf Android portieren Java Basics - Anfänger-Themen 1
I Java FX GUI Anwendung Java Basics - Anfänger-Themen 30
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
G MapStruct Anwendung vom selbst geschriebenen Formater Java Basics - Anfänger-Themen 4
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
S If Anwendung Java Basics - Anfänger-Themen 1
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
J Datentypen Anwendung von String contains Java Basics - Anfänger-Themen 4
P Klassen Richtige Anwendung einer Enum-Klasse Java Basics - Anfänger-Themen 11
R If anwendung funktioniert nicht Java Basics - Anfänger-Themen 3
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
GENiALi Java Console Anwendung starten in Prozess Java Basics - Anfänger-Themen 3
A Testprogramm in java oder javascript für Windows Anwendung? Java Basics - Anfänger-Themen 1
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
R Best Practice Problem Anwendung umzusetzen Java Basics - Anfänger-Themen 2
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Anwendung Startet nur in Vergangenheit Java Basics - Anfänger-Themen 11
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
C Java-Anwendung im Browser zoomen Java Basics - Anfänger-Themen 1
C Anwendung generischer Typparamter auf ArrayList Java Basics - Anfänger-Themen 2
I Externes konsolen Anwendung (.exe) starten Java Basics - Anfänger-Themen 2
E Classpath SecSigner in WebStart-Anwendung Java Basics - Anfänger-Themen 3
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
L Verbindung von Anwendung mit GUI Java Basics - Anfänger-Themen 6
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
W Rekursion Anwendung Java Basics - Anfänger-Themen 16
FreeFun Java Anwendung beenden Java Basics - Anfänger-Themen 7
S Reale Anwendung der OOP Java Basics - Anfänger-Themen 33
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
M Anwendung Schreibrechte geben Java Basics - Anfänger-Themen 13
M Anwendung als Webstart ausführen Java Basics - Anfänger-Themen 4
G Erste Schritte von Eclipse zur Anwendung: Programme auf anderen Rechnern zum Laufen bringen Java Basics - Anfänger-Themen 4
H Erste Schritte 2 User Interfaces für eine Anwendung Java Basics - Anfänger-Themen 7
M Anwendung in verschiedenen JREs Java Basics - Anfänger-Themen 42
A Hilfe bei Anwendung erstellen Java Basics - Anfänger-Themen 2
J GUI für Java-Anwendung erzeugen Java Basics - Anfänger-Themen 7
U Rechte bei JAVA-Anwendung? Java Basics - Anfänger-Themen 8
JAVAnnik Anwendung nach Schließen vom letzen Frame Java Basics - Anfänger-Themen 9
C Mit Java Textfeld einer externen Anwendung auslesen Java Basics - Anfänger-Themen 9
L Benutzerdefinierte Anwendung starten Java Basics - Anfänger-Themen 5
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
Steve5000 Externe Batch-Datei starten und anwendung beenden?! Java Basics - Anfänger-Themen 4
StrikeTom Problem mit regex(-anwendung) Java Basics - Anfänger-Themen 10
D Frage zu Collection und deren Anwendung Java Basics - Anfänger-Themen 2
P Java Anwendung mit mehr RAM starten?? Java Basics - Anfänger-Themen 5
N Favicon in meiner Anwendung Java Basics - Anfänger-Themen 9
Error257 Doppelklick-Anwendung Java Basics - Anfänger-Themen 6
P Interfaces -> eins oder mehrere für eine Anwendung? Java Basics - Anfänger-Themen 9
Dit_ invokeLater | richtige Anwendung Java Basics - Anfänger-Themen 2
H Datei einlesen in einer MVC Anwendung Java Basics - Anfänger-Themen 3
B JavaWebStart - Anwendung läuft nur auf einem Rechner Java Basics - Anfänger-Themen 6
M MergeSort - Threads in Anwendung bremsen alles! Java Basics - Anfänger-Themen 4
C0FFEE Anwendung soll eigenen Dateinamen referenzieren Java Basics - Anfänger-Themen 13
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
D Das Ausführen einer Java Anwendung auf versch Systemen... Java Basics - Anfänger-Themen 5
F u.a. Ressourcen begrenzung für Java-Anwendung Java Basics - Anfänger-Themen 5
X Konfiguration einer Anwendung aus mehreren Dateien Java Basics - Anfänger-Themen 11
K JAVA-Anwendung startet nicht Java Basics - Anfänger-Themen 7
P Output einer anderen Anwendung verwenden Java Basics - Anfänger-Themen 7
M (Sub-)Anwendung schließen aus JMenu Java Basics - Anfänger-Themen 6
A Aufruf einer externen schon laufenden Anwendung Java Basics - Anfänger-Themen 3
harrli Markierten Text einer anderen Anwendung ermitteln Java Basics - Anfänger-Themen 10
Y Preferences / Properties Anwendung plattformunabhängig Java Basics - Anfänger-Themen 4
B Java-Anwendung im Windows Design Java Basics - Anfänger-Themen 8
G Polymorphismus und die richtige Anwendung Java Basics - Anfänger-Themen 6
J java anwendung starten - wie? Java Basics - Anfänger-Themen 7
M Handy Java Anwendung Java Basics - Anfänger-Themen 8
D Beim Schließen eines Dialogs die Ganze Anwendung schließen ? Java Basics - Anfänger-Themen 7
T Desktop Anwendung Aufbau Java Basics - Anfänger-Themen 5
G Bild von Anwendung Java Basics - Anfänger-Themen 3
E Problem mit der parallelen Anwendung Java Basics - Anfänger-Themen 11
J Anwendung von "this" Java Basics - Anfänger-Themen 4
N Fenster einer anderen Anwendung resizen? Java Basics - Anfänger-Themen 2
M Swing Anwendung - boolean schaltet automatisch auf true Java Basics - Anfänger-Themen 2
G Mehrsprachenfähigkeit in eine Anwendung integrieren Java Basics - Anfänger-Themen 2
Q Anwendung eines JScrollPane Java Basics - Anfänger-Themen 2
A java-anwendung ohne jre starten Java Basics - Anfänger-Themen 8
G Version von Anwendung mit Eclipse oder anders festlegen Java Basics - Anfänger-Themen 8
D html in einer java-anwendung Java Basics - Anfänger-Themen 10
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G Anwendung beendet nicht. Java Basics - Anfänger-Themen 5
T Anwendung von Interfaces Java Basics - Anfänger-Themen 2
R Java als Anwendung Java Basics - Anfänger-Themen 6
G Anwendung findet vorhandene Klasse nicht Java Basics - Anfänger-Themen 4
T Wie ausführbare Anwendung erstellen Java Basics - Anfänger-Themen 2
G Hilfer zur einer Anwendung soll HTML Datei öffnen Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
G Datum und Text in jede beliebige Anwendung einfügen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben