Autor Thema: Problem mit createSession  (Gelesen 7102 mal)

Offline Herrmann

  • Frischling
  • *
  • Beiträge: 3
Problem mit createSession
« am: 15.12.05 - 12:12:27 »
Hallo,

ich habe aktuell ein Problem mit NotesFactory.createSession

Code
try
{
  NotesThread.sinitThread();
  NotesFactory.createSession( "", "username", "password" );
}
catch ( Exception e )
{
  System.out.print( "EXCEPTION: " + e.toString() + "\n" );
}
finally
{
  NotesThread.stermThread();
}

Ich bekomme bei createSession die Exception:
"NotesException: Invalid user name/password"

Wenn ich jedoch einen Servernamen angeben (in meinem Fall localhost oder 127.0.0.1), tritt dieser Fehler nicht auf. Damit scheint Username/Passwort ja in Ordnung zu sein - oder? Notes.jar steht auch im Classpath. Mir fällt langsam nix mehr ein :(

Ich hoffe jemand von euch kann mir weiter helfen.
Danke.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem mit createSession
« Antwort #1 am: 15.12.05 - 12:29:53 »
Wenn Du einen Userstring übergibst, willst Du eine "Internet Session" zu einem lokal installierten Domino Server aufmachen. Läuft der bei dir?

Wenn Du Dich an den lokaeln Notes Client anmelden willst, darfst Du keinen Usernamen mitliefern.

Siehe auch "NotesFactory class" in der Designer-Hilfe.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Herrmann

  • Frischling
  • *
  • Beiträge: 3
Re: Problem mit createSession
« Antwort #2 am: 15.12.05 - 12:35:04 »
Ich möchte mich mit meiner Java-Anwendung an meinem lokalen Domino 6.5.4 Server anmelden. Mit Hostname also über CORBA scheint es ja zu laufen, nur möchte ich CORBA in diesem Fall nicht verwenden.

PS: Ich habe zwei Testsysteme ein Windows und ein Linux. Auf der Windows-Maschine läuft der Code ohne Probleme nur auf der Linux-Kiste kommt diese seltsame Exception.

Habe schon im Netz gesucht, nur finde ich keine Lösung zu meinem Problem.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem mit createSession
« Antwort #3 am: 15.12.05 - 13:01:07 »
Schon mal in die Designer Hilfe zur NotesFactory geschaut? Aufruf ist
Code
createSession(null, userString, passwordString)

Hint: "" != null
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Herrmann

  • Frischling
  • *
  • Beiträge: 3
Re: Problem mit createSession
« Antwort #4 am: 15.12.05 - 13:13:16 »
Habe ich bereits versucht - Leider ohne Erfolg.
Bekomme genau die gleich Exception.
Nach einem halben Tag rumprobieren verzweifelt man bzw. ich langsam.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem mit createSession
« Antwort #5 am: 15.12.05 - 15:21:13 »
Ich HASSE es, wenn Noobs anscheinend sogar zu blöd sind, die Forumsregeln bei der Anmeldung zu lesen.

Dieser Thread ist ein Crossposting mit http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=10790

Da lässt mein Enthusiasmus zu Helfen gleich mal stark nach.  >:(
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem mit createSession
« Antwort #6 am: 15.12.05 - 20:27:12 »
@Hermann: Du musst einfach auf cross-posting hinweisen. Einfach ein Link reinposten.
Die Erklärung von taurec hätte ich übrigens auch nicht gewusst.
Nimms nicht persönlich.
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

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: Problem mit createSession
« Antwort #7 am: 19.12.05 - 17:25:07 »
Hi,

bei einem getSession() funktioniert weder "" noch null, um eine lokale Session zu bekommen.

Es hilft nur ein String, der null ist. Wenn Du einen Server (Hostnamen oder IP) übergiebst, bekommst Du auch keine lokale, sondern eine remote-session (corba). Deswegen funktioniert es so.

Für lokale Sessions muss das Ganze so aussehen:
String host = null;
Session s = NotesFactory.createSession(host, "user", "password");

Das Ganze ist meiner Meinung nach unsauber in der API programmiert.

Thomas
+++To be human is more important than to be important!+++

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: Problem mit createSession
« Antwort #8 am: 19.12.05 - 18:33:52 »

@Thomator

Bist du dir dessen ganz sicher, dass dem so ist. Meines Verständnis von Java ist zwischen deinem Code und
Code
 Session s = NotesFactory.createSession(null, "user", "password");
kein Unterschied. Wenn du eine Variable in Java definierst, dann machst du eigentlich einen Verweis auf ein Objekt. Deshalb müsste meiner Meinung nach beides das selbe sein. Werde das mal debuggen und dann Bescheid geben.

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 Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: Problem mit createSession
« Antwort #9 am: 22.12.05 - 09:39:46 »
Hallo Ralf,

das ist grundsätzlich kein Unterschied, es sei denn, in der Methode, die aufgerufen wird, findet die Typprüfung vor der null-Prüfung statt.

Das scheint in diesem Fall so zu sein. Das Problem hat so in eben dieser createSession-Methode immer schon existiert.

Übrigens: Wenn ich der Methode als ersten Parameter null übergebe, bekomme ich sogar einen Fehler.

Also zum fliegen bekommt man das Ganze eigentlich nur mit einem String, der explizit null gesetzt ist, oder mit einem gecasteten null, also (String)null, im Aufruf selbst.

Ich denke, dass die Programmierung in der API hier nicht ganz sauber ist.

Wahrscheinlich erfolgt die Prüfung der Parameter in der falschen Reihenfolge, also dass erst geprüft wird, ob es sich um eine Instanz eines Strings handelt.

Und wenn einfach null übergeben wird, ist das eben keine String-Instanz.

MfG Thomas
+++To be human is more important than to be important!+++

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem mit createSession
« Antwort #10 am: 22.12.05 - 16:21:42 »
Ich frag mich nur, wie die das rausfinden, dass es sich um einen String handelt ???
Sehr ungewöhnlich.
Beides gab für gecastetes Null (erstmalig, dass ich dieses Konstrukt überhaupt gesehen habe) oder String notInitialized = null das gleiche wie null.
Eine Methode mit String als Parameter wird natürlich auch mit null aufgerufen.
Code
package aja;

public class FindTypeAtRuntime {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("1. Beispiel: Null gekastet"); 
		// TODO Auto-generated method stub
		System.out.print("instanceof: ");
		if (((String) null) instanceof java.lang.String) {
			System.out.println("ein String"); 
		} else {
			System.out.println("kein String");
		}
		System.out.print("getClass ");
		try {
		System.out.println(((String) null).getClass().getName()); 
		} catch (NullPointerException e) {
			System.out.println("throws nullPointerException");
		}
		callMeWithStringParam((String)null);
		System.out.println("2. Beispiel: lokale String Variable, nicht initialisiert");
		String aNullString = null; 
		System.out.print("instanceof: ");
		if (aNullString instanceof java.lang.String) {
			System.out.println("ein String"); 
		} else {
			System.out.println("kein String");
		}
		System.out.print("getClass ");
		try {
		System.out.println(aNullString.getClass().getName());
		} catch (NullPointerException e) {
			System.out.println("throws nullPointerException");
		}
		callMeWithStringParam(aNullString);
		System.out.println("3. Gegentest. Eine initialisierte Stringvariable");
		String aString = "a"; 
		System.out.print("instanceof: ");
		if (aString instanceof java.lang.String) {
			System.out.println("ein String"); 
		} else {
			System.out.println("kein String");
		}
		System.out.print("getClass ");
		System.out.println(aString.getClass().getName());
		callMeWithStringParam(aString);
		System.out.println("3.a Gegentest. Aufruf mit null, ungecastet");
		callMeWithStringParam(null);
		
	}
	
	private static void callMeWithStringParam(String param) {
		System.out.println("callMeWithStringParam(String param) aufgerufen");
	}

}

ergibt:
Code
1. Beispiel: Null gekastet
instanceof: kein String
getClass throws nullPointerException
callMeWithStringParam(String param) aufgerufen
2. Beispiel: lokale String Variable, nicht initialisiert
instanceof: kein String
getClass throws nullPointerException
callMeWithStringParam(String param) aufgerufen
3. Gegentest. Eine initialisierte Stringvariable
instanceof: ein String
getClass java.lang.String
callMeWithStringParam(String param) aufgerufen
3.a Gegentest. Aufruf mit null, ungecastet
callMeWithStringParam(String param) aufgerufen
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

Glombi

  • Gast
Re: Problem mit createSession
« Antwort #11 am: 22.12.05 - 16:28:12 »
Das sagt die KBASE:

Problem

The following message occurs when compiling a Java application, even though the code appears to match examples in the Domino Designer Help:

"The method createSession(String, String, String) is ambiguous for the type NotesFactory"
The Help for Notesfactory describing createSession states:

"createSession(null, userString, passwordString) -- Internet access is granted to the session if the password matches the Internet password in the user's Person record in the Domino Directory."

However,
The following code, which is intended to open a session on the local Domino server for the user and password specified, fails with the above error:

Session session = NotesFactory.createSession(null, "John Doe", "mypassword");


Solution

This issue has been reported to Quality Engineering, and is currently under investigation.
The correct syntax (which is specified correctly in the full specification of the createSession() method at the end of the Help document, as well as in the examples, shows the first parameter in this method must be a string.

The following shows the corrected code for the example described above:
 Session session = NotesFactory.createSession((String)null, "John Doe", "mypassword");

Andreas

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: Problem mit createSession
« Antwort #12 am: 22.12.05 - 16:29:13 »
Hallo Axel!

Danke für die Mühe sehr interessant sich bestätigt zu sehen., aber hast du auch probiert, ob es überhaupt so ist wie Thomator behauptet, dass createSession(null,user,pwd) nicht funktioniert. Es ist nämlich in der Hilfe genauso beschrieben. Glaube nicht, dass so etwas Grundlegendes nicht funktioniert. Wobei diese Vorgehendsweise ja sowieso nur am Server zulässig ist.

Habe jetzt erst die Erklärung von Andreas gesehen. Ja jetzt ist es klar, sie bekommen einen Umwandlungsfehler. Ich dache wir reden von einem Ausführungsfehler, bzw. das es nicht funktioniert wenn man es so macht. Man lernt immer wieder was dazu.

Grüße

Ralf
« Letzte Änderung: 22.12.05 - 16:31:02 von Ralf_M_Petter »
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 flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem mit createSession
« Antwort #13 am: 22.12.05 - 16:57:02 »
Ich kapier das von der Java Seite nicht.
Vielleicht ist das eine JNI (Java Native Interface, die Verbindung mit C) Geschichte?
Vielleicht macht es bei Parametern, die an JNI übergeben werden Unterschiede, ob (String) null oder null?
Was ich mir bestätigen wollte war, dass es in Java keine speziellen Typen von null gibt (in String gekasteter String, simples null, etc.).
Nur ist es eben auf der Bytecode-Ebene logisch und mehr als wahrscheinlich, dass es unterschiedlich aussieht. Und vielleicht reagiert JNI darauf.
Local Access auf Domino über Java läuft ja über JNI.
 
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

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: Problem mit createSession
« Antwort #14 am: 22.12.05 - 17:02:16 »
Was verstehst du an der Erklärung von Andi nicht?

Es liegt nicht an der Ausführung, es geht nur darum, dass der Compiler die Signatur nicht erkennen kann. Lotus hat das Verbrechen gemacht eine Methode mit dem selben Namen zu machen, die die selbe Anzahl an Parametern hat. Der Compiler kann daher die Methoden nur anhand des Typs der Variablen unterscheiden. Wenn du jetzt aber direkt null hineinschreibst, kann der Compiler nicht unterscheiden, wenn du aber (String)null schreibst, dann wird zwar das null Objekt (ist falsch Null ist kein Objekt) nicht verändert aber der Compiler weiß dass er die Methode mit dem String als ersten Parameter verwenden muß. Als0 (String)null==null aber bei (String)null weiß der Compiler welche Methode er nehmen soll und bei null weiß er es nicht und bringt daher einen Übersetzungsfehler.

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 flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem mit createSession
« Antwort #15 am: 22.12.05 - 17:33:53 »
Ralf,

achso. Jetzt beginne ich zu kapieren.

Wenn er Methoden mit diesen Signaturen
(null, String, String)
oder
(String, String, String)
zur Auswahl hat, dann nimmt er mit (String) null Auswahl 2 und mit null Auswahl 1.

Du kannst aber in Java z.B. keine Methode mit der Signatur null erzeugen. Das läßt der Compiler nicht durch. Wenn du eine Methode mit der Signatur (Object val) nimmst und eine gleichnamige Methode mit String als Signatur nimmt er die mit String.
String ist eine finale Klasse. Wenn es eine spezifischere vererbte Klasse von String gäbe, würde Methode method (StringVererbt) aufgerufen.

Leicht verwirrend, aber es ist so.

in normalen Java:
Code
System.out.println("3.a Gegentest. Aufruf mit null, ungecastet");
callMeWithStringParam(null);
ruft diese Methode auf:
Code
private static void callMeWithStringParam(String param) {
System.out.println("callMeWithStringParam(String param) aufgerufen");
}
und nicht die, auch wenn die vorhanden ist:
Code
private static void callMeWithStringParam(Object param) {
System.out.println("callMeWithStringParam(String param) aufgerufen");
}
...weil nämlich String extends Object. In solchen Situationen wird die spezifischere Klasse ausgewählt.

Das hier...
Code
private static void callMeWithStringParam(String param) {
System.out.println("callMeWithStringParam(String param) aufgerufen");
}
private static void callMeWithStringParam(StringBuffer param) {
System.out.println("callMeWithStringParam(String param) aufgerufen");
}

... läßt der Compiler nicht durchgehen (ambigious), da keine der Klassen von der anderen erbt.


Und der Aufruf der Methode wird erst während der Laufzeit (nicht beim compilen) aufgelöst (late binding).

Ich frag mich nach wie vor wie die das hingekriegt haben.

Gruß Axel
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