JEE5: Verwendung von zwei Interfaces

SilencerandLois

Aktives Mitglied
Hallo zusammen,
ich möchte gerne, dass in JEE5 eine Klasse eine abstrakte Oberklasse implmentiert, wie auch zwei Interfaces. Die Implementierung mit der abstrakten Oberklasse und einem Interface funktioniert auch einwandfrei. Leider bekomme ich jedoch beim hinzufügen der zweiten Interface-Klasse eine Fehlermeldung beim Deployment auf meinem Oracle Weblogic-Server 10.3.6.

Meine Klassen sehen aktuell wie folgt aus:
Abstrake Oberklasse (mit dieser funktioniert das Deployment)
Java:
public abstract class AbstractClass {...}

Interface 1(mit dieser funktioniert das Deployment)
Java:
public interface Interface1 {...}

Interface 2(mit dieser funktioniert das Deployment NICHT)
Java:
public interface Interface2 {...}

Meine konkrete Implementierung sieht nun wie folgt aus:
Implementierung
Java:
@Local
@Stateless(mappedName = "AbstractClassImpl ", name = "AbstractClassImpl ")
@TransactionManagement(TransactionManagementType.CONTAINER)
public class AbstractClassImpl extends AbstractClass implements Interface1,  Interface2

Sobald ich Interface2 hinzufüge kracht das Deployment mit folgender Fehlermeldung:
Code:
There are 1 nested errors: weblogic.j2ee.dd.xml.AnnotationProcessException: The session bean Interface1does not have a client view specified. Since the bean class class AbstractClassImpl implements multiple interfaces, you must indicate which of these interfaces are local or remote business interfaces by means of the Local or Remote annotation or in the deployment descriptor.

Ich habe anschließend versucht, Interface2 mit der @Local-Annotation zu erweitern, was aber auch in einem Deploymentfehler resultiert.

Wie kann ich nun konkret zwei Interfaces verwenden? :bahnhof:

Danke für eure Antworten!
SilencerandLois
 

Marc T.

Bekanntes Mitglied
Ich habe den Fehler noch nie gesehen und konnte jetzt auf die Schnelle auch nichts
dazu finden, deshalb kann ich nur raten!

Probier mal bitte aus, dem einen Interface die Annotaion @Remote und dem anderen
Interface die Annotation @Local zu verpassen und bei deiner Abstrakten Klasse,
die die beiden Interfaces implementiert, die @Local Annotation weg zu lassen.

Ich muss allerdings dazu sagen, dass ich es gerade mal kurz getestet habe:

Java:
@Local
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public abstract class AbstractClass implements InterfaceOne, InterfaceTwo {

}

Java:
@Local
public interface InterfaceOne {

}

Java:
@Local
public interface InterfaceTwo {

}

Und keinen Deployment-Fehler bekommen habe. Ist die Verwendung von J2EE 5
notwendig? J2EE 6 ist Standard und es gibt auch schon J2EE7. Vielleicht ist
es ein Versionsproblem.
 
Zuletzt bearbeitet:

SilencerandLois

Aktives Mitglied
Hallo Marc,
sorry für die späte Rückmeldung!
Nachdem ich die entsprechenden Stellen mit @LOCAL annotiert habe, funktioniert auch alles.

Danke für die Hilfe!
Kann mir jemand erklären, warum es nun funktioniert und vorher nicht? Es ist zwar schön, das es nun läuft, aber verstehen tu ichs noch nicht :autsch:

Danke!
 

Marc T.

Bekanntes Mitglied
Also ich weiß nicht, welche Klasse oder welches Interface du nun letztendlich
verwendet hast (also instanziiert oder Injected), aber wichtig ist zu wissen,
dass Annotations nicht vererbt werden. Annotations sind nur innerhalb der
Klasse gültig, in der sie definiert sind.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben