Autor Thema: Parameter an Java gehen verloren  (Gelesen 2265 mal)

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Parameter an Java gehen verloren
« am: 23.10.06 - 08:45:36 »
Hallo. Nochmal eine kurze Frage...

ich habe einen Java Agenten, der aus Notes 7 heraus eine Java Applikation startet. Als Parameter gebe ich die Session und eine Database mit weil ich in weiteren Funktionen noch Zugriff auf Objekte in der Datenbank benötige. Das Problem ist aber, das sobald der Java - Agent durchgelaufen ist, die Objekte Session und Database den Wert null haben. Gibt es eine Möglichkeit, die Inhalte davon zu behalten?

Der Aufruf aus Notes heraus ist der folgende:

//xGErDa - Applikation starten...   
gerda = mainpackage.GERDA.getInstance(session, db).Win1;

Und irgendwie muss ich die Inhalte von session und db für anderen Funktionen zur Verfügung stellen...

Hat einer einen Idee? Bin absoluter Neuling auf dem Gebiet...

Schonmal vielen Dank für die Mühe.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Parameter an Java gehen verloren
« Antwort #1 am: 23.10.06 - 12:26:37 »
Da hast du aber ein kleines Problem.
Sobald dein Java Agent durchgelaufen sind, werden die entsprechenden C-Objekte recycled und sind somit für JAVA unbrauchbar.

Entweder muss dein Agent jetzt solange warten, bis Deine Applikation durchgelaufen ist, oder deine  Applikation muss die DB auf anderem Wege holen.
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Parameter an Java gehen verloren
« Antwort #2 am: 23.10.06 - 12:41:28 »
Hm die Antwort von Umi ist nur bedingt richtig, denn abgesehen dass die Javaobjekte sterben soll man überhaupt keine Threads starten, die über den Agent hinaus aktiv bleiben. Eventuell könnte der Fragesteller einmal genauer erklären, was wie funktionieren soll dann kann man ihm auch raten wie man das am besten bewerkstellt. Falls es sich wirklich um eine aufzurufende Applikation mit eigenem UI handelt würde ich es sowieso nicht in der Jvm von Notes sondern in einer externen laufen lassen.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Sanjou

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Weiblich
Re: Parameter an Java gehen verloren
« Antwort #3 am: 23.10.06 - 13:00:06 »
Es soll folgendes passieren:

ich markiere eine bestimmte Anzahl von Daten - meist Personen - die ich als Document Collection an eine Java Applikation übergebe. Diese sollen in Form von Knoten als Beziehungsnetzwerk dargestellt werden. Jetzt soll es möglich sein, zu einem Knoten - z.B. einer Person - direkte Beziehungen nachzuladen, das heißt ich muss wieder auf die Datenbank zugreifen, und alle Objekte die in Verbindung mit dieser Person stehen nachladen...

also mir bleibt wohl nichts anderes übrig als die Daten per String zu übergeben, oder? Ich hatte gehofft, das es möglich wäre, die Daten irgendwie am Leben zu erhalten....

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Parameter an Java gehen verloren
« Antwort #4 am: 23.10.06 - 14:39:19 »
Grundsätzlich wäre es von meinem Verständnis besser, wenn die Java Anwendung sich die Session von der Notes Datenbank pullen würde.
Du kannst ja von einer beliebigen Java Anwendung Verbindung mit Domino aufnehmen.

Die entsprechende Verbindungsmethode sieht bei mir so aus:
Von nSession die Database zu bekommen ist nicht so schwierig.
Ich mach das in der referenzierten Methode doSpecificAction(Session nSession);



Code
/**
	 * 
	 * @return for reporting purposes.
	 */
	public ReportUser doAction() {

		try {
			
			tLocal = new ThreadLocal();
			tLocal.set(new ReportUser());
/*			if (getProp("useIIOP").toString().equals("true")) {
				isCorba = true; 
			} else {
				isCorba = false; 
			}
*/
                       isCorba = false

			if (isCorba) {
				nSession = NotesFactory.createSession(server + ":" + iiopPort);
			} else {
				NotesThread.sinitThread();
				nSession = NotesFactory.createSession();
			}
			
			ReportUser reportUser = doSpecificAction(nSession);
			
			
			nSession.recycle();
			if (!isCorba) {
				
				NotesThread.stermThread();
			}
			
			return reportUser;

		} catch (Throwable t) {

			t.printStackTrace();
			if (nSession != null)
				try {
					nSession.recycle();
				} catch (NotesException e) {
					// catch not needed here!

				}
			nSession = null;

			throw new RuntimeException(t);
			// TODO

			// return new StringBuffer().append("an error has occured");

		}

	}

Das ThreadLocal Gehampel ist zugegebenermassen ziemlich posermässig. Du brauchst das nicht für standalone Anwendungen. Für Serveranwendungen (du willst aus JBoss oder Tomcat auf Domino zugreifen) ist das aber ein guter Ansatz.

Um nicht so oft nach dem Passwort gefragt zu werden hilft (fürs erste) das Häckchen
"Don't prompt for a password from other Notes based programs" -> Es kommt keine Abfrage, wenn sich der Anwender schon in sein lokales Notes eingelogt hat, sicherheitsproblematisch ist es also aus meiner Sicht nicht.

aus: Notes Menü: File\Security\User-Security 1. Tab: Security Basics.
« Letzte Änderung: 23.10.06 - 14:56:21 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz