Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss EAP 7,焊接异常仅允许@Dependent_Java_Jakarta Ee_Ejb_Jax Rs_Jboss Eap 7 - Fatal编程技术网

Java JBoss EAP 7,焊接异常仅允许@Dependent

Java JBoss EAP 7,焊接异常仅允许@Dependent,java,jakarta-ee,ejb,jax-rs,jboss-eap-7,Java,Jakarta Ee,Ejb,Jax Rs,Jboss Eap 7,在尝试将应用程序从JBoss EAP 5迁移到JBoss EAP以及添加一些额外功能(如JAX-RS)时,我遇到以下错误: WELD-000082:在类net.MyCompany.My.service.myipauthjaxrservice的无状态会话bean上不允许作用域接口javax.enterprise.context.requestScope。只允许@Dependent 完整堆栈跟踪: 1:02:29,721 ERROR [org.jboss.msc.service.fail]

在尝试将应用程序从JBoss EAP 5迁移到JBoss EAP以及添加一些额外功能(如JAX-RS)时,我遇到以下错误:

WELD-000082:在类net.MyCompany.My.service.myipauthjaxrservice的无状态会话bean上不允许作用域接口javax.enterprise.context.requestScope。只允许@Dependent

完整堆栈跟踪:

    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)
    <?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>
    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;
        }
    }
在Eclipse中,项目方面位于EJB3.2和Java1.7

我的EJB-Jar.xml文件包含:

    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)
    <?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>
    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;
        }
    }

在网上搜索了一段时间后,我发现了以下提供线索的文章:

我还偶然发现:

似乎发生的事情是在EJB-Jar.xml中,我将EJB声明为无状态会话bean,并且通过不在java类中注释它们,CDI/Weld将它们默认为@Dependent,例如,在JBoss文章
中,没有明确定义作用域的CDIBean默认为@Dependent scope。

只需向这两个类添加以下导入和注释:

    package net.mycompany.my.service;

    import javax.ejb.Stateless;
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;

    @Stateless
    @ApplicationPath(value="/C1AuthService")
    public class MyIPAuthJaxRsServiceApplication extends Application {

        private Set singletons = new HashSet();

        public MyIPAuthJaxRsServiceApplication() {
            singletons.add(new MyIPAuthJaxRsService());
        }

    }
基本上检查您是否已经用
@Stateless
注释了ejb,并添加了正确的导入
import javax.ejb.Stateless

编辑-正如@SteveC所指出的,我已经删除了覆盖,但当我试图按照他的建议从MyIPAuthJaxRsServiceApplication中删除@Stateless时,我再次得到了MyIPAuthJaxRsServiceApplication的异常。同样值得注意的是,这个例子甚至不起作用,因此在EJB-Jar.xml中有EJB,甚至不需要注释,我试图在EAR中使用一个EJB项目和Jar,用JAX-RS注释EJB,但显然它不受支持,因为我在这里与JBoss的同事一起工作


看起来您必须为JAX-RS提供一个servlet容器,而EJB可以提供web服务注释这一事实并不意味着它们使用的是servlet容器——哦,我试过了!。也,这个问答更多的是为了修复没有明确定义作用域的CDIBean,默认情况下它是@Dependent scope。
我曾为之奋斗过一段时间,并认为如果其他人遇到同样的问题,我会帮助他们。

你的
myipauthjaxrssserviceapplication
类不需要
@Stateless
,而且很可能需要不需要重写任何方法。感谢@SteveC的输入!我会在没有@Stateless的情况下再试一次,我肯定会得到一个类的
@Dependent is allowed
错误,但我只是假设我在考虑将它添加到一个类时需要它!更新,现在我也得到了该类的异常,因此它似乎是必需的,感谢您在overrides-removed上指出这一点。编辑文章,请随意检查编辑,因为有注释!