Hallo Chris,
es ist schon richtig, dass die Klassen dynamisch zusammengelinkt werden. Aber eben zu dem Zeitpunkt, an dem das jeweilige Objekt gespeichert wurde.
Ich habe eine ganze Anzahl von Klassen, die ich in allen meinen Projekten benutze, meine JRLib
. (Das Gleiche habe ich übrigens auch für LotusScript). Diese KLassen sind in allen meinen Datenbanken vorhanden und können direkt benutzt werden. Da gibt es Klassen mit Hilfsfunktionen die man häufig braucht (z. B. split, replaceSubstring, replaceTags, ...) oder direkte Zugriffe auf meine Konfigurationsdokumente, Evaluierungsklassen, und so weiter. Diese habe ich über Monate und Jahre zusammengetragen und die "leben", will heißen, da kommt immer wieder mal etwas dazu.
Wenn ich eine geänderte Datenbank ausliefere, mache ich einen "Recompile Script" und bin sicher, dass alle LS-Klassen auf dem aktuellen Stand sind. Die Java-Bibliotheken enthalten jetzt die class-Files. Diese werden aber nicht automatisch aktualisiert, sondern sind immer auf dem Stand, in dem Sie gespeichert wurden. Wenn ich jetzt einen neuen Agenten schreiben und auf einen neue Funktion zugreifen will, muss ich zuerst die ScriptLib aktualisieren. Und das geht halt nur manuell: ScriptLib öffnen -> Edit Project -> Refresh All -> Dialog schließen -> Neu Speichern. Das Problem taucht natürlich nur dann auf, wenn man allgemeine Klassen hat, die in mehreren Datenbanken benutzt werden. Wenn Du eine spezielle Klasse für eine Datenbank hast, dann ist mit einer Änderung schon alles erledigt.
Da ich jetzt alle Klassen in einer Bibliothek habe reicht das oben beschriebene Prozedere aus, ansonsten muss dies für jede Bibliothek gemacht werden und das kann recht mühsam sein. Eine andere Möglichkeit habe ich leider nicht gefunden.
Einen Vorteil hat Java in Notes: Mit einem Design-Refresh ist die neue Version in einer anderen Datenbank und kann auch direkt benutzt werden. Bei Lotus Script ist häufig ein Recompile notwendig, wenn sich die Klasse verändert hat, sonst laufen Agenten, die solche Klassen verwenden haben, nicht mehr.
Klar gibt es Decompiler. Wahrscheinlich auch für compilierten LotusScript-Code. Mit genügend krimineller Energie kann man alles bekommen. Mir geht's eigentlich eher darum, dass man nicht so auf die Schnelle an den Code rankommt, da stecken ja schließlich ettliche Mannjahre Arbeit drin... Sicher nur ein kleiner Schutz, aber immer noch besser als nichts. Und außerdem ist der decompilierte Code nur bedingt mit dem Originalcode identisch.
Im Extremfall kopiert sich jemand Deinen Code, meldet ein Patent an und Du muss dann noch Lizenzgebühren bezahlen für Deinen eigenen Code...
Gruß,
Joachim