# JEE5: Verwendung von zwei Interfaces



## SilencerandLois (25. Nov 2013)

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)*

```
public abstract class AbstractClass {...}
```

*Interface 1(mit dieser funktioniert das Deployment)*

```
public interface Interface1 {...}
```

*Interface 2(mit dieser funktioniert das Deployment NICHT)*

```
public interface Interface2 {...}
```

Meine konkrete Implementierung sieht nun wie folgt aus:
*Implementierung*

```
@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:

```
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. (25. Nov 2013)

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:


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

}
```


```
@Local
public interface InterfaceOne {

}
```


```
@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.


----------



## SilencerandLois (25. Nov 2013)

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. (25. Nov 2013)

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.


----------



## SilencerandLois (25. Nov 2013)

Danke für die Hilfe!
Ich kennzeichne die Frage als gelöst


----------

