wie static aber doch nicht ...

tsitra

Bekanntes Mitglied
Hallo :) allerseits,

in einem Spring-Projekt, welches auch Maven und Spring Roo
einsetzt, habe ich in einer class Testclass100,
die mit folgenden Annotationen

@ManagedBean(name = "Testclass100")
@SessionScoped
public class Testclass100 {...}

versehen ist, in einer Methode
public String testMethode300(){...}
eine folgende Anweisung (Aufruf? mit Rückgabe an allElements?)

allElements = Testclass200.testMethode300()

entdeckt und erst mal gedacht testMethode300() sei static in Testclass200,
doch testMethode300() gibt es gar nicht in Testclass200.

(Hinweis: testMethode300() ist als Problem/Fehler markiert:
"The method testMethode300() is undefined for the type Testclass200"
Die Eclipse IDE bietet eine Lösung [1 quick fix available], die da lautet:
Create method 'testMethode300()' in type 'Testclass200')

Kann mir ein Spring-Experte erklären, was das für eine Ursache hat bzw.
was diese Anweisung genau bedeutet und wie sie funktioniert?

Gruß,
tsitra
 

tsitra

Bekanntes Mitglied
Hallo,

die Unklarheit besteht darin, dass trotzdem in der Eclipse IDE unter "Run" (Goals: "deploy" etc.) die Sourcen kompiliert werden und eine xy.war Datei erzeugt wird, die
im tomcat, also als web-Anwendung , gut funktioniert!

Gruß,
tsitra
 

taro

Bekanntes Mitglied
... weil es sich dabei wahrscheinlich nur um einen Test handelt, welcher für den build nicht relevant ist.
 

tsitra

Bekanntes Mitglied
Hallo taro,
Dein Beitrag verstehe ich nicht.

Hinweis:
class Testclass100 in Testclass100.java wird zu Testclass100.class und ist auf jeden Fall produktiv und hat nicht den Zweck irgendwas zu testen.
Es wird auch kein JUnit Test eingesetzt.
(Natürlich sind meine Namen nicht die Originalnamen!)

Gruß,
tsitra
 

taro

Bekanntes Mitglied
Dann muss ich noch einmal nachfragen:

Du bist dir absolut sicher, dass betroffener Code auch während der Ausführung zur Geltung kommt?

Es ist ohne weiteres Möglich, auch fehlerhaften Code zum laufen zu bringen

Kleines Beispiel:
Java:
public class Testabc {

    public static void main(String[] args) {
        Test1 t = new Test1();
        System.out.println("Alles OK");
    }
}

class Test1 {
    public void irgendwas() {
        ichBinNichtDa();
    }
}

so lange ich nicht
Code:
irgendwas()
aufrufe, funktioniert alles wunderprächtig.

Also bitte noch einmal genau nachprüfen, ob der von dir genannte Abschnitt wirklich auch zur Ausführung kommt!
 
Zuletzt bearbeitet:

tsitra

Bekanntes Mitglied
Hi taro,
Danke für den Hinweis.
Dass es "toten Code" und gibt, der problemlos kompiliert wird, ist soweit klar.

Unmittelbar, also direkt, vor
allElements = Testclass200.testMethode300();
habe ich ein
System.out.println("In public String testMethode300(){...}
V O R allElements = Testclass200.testMethode300();");
platziert, welches definitiv zur Laufzeit ausgeführt wird, denn die Meldung erscheint auf der
Ausgabe-Konsole vom tomcat. Es besteht keinerlei Grund zur Annahme
warum die mysteriöse Anweisung, die direkt danach steht, nicht ausgeführt werden sollte.

Deshalb bin ich mir sicher, dass
allElements = Testclass200.testMethode300()[;/B]
ausgeführt wird.

(Außerdem: Tatsächlich haben die Anweisungen auch "sprechende Namen" und es passiert auch das
was der tatsächliche Name von testMethode300(){...} aussagt.)


Viele Grüße,
tsitra
 

tsitra

Bekanntes Mitglied
Hallo taro,

eine Antwort habe ich zwischenzeitlich gefunden.

Der Ausdruck
Testclass200.testMethode300();

befindet sich in einer Datei xy_Roo_Jpa_ActiveRecord.aj :


privileged aspect xy_Roo_Jpa_ActiveRecord {

@PersistenceContext
transient EntityManager xy.entityManager;
...

public static List<xy> Testclass200.testMethode300();{
return entityManager().createQuery("SELECT o FROM xytable o WHERE x = 2", xy.class).getResultList();
}

...

Es geht um aspektorientierte Programmierung und Spring Roo
und dadurch ist so etwas wie
allElements = Testclass200.testMethode300() erlaubt, obwohl es
testMethode300() gar nicht in Testclass200 gibt.
(wie ich anfangs zur Diskussion gestellt habe.)

Da gibt's noch was zu lernen für mich ...

Gruß,
tsitra
 

Ähnliche Java Themen

Neue Themen


Oben