Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Error cleaning up agent threads und WeakReference...

<< < (5/19) > >>

flaite:
Das einzige Risiko bei rmi sehe ich in firewall Problemen (rmi port nicht offen).
Man kann das heute aber über http oder sogar ssh tunneln (http://www.pankaj-k.net/archives/2003/11/rmi_over_ssh.html).

Ansonsten ist rmi an vielen Stellen gut dokumentiert. Zb. im Handbuch der Javaprogrammierung (www.javabuch.de). Mit der Vor-Vor-Vorgängerversion hab ich das mal vor 5 Jahren aus Domino heraus gemacht. Der Aufbau ist erst einmal ein bischen fricklig. Geht aber.

flaite:
Ansonsten wird das in Kapitel 46 der Version 3 von Javabuch.de ausführlich beschrieben.
Im Kapitel davor (45) wird Socket-Programmierung beschrieben.
Das sind die beiden Alternativen.
Falls du irgendwo hängen bleibst, kannst du ja posten.

Mark³:
ich versuche das mal mit Socket-Programmierung.

Ausgehend vom Webserver-Example aus Javabuch (4. Auflage, Kap. 45.3.3) erstelle ich eine simple Server-Anwendung

--- Code: ---import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
/**
* @param port
*            the port which the server is listening to
*/
public static void main(String[] args) {
{
if (args.length != 1) {
System.err.println("Usage: java Server <port>");
System.exit(1);
}
try {
int port = Integer.parseInt(args[0]);
System.out.println("Listening to port " + port);
int calls = 0;
ServerSocket httpd = new ServerSocket(port);
while (true) {
Socket socket = httpd.accept();
(new ClientThread(++calls, socket)).start();
}
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
}
}
}
--- Ende Code ---

die auf eingehende ClientThreads wartet:


--- Code: ---import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.Socket;

public class ClientThread extends Thread {
private Socket socket;

private int id;

private PrintStream out;

private InputStream in;

public ClientThread(int id, Socket socket) {
this.id = id;
this.socket = socket;

}

public void run() {
try {
System.out.println(id + ": Incoming call...");
out = new PrintStream(socket.getOutputStream());
in = socket.getInputStream();
readRequest();
createResponse();
socket.close();
System.out.println(id + ": Closed.");
} catch (IOException e) {
System.out.println(id + ": " + e.toString());
System.out.println(id + ": Aborted.");
}
}

private void createResponse() {
}

private void readRequest() throws IOException {
}

}
--- Ende Code ---

Nun würde ich in readRequest() Befehle parsen, mit denen ich Transaktionen in Openview ausführe. Die Ergebnisse der Transaktionen gebe ich dann per createResponse() wieder an den Caller zurück. Der Caller wäre in diesem Fall ein Notes Java-Agent.

Irgendwelche Vorschläge, wie man am besten Befehle parsed oder Objekte zwischen readRequest() und createResponse() austauscht?
Im Webserverbeispiel wird natürlich Text ausgelesen da ja normalerweise URLs geparsed werden. Ich könnte Klartextbefehle ('Create Servicecall', 'Axel Janssen', 'Netzwerkprobleme, kein Anschluß ans Netz') nehmen, aber ich möchte möglichst wenig selber parsen. Leider habe ich da kaum Erfahrungen, was in Java so gebräuchlich ist. Mit StringTokenizer oder Vector() oder so kann man das ja recht flexibel machen.

flaite:
Hätte RMI genommen, aber ich schau heute abend mal nach.
Das Problem besteht darin, dass du quasi irgendwann anfängst ein eigenes Protokoll zu designen, wenn die Anforderungen zu komplex werden. Das sollte auf jeden Fall vermieden werden.
Was spricht einfach dagegen einfach einen Tomcat als Server für die OpenView Geschichten zu nehmen?
- Von Notes kann das per jakarta.commons.HttpClient gut angesprochen werden. OpenView-Methodennamen, HttpParameter sind HttpPost-Felder.
- Servlet-Programmierung kannst du. Die Business Logik der OpenView Geschichten wird vom Servlet aufgerufen.
- Du generierst einfach xml als Response.

Gruß Axel

Mark³:
wahrscheinlich ist Tomcat die einfachste Lösung, sonst komme ich vom Hundertsten ins Tausendste...

Ich habe bloß noch ein Problem, mir das gesamte Bild vorzustellen, da ich bei Webanwendungen immer die Webseiten vor Augen habe, die ich im Client öffne. Dann könnte ich doch eigentlich den ganzen Kram sogar über AJAX ansprechen ???
Allerdings ist das mit http und unseren Firewalls so eine Sache hier.
Angenommen ich habe einen Tomcat, dann erstelle ich ein J2EE-Projekt und stecke die Logik nicht in JSPs sondern nur in Servlets, die ich dann per Lotusscript- oder Javaagent anspreche?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln