Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Probleme mit Applet das auf notes Daten zugreift
Axel_Janssen:
Hi,
am wichtigsten ist es, dass du das mit der Java Debug Console und System.out.println verstanden hast.
Ich würde nochmal über die allgemeine Struktur nachdenken.
Kannst du nicht beispielsweise die ganzen Daten aus den verschiedenen Datensätzen in einer Zugriffsdatenbank einfach über Agenten aggregieren ?????
Was du vorhast mit graphics.paint() das sieht so low level aus. Das darf es eigentlich nicht sein.
O.k. wenn du kein swing hast, dann könntest du immerhin dynamisch generierte java.awt.Label oder java.awt.Field in einem GridLayout verwenden, um so eine view zu emulieren.
Aber ich sehe noch weitere Problemen.
Bitte denke über die Lösung mit der einen Datenbank nach, die Daten aus verschiedenen Datenbanken aggregiert.
java.util.Vector ist in der Tat eine sinnvolle Sache.
In Java musst du bereits beim initialisieren des Arrays wissen, wieviel Elemente er hat. Die Lists, Collections aus java.util.* sind da wesentlich einfacher zu handhaben (wird überall und in www.javabuch.de super erklärt, Kapitel 14).
In Post-Renaicanse Java (Java > 1.2) ist ArrayList meist besser als Vector. Sind aber recht ähnlich.
Die bislang didaktisch, wissenschaftlich und sonstwie wertvollste Erklärung lieferte Thomas Paul:
http://www.javaranch.com/newsletter/June2002/newsletterjune2002.jsp#collections
btw. Frage: Hast du beim Entwickeln das apidoc in den browser geladen. Das hat nämlich jeder.
Ich meine das hier:
http://java.sun.com/j2se/1.4.1/docs/api/
(kann man auch downloaden).
Axel
Axel_Janssen:
--- Zitat von: qojote am 08.06.03 - 21:55:33 ---
Leider bin ich dabei an den Notesclient gebunden da viele meiner Jungs die Daten auf Ihren Notebooks haben.
--- Ende Zitat ---
quojote,
ich hab ein Problem:
Die sitzen also disconnected an ihren NoteBook und die Applets versuchen auf andere Datenbanken zuzugreifen?
Haben die sich diese NSFs auch repliziert???
Es sieht von weiten für mich so aus, als wolltest du irgendwie Logik von dem Server auf die Clients verlagern.
Handelst du dir damit nicht einen Sack von Problemen ein?
Ich meine: Das Applets und auch sowas wie activeX nicht so einen tollen Erfolg hatten, serverseitige Technologien wie z.B. ASP, Servlets/JSP schon hat Gründe, die v.a. auch mit Synchronisierungsproblemen bei zuviel client zu tun haben...
--- Zitat von: qojote am 08.06.03 - 21:55:33 ---Ich dachte mir eigentlich ich lese die Daten in ein globales array ein und durchlaufe dann in paint eine schleife um sie auszugeben.
--- Ende Zitat ---
Du willst doch Ansichten emulieren, oder?
Ansichten aus verschiedenen Datenbanken?
Eine sehr gebräuchliche straight forward Lösung wäre es wenn du die einzelnen Datensätze (Dokumente) als Objekte behandelst die du in Vektoren packst.
Also nehmen wir an du brauchst eine Ansicht "Leute" mit den Spaltenwerten "Name", "Vorname", "Geburtstag".
Dann machst du in Eclipse eine Klasse:
LeuteVO (vo für value-object :-) ) in Paket data.
da schreibst du dann einfach 3 private properties rein.
private String name;
private String vorName;
private Date geburtsTag;
Highlighte nun 1 dieser 3 Eigenschaften in der rechten gliederungs-Perspektive. Rechte Maustaste.
Da gibt es den berühmten "generate Setter and getter"-Trick. Draufklicken (generate getters and setters ist irgendwo im Kontextmenü) und einfach alles anhaken. Das ist v.a. auch OO mässig cool. Du kannst jetzt auf die 3 Eigenschaften mit settern und gettern zugreifen.
dann tust du da noch eine static factory-Methode rein:
--- Code: ---public static LeuteVO initialize (String name, String vorName, Date date) {
LeuteVO leuteVO = new LeuteVO();
leuteVO.name = name;
leuteVO.vorName = vorName;
leuteVO.geburtsTag = date;
return leuteVO;
}
// und weil du schlau bist überschreibst du auch die toString() Methode.
public String toString() {
return "name=" + name + "\nvorName=" + vorName + "\geburtsTag=" + geburtsTag;
}
--- Ende Code ---
Wenn du nun die Daten aus Notes ausliest, kannst du das etwa so in die LeuteVO packen. Die LeuteVO packst du in den Vector.
(der Zugriff auf die Notes-Klassen geht vermutlich anders, bin jetzt zu faul da nachzugucken, ist dummy-code.
--- Code: ---Vector vecLeute = new Vector();
//do notes view stuff
Document doc = view.getFirstDocument();
while (doc != null) {
Document doc = view.getDocument();
// calling static factory-method.
LeuteVO leuteVO = LeuteVO.initialize (doc.getStringItemValue("name"), doc.getStringItemValue("vorName"), doc.getDateItemValue("date"));
vecLeute.addElement(leuteVO);
doc = vw.getNextElement(doc);
}
// zum Spass mal am Ende ausdrucken....
System.out.println("vecLeute=" + vecLeute);
--- Ende Code ---
... so und später willst du das zwischengespeicherte auslesen.
geht dann so:
--- Code: ---displayData() {
LeuteVO leuteVO = null;
for (Enumeration el=vecLeute.elements(); el.hasMoreElements(); ) {
// casting notwendig....
leuteVO = (LeuteVO)el.nextElement();
showInUI(leuteVO.getName());
showInUI(leuteVO.getVorname));
showInUI (leuteVO.getGeburtsTag());
}
// wobei showInUI geschrieben werden müsste.
--- Ende Code ---
Ich hoffe das hilft dir weiter.
Wie gesagt, überleg dir ob es nicht vielleicht eine andere Lösung gibt.
qojote:
Hi,
Klar könnte ich die Daten in einer Notes db zuerst aggregieren das würde aber bedeuten das ich die Daten redundant halte und bei jedem öffnen der view updaten müsste unter notes mit dbs größer 100000 docs ziemlich langsam.
aber mir geht es ja auch ums lernen.
Und meine erfahrung hat mir gezeigt das du eine Programmiersprache am besten lernst wenn du ein Ziel hast und versuchst dies Umzusetzen.
Vielleicht kommst es niemals zum Einsatz aber ich habe dabei dann doch recht viel gelernt ( Dank Leuten wie dir die gerne bereit sind Ihr wissen zu teilen).
Natürlich ist der Code am Anfang recht basic aber ich denke mit dem gelernten wird der doch relativ schnell besser.
Und beim nächsten mal weiß ich dann gleich wie es besser geht.
Und wie soll ich denn sonst JSp, Servlets und sonstiges machen wenn ich von den Basics noch keinen Plan habe :-))
Das mit dem vector muß ich mir anschauen sieht super interessant aus.
Danke
qojote
qojote:
Hups,
ich hab ein Teil deiner Fragen ja gar nicht beantwortet.
Alle haben repliken der entsprechenden Nfs.
Und noch ne frage :
// und weil du schlau bist überschreibst du auch die toString() Methode. (vielleicht oute im mich jetzt als doof )
wieso überschreib ich die ??
Das war ne ganze Menge stuff jetzt muß ich mir erst mal ein Buch nehmen und die Sachen mit den Vektoren und gettern und settern nachlesen.
Danke
Qojote
Axel_Janssen:
--- Zitat ---Und wie soll ich denn sonst JSp, Servlets und sonstiges machen wenn ich von den Basics noch keinen Plan habe
--- Ende Zitat ---
stimmt natürlich. Aber wie gesagt Applets sind wiederum überhaupt nicht basic, find ich jedenfalls
- Sicherheitsbeschränkungen
- Life-Cycle-Methoden --> hilft natürlich für Verständnis JSP, Servlets, EJBs).
- v.a. wenn du für browser entwickelst, gibt es bei Netscape, MS völlig andere Java-Versionen auf denen es laufen soll.
- Grafik-Bibliothek java.awt.* ist "uralt" und nicht das gelbe.
Für Servlets, JSPs gibts Tonnen von Literatur.
Auf der anderen Seite gebe ich dir völlig Recht, dass ein Verständnis von core-Java ziemlich grundlegend ist.
toString()-Methode:
ist ein ziemlich wichtiges Konzept, um einfach testbaren Code zu schreiben und Lehrreich in Hinblick auf OO-Vererbung.
Also: Jedes Objekt erbt von java.lang.Object (das steht zwar nicht in den Klassen, aber funktional ist es so).
D.h. zumindest die public-Methoden von java.lang.Object werden an die Java-Objekte aller Klassen vererbt.
Das Api-Doc sagt zur Methode
public String toString() in java.lang.Object:
--- Zitat ---Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
--- Ende Zitat ---
Die Methode wird beispielsweise von System.out.println() aufgerufen. Wenn du das Objekt z.B. zum Debuggen auf den Bildschirm drucken willst.
Die Methode in Object gibt den Klassennamen + @ + kryptisches Nümmerschen raus.
Das ist natürlich nicht so aussagekräftig. Weil in aller Regel willst du wissen, um was für ein Objekt es sich handelt.
Also überschreibst du die toString-Methode von Objekt und lässt das Objekt etwas aussagekräftigeres ausgeben (gerne wichtige Eigenschaften des Objekts, wie bei meinen Beispiel oben --> (dies ist ein grundlegendes Design-Prinzip, wenn man eigene Klassen schreibt. Macht jeder).
Viele Klassen aus dem jsdk überschreiben auch von Hause aus toString() --> z.B. Vector gibt die Elemente so aus:
[element1, element2, ..., elementn]
Probiers an eigenen code aus, ist ziemlich offensichtlich.
Kansst ja mal den code ausproieren und erst mit toString ausprobieren und dann toString in toStringUmbenannt ändern.
Axel
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln