Tout en essayant de migrer une application de JBoss EAP 5 à JBoss EAP ainsi que d'ajouter des fonctionnalités supplémentaires telles que JAX-RS je reçois l'erreur suivante:JBoss EAP 7, Exception Weld seulement @Dependent est autorisé
WELD-000082: L'interface d'étendue javax.enterprise.context.RequestScoped n'est pas autorisée sur les beans de session sans état pour la classe net.MyCompany.My.service.MyIPAuthJaxRsService. Seul @Dependent est autorisé.
La trace complète de la pile:
1:02:29,721 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."C1Authentication.ear".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."C1Authentication.ear".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000082: Scope interface javax.enterprise.context.RequestScoped is not allowed on stateless session beans for class net.MyCompany.My.service.MyIPAuthJaxRsService. Only @Dependent is allowed.
at org.jboss.weld.bean.SessionBean.checkScopeAllowed(SessionBean.java:122)
at org.jboss.weld.bean.SessionBean.internalInitialize(SessionBean.java:101)
at org.jboss.weld.bean.RIBean.initialize(RIBean.java:69)
at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$5.doWork(ConcurrentBeanDeployer.java:121)
at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$5.doWork(ConcurrentBeanDeployer.java:118)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Dans Eclipse, les projets sont à facettes 3.2 EJB et Java 1.7
Mon fichier EJB-jar.XML contient:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" version="3.2">
<display-name>C1AuthService</display-name>
<enterprise-beans>
<session>
<ejb-name>MyWSService</ejb-name>
<ejb-class>net.MyCompany.My.service.MyWSService</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
<session>
<ejb-name>MyIPAuthJaxRsService</ejb-name>
<ejb-class>net.MyCompany.My.service.MyIPAuthJaxRsService</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
<session>
<ejb-name>MyIPAuthJaxRsServiceApplication</ejb-name>
<ejb-class>net.MyCompany.My.service.MyIPAuthJaxRsServiceApplication</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
Les deux classes JAX-RS sont:
package net.mycompany.my.service;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
@ApplicationPath(value="/C1AuthService")
public class MyIPAuthJaxRsServiceApplication extends Application {
private Set singletons = new HashSet();
public MyIPAuthJaxRsServiceApplication() {
singletons.add(new MyIPAuthJaxRsService());
}
@Override
public Set getSingletons() {
return singletons;
}
@Override
public Set> getClasses() {
// TODO Auto-generated method stub
return null;
}
}
package net.mycompany.my.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/C1AuthService")
public class MyIPAuthJaxRsService {
public MyIPAuthJaxRsService() {
}
@GET
@Path("/test")
public String test() {
return "Hello RESTFul 2";
}
}
Votre classe 'MyIPAuthJaxRsServiceApplication' n'a pas besoin de' @ Stateless' et n'a probablement pas besoin de surcharger les méthodes. –
Merci @SteveC pour l'entrée!J'essaierai de nouveau sans le @Stateless J'obtiendrais certainement l'erreur '@Dependent is allowed' pour la classe, mais je suppose que j'en avais besoin pour les deux fois que j'ai pensé à l'ajouter à la classe! ** mise à jour, maintenant je reçois l'exception pour cette classe ainsi il semble que c'est nécessaire ** Et merci de l'avoir signalé sur les remplacements - enlevé. En éditant le post, n'hésitez pas à vérifier l'édition car il y a une note! – JGlass