Home › Forum › Nuclos Entwicklung › Makros und Regeln › Eigene Klassen
- Dieses Thema hat 18 Antworten und 6 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 2 Monaten von
Ramin Goettlich.
-
AutorBeiträge
-
21 Mai 2010 um 14:40 Uhr #1915
Erik Bergmann
TeilnehmerHallo,
wir haben eine sehr komplexe Berechnungsregel und würden zum Halten interner Berechnungs-Zwischenstände gerne eine eigene Hilfsklassen definieren.
Geht das? Eine Regel sieht ja mehr nach einer einzigen Methodendefinition aus?
Danke.
21 Mai 2010 um 15:02 Uhr #1919Thomas Schiffmann
TeilnehmerHallo ebergmann,
Klassen in Regeln zu definieren, ist leider nicht möglich, aber versuchen Sie mal folgendes Vorgehen:
Packen Sie Ihre kompilierten Klassen in ein JAR und kopieren dieses in das ‚lib‘-Verzeichnis des Application Servers. Sie müssen dann nur noch die Jar-Datei inkl. Pfad zum Parameter „NucleusCodeGenerator Class Path“ semikolon-spariert hinzufügen. Dann sollten Sie die Klassen in Ihrer Regel verwenden können. Bei Bedarf können Sie auch die benötigten Packages/Klassen zu den imports hinzufügen (Paramater „Additional Imports for Rules“).Viele Grüße
tsc21 Mai 2010 um 15:21 Uhr #1925Erik Bergmann
Teilnehmertsc schrieb:
Sie Ihre kompilierten Klassen in ein JAR und kopieren dieses in das ‚lib‘-Verzeichnis des Application Servers. Sie müssen dann nur noch die Jar-Datei inkl. Pfad zum Parameter „NucleusCodeGenerator Class Path“ semikolon-spariert hinzufügen. Dann sollten Sie die Klassen in Ihrer Regel verwenden können. Bei Bedarf können Sie auch die benötigten Packages/Klassen zu den imports hinzufügen (Paramater „Additional Imports for Rules“).
Danke für den Hinweis, aber das ist zu zuviel Aufwand 🙁 .
Insbesondere ist diese Hilfsklasse ja nur für die Regel gedacht, so öffentlich möchte ich sie gar nicht machen…
21 Mai 2010 um 15:30 Uhr #1928Alpha Alpha
TeilnehmerHallo,
ebergmann schrieb:
Eine Regel sieht ja mehr nach einer einzigen Methodendefinition aus?
Es ist zwar richtig, dass die Regel noch einer einzigen Methodendefinition aussieht. Allerdings wird der Regeltext genau so in eine generierte Code-Vorlage eingebettet.
Daher kann etwas tricksen und neben der Regelmethode noch zusätzliche Hilfsmethoden in der Regel definieren und diese verwenden. Eigene Klassen (auch innere Klassen) gehen aber nicht.
alpha
21 Mai 2010 um 15:39 Uhr #1929Rostislav Maksimovski
TeilnehmerSie Ihre kompilierten Klassen in ein JAR und kopieren dieses in das ‚lib‘-Verzeichnis des Application Servers. Sie müssen dann nur noch die Jar-Datei inkl. Pfad zum Parameter „NucleusCodeGenerator Class Path“ semikolon-spariert hinzufügen. Dann sollten Sie die Klassen in Ihrer Regel verwenden können. Bei Bedarf können Sie auch die benötigten Packages/Klassen zu den imports hinzufügen (Paramater „Additional Imports for Rules“).
kling sehr interessant! könnte man sowas als normale Funktionalität anbieten, sodass ich bei Erstellung der Regel auch zusätzliche Jars hochladen kann?!
21 Mai 2010 um 15:42 Uhr #1930Erik Bergmann
Teilnehmeralpha schrieb:
Daher kann etwas tricksen und neben der Regelmethode noch zusätzliche Hilfsmethoden in der Regel definieren und diese verwenden. Eigene Klassen (auch innere Klassen) gehen aber nicht.
Warum funktionieren dann eigene innere Klassen nicht? Die müssten doch ebenfalls mit eingebettet werden…
21 Mai 2010 um 15:43 Uhr #1931Erik Bergmann
TeilnehmerHallo rom,
rom schrieb:
kling sehr interessant! könnte man sowas als normale Funktionalität anbieten, sodass ich bei Erstellung der Regel auch zusätzliche Jars hochladen kann?!
Das klingt nach einer guten Idee. Wir hätten da auf jeden Fall auch Interesse daran. Mach doch einen Feature-Request daraus…
Viele Grüße,
Bergmann21 Mai 2010 um 15:53 Uhr #1935Alpha Alpha
TeilnehmerHallo ebergmann,
ebergmann schrieb:
Warum funktionieren dann eigene innere Klassen nicht? Die müssten doch ebenfalls mit eingebettet werden…
Das ist richtig. Syntaktisch macht die Regel auch keine Probleme. Allerdings kompiliert Java jede Klasse in eine eigene Datei (die inneren Klassen wandern also in eigene Dateien mit einem speziellen Suffix).
Momentan wird aber nur die kompilierte Datei der Hauptklasse für die Ausführung herangezogen. Daher sind die inneren Klassen dann zur Laufzeit der Regel nicht bekannt.
alpha
21 Mai 2010 um 16:01 Uhr #1940Rostislav Maksimovski
TeilnehmerHallo rom,
rom schrieb:
[quote]kling sehr interessant! könnte man sowas als normale Funktionalität anbieten, sodass ich bei Erstellung der Regel auch zusätzliche Jars hochladen kann?!Das klingt nach einer guten Idee. Wir hätten da auf jeden Fall auch Interesse daran. Mach doch einen Feature-Request daraus…
Viele Grüße,
Bergmann[/quote]21 Mai 2010 um 16:15 Uhr #1943Erik Bergmann
Teilnehmeralpha schrieb:
Momentan wird aber nur die kompilierte Datei der Hauptklasse für die Ausführung herangezogen. Daher sind die inneren Klassen dann zur Laufzeit der Regel nicht bekannt.
Gilt das auch für anonyme innere Klassen? Was ist denn dann mit der folgendem Regel, da ist doch auch eine beteiligt?
public void rule(RuleInterface server) {
ListlistOfMdvo = new ArrayList(server.getDependants("..."));
...
Collections.sort(listOfMdvo, new Comparator() {
public int compare(MasterDataVO mdvo1, MasterDataVO mdvo2) {
...
}
});
...
}22 Mai 2010 um 00:40 Uhr #1970Thomas Schiffmann
TeilnehmerAuch anonyme Klassen – ebenso wie lokale Klassen – werden im Moment leider nicht unterstützt.
Die Regel lässt sich zwar kompilieren, ausgeführt werden kann Sie aber nicht. Hier muss erst das Class-Loading für Regeln erweitert werden. Ein CR diesbezüglich liegt bereits vor.
25 Mai 2010 um 12:29 Uhr #1981Erik Bergmann
TeilnehmerHallo tsc,
tsc schrieb:
Auch anonyme Klassen – ebenso wie lokale Klassen – werden im Moment leider nicht unterstützt.
Danke für den Hinweis. Dann muss ich in der Regel wohl irgendwie auf die Sortierung verzichten… 🙁
Oder gibt es eine andere Möglichkeit, das zu bewerkstelligen (außer die Klassen in ein eigenes .jar auszulagern)?Viele Grüße,
Bergmann25 Mai 2010 um 14:01 Uhr #1998Hartmut Beckschulze
TeilnehmerHallo,
das innere Klassen nicht funktionieren liegt daran das nach dem Kompiliervorgang $ Dateien erstellt werden. Diese werden nicht geladen, es werden nur die .class Dateien geladen die den Namen haben wie die Regel.
Aber gut das du es sagst, sollte kein Problem sein einen „Wildcard“ Import zu machen damit die kompilierten Klassen auch mit reingeladen werden.
Ich nehm das mal auf.
27 Mai 2010 um 12:20 Uhr #2092Erik Bergmann
TeilnehmerHallo,
die Sortierung macht mir doch jetzt paar Sorgen (scheint doch wichtig zu sein für die Auswertung). Gibt es da momentan vielleicht eine Möglichkeit, mit paar Nuclos-mitgelieferten Hilfsklassen und -methoden weiter zu kommen? Das wäre echt gut…
Viele Grüße,
Bergmann27 Mai 2010 um 12:37 Uhr #2096Erik Bergmann
TeilnehmerHallo,
Aber gut das du es sagst, sollte kein Problem sein einen „Wildcard“ Import zu machen damit die kompilierten Klassen auch mit reingeladen werden.
Bietet Java 6 nicht eine API zum programmatischen Zugriff auf den Compiler mit? Meine, da mal was gelesen zu haben…
Viele Grüße,
Bergmann -
AutorBeiträge