2017-06-11 2 views
0

J'ai la méthode suivante. Lorsque la méthode est déclarée final, la valeur @EJB est nulle. Pourquoi cela est-il ainsi? Cela fonctionne, quand j'omets le mot-clé final.La méthode déclarée comme étant la cause finale de @EJB est nulle, pourquoi?

@Stateless 
@TransactionManagement(TransactionManagementType.CONTAINER) 
public class TokenService2 
{ 
    @EJB 
    private Configuration configuration; 

    public final void processAuthentication(String authCode) throws FileNotFoundException, IOException 
    { 
     //here configuration is NULL. 
    } 
} 

(La configuration elle-même est un singleton)

Répondre

2

haricots Ejb n'aiment pas tout autre modificateur de mehod à part public pour les méthodes d'affaires (méthodes invocable par les clients). Bien que ce cas particulier ressemble à un bug dans Wildfly. Wildfly 10 est conforme JavaEE7 donc son conteneur EJB doit être conforme à la spécification EJB 3.2 qui dit ce qui suit sur les haricots de session:

Seules les méthodes publiques de la classe de haricots et de tout sauf superclasses java.lang.Object peut être invoqué via la vue sans interface. invocations de méthodes Tentatives avec d'autres ers de modifi- d'accès via la référence de vue sans interface doit entraîner la javax.ejb.EJBException

Ainsi, votre méthode d'affaires ne peuvent pas être de toute façon définitive, mais votre serveur doit informer vous à ce sujet. .