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

NotesFactory

(1/3) > >>

thorsten_w:
Hallo *,

Ich hätte eine kleine Frage, die ist nicht existenziell, aber doch interessant.
Ich würde gerne Testläufe in unserem API durchführen und dabei Daten vom Domino Server benutzen. Dabei sollen die ensprechenden Klassen, die Sessions brauchen natürlich nicht extra auf eine Corba Session umgeschrieben werden.

Ich habe also eine globale Klasse erstellt, bei der sich dann jeder eine Session, die dann wahlweise über NotesThread oder Corba initialisiert wird.

Beispiel:

--- Code: ---import java.io.FileInputStream;
import java.util.Properties;

import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;

/**
 * @author tsw
 *
 */
public class SessionFactory {

/**
*
*/
static private SessionFactory theInstance;

/**
*
*/
private Properties properties;

/**
*
*/
private SessionFactory() throws ModuleException {
try {
this.properties = new Properties();
this.properties.load(new FileInputStream("factory.properties"));
} catch (Exception e) {
throw new ModuleException ("can not load properties", e);
}
}

/**
* @return
*/
private String getHost() {
return this.properties.getProperty("host");
}

/**
* @return
*/
private String getUser() {
return this.properties.getProperty("user");
}

/**
* @return
*/
private String getPassword() {
return this.properties.getProperty("password");
}

/**
* @return
*/
static private SessionFactory getInstance() throws ModuleException {
if (SessionFactory.theInstance == null) {
SessionFactory.theInstance = new SessionFactory();
}

return SessionFactory.theInstance;
}

/**
* @return
* @throws NotesModulException
*/
static public Session createSession() throws ModuleException {
try {
Session session = null;

if (NotesThread.isLoaded) {
session = NotesFactory.createSession();
} else {
SessionFactory factory = SessionFactory.getInstance();

session = NotesFactory.createSession(
factory.getHost(),
factory.getUser(),
factory.getPassword()
);
}

return session;
} catch (Exception e) {
throw new ModuleException("can not get a session", e);
}
}
}

--- Ende Code ---


bei einem externen start passiert auf der Server Console folgendes:


--- Code: ---DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx connected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected
DIIOP Server: xxx.xxx.xxx.xxx disconnected

--- Ende Code ---

Die Frage ist: Steuert die NotesFactory die Connections über einen ORB - Pool ? Oder muss das selbst gemacht werden?

Gruss Thorsten

flaite:
care-full.
Ich würd mir an deiner Stelle ernsthaft überlegen, diese 500 Dollar zu investieren.

http://www.looseleaf.net/looseleaf/lsihome.nsf/0/97e47c8b6e9ce59585256b19006415d1?OpenDocument

Lotus hat von Hause aus keinen ORB-Pool. Eine robustes Connection Pooling zu schreiben halte ich auch btw. für nicht gerade einfach. 
In diesem Text findest du zwar ein simples Beispiel (Abschnitt: Connection pooling)
http://www-128.ibm.com/developerworks/lotus/library/ls-Java_access_2/index.html
Jedoch halte ich diese Hinweise von Looseleaf auf Memory Leaks / stall connections für konkret keinen fun stuff.

UND: Les dir den Abschnitt Recyling in dem gleichen IBM Artikel durch. Wenn du kein recycle() benutzt, hast du schnell memory leaks.

Axel

Ralf_M_Petter:
Hallo Thorsten!

Ich würde mir die 500 Dollar sparen und das schon mal selber implementieren, aber auf jeden Fall musst du deine Klasse Threadsafe kriegen. Was jetzt nicht der Fall ist, sonst kann es zu den seltsamsten Fehlern kommen, Vor allem wenn du die Klasse in einer J2EE Umgebung die logischerweise massiv Threads verwendet benutzt.

Grüße

Ralf

flaite:

--- Zitat von: Ralf_M_Petter am 09.01.06 - 15:15:37 ---Hallo Thorsten!

Ich würde mir die 500 Dollar sparen und das schon mal selber implementieren, aber auf jeden Fall musst du deine Klasse Threadsafe kriegen

--- Ende Zitat ---
... und überprüfen, dass die Session nicht idle  ist.
Nun gut. Es geht sicher, sofern das alles ist...


Gruß Axel

Ralf_M_Petter:
Das mit dem Überprüfen ob die Session IDLE ist macht das Looseleaf Tool auch nicht gerade effizient, vor allem Falls nämlich die Session nicht released wurde, was z.B. in einem Swing Client eventuell problematisch ist, wenn du immer sämtliche Domino Objekte verlierst zwischen jeder Transaktion.

Grüße

Ralf
 

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln