2017-09-14 5 views
0

Je migre une application de weblogic 10.3 vers weblogic 12.2.Weblogic 12.2 ignore @EJB annotation

J'inclue une bibliothèque partagée avec d'autres projets. Ce pot contient des POJO avec annotations @EJB dans ce regard comme ceci:

public abstract BaseSpecialService{ 
    @EJB DelegateService injectedService; 
} 

Notez ceci est juste un POJO: il n'a pas le @Stateless ou l'annotation @Stateful. L'idée est quand je veux utiliser ce service, je l'étend avec une classe de Bean @Stateless Bean concrète dans un autre ejb-jar. Mais je ne veux que cela pour les services dont j'ai besoin, les autres services devraient être traités comme POJOS. Dans weblogic 10, cela fonctionne très bien, mais lorsque je passe à weblogic 12, je ne peux pas déployer l'application parce que le conteneur essaie d'injecter le DelegateService dans mon exemple ci-dessus, même si l'annotation @EJB n'est pas dans un EJB mais dans un POJO. Je reçois cette erreur sur le déploiement:

[J2EE: 160200] Erreur de résolution ejb-ref "com.example.BaseSpecialService/injectedService" du module "null" de application "myapp-0.1.0-SNAPSHOT" . L'ejb-ref n'a pas de lien ejb et le nom JNDI du bean cible n'a pas été spécifié. Les tentatives de liaison automatique de l'ejb-ref à son bean cible ont échoué car aucun EJB de l'application n'a été trouvé pour implémenter l'interface "com.example.DelegateService". Reliez ou mappez cette ejb-ref à son EJB cible et assurez-vous que les interfaces déclarées dans l'ejb-ref sont correctes.

Mon interprétation est que, dans Java EE 7 tous les pots sont numérisées pour les annotations, alors que dans Java EE 5, seuls les pots qui sont marqués comme modules EJB dans le application.xml sont numérisées. Je suis à la recherche d'un moyen d'empêcher le serveur d'applications d'injecter des dépendances dans mes POJO et de traiter le pot de la bibliothèque partagée comme un jar normal, pas comme un ejb-jar. Mais je ne trouve rien pour le faire. Toute aide est très appréciée.

Répondre

0

Semble que le conteneur CDI de WebLogic analyse votre fichier jar et essaie d'y injecter des POJO/EJB. Ma suggestion est de désactiver l'analyse CDI pour les fichiers JAR donnés et voir le résultat. Vous pouvez le faire en ajoutant un fichier nommé beans.xml contenant le contenu suivant et de le mettre dans le dossier META-INF de votre fichier jar:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    version="1.1" bean-discovery-mode="none"> 
</beans> 
+0

Merci pour votre réponse. Malheureusement, cela n'aide pas :(J'ai aussi essayé de marquer explicitement le jar comme un module dans le fichier application.xml, mais cela ne change rien, je vais refactoriser le pot en petits pots et essayer de le déployer. façon –