Home Forum Nuclos Entwicklung Makros und Regeln Eigene Klassen

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 19)
  • Autor
    Beiträge
  • #1915
    Erik Bergmann
    Teilnehmer

    Hallo,

    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.

    #1919
    Thomas Schiffmann
    Teilnehmer

    Hallo 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
    tsc

    #1925
    Erik Bergmann
    Teilnehmer

    tsc 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…

    #1928
    Alpha Alpha
    Teilnehmer

    Hallo,

    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

    #1929

    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“).

    kling sehr interessant! könnte man sowas als normale Funktionalität anbieten, sodass ich bei Erstellung der Regel auch zusätzliche Jars hochladen kann?!

    #1930
    Erik Bergmann
    Teilnehmer

    alpha 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…

    #1931
    Erik Bergmann
    Teilnehmer

    Hallo 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,
    Bergmann

    #1935
    Alpha Alpha
    Teilnehmer

    Hallo 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

    #1940

    Hallo 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]

    habe ich
    s. Regeln: zusätzliche jars

    #1943
    Erik Bergmann
    Teilnehmer

    alpha 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) {
    List listOfMdvo = new ArrayList(server.getDependants("..."));
    ...
    Collections.sort(listOfMdvo, new Comparator
    () {
    public int compare(MasterDataVO mdvo1, MasterDataVO mdvo2) {
    ...
    }
    });
    ...
    }

    #1970
    Thomas Schiffmann
    Teilnehmer

    Auch 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.

    #1981
    Erik Bergmann
    Teilnehmer

    Hallo 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,
    Bergmann

    #1998

    Hallo,

    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.

    #2092
    Erik Bergmann
    Teilnehmer

    Hallo,

    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,
    Bergmann

    #2096
    Erik Bergmann
    Teilnehmer

    Hallo,

    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

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 19)