JBoss EAP 7 - 注入资源的错误跟踪

JBoss EAP 7 - erroneous trace on Injected Resources

我 运行 遇到了一个问题,我想我可能会看看是否有人知道答案。这不是一个太大的问题,因为实际上正在注入资源 - 但是控制台正在显示资源无法解析的信息性警告。

EAP 5.1.2 中不会出现此问题。我只是好奇是否有人 运行 遇到了这个问题,可能我在 EAP 7 中没有正确地做事,因此有一个解决方法。

背景:

  1. 打包在 EAR 中的 EJB Web 服务。 EAR 没有 application.xml 或 jboss-deployment-structure.xml

注意:虽然我确实尝试添加 jboss-deployment-structure.xml 只是为了看看它是否有帮助。

  1. 无状态 EJB 是一种网络服务

这是来自 ejb-jar.xml 文件的片段:

        <env-entry>
            <description>Variable to distinguish between prod, uat and qa environments</description>
            <env-entry-name>net.mycompany.mypackage.mysubpackage.MyWSService.isUAT</env-entry-name>
            <env-entry-type>java.lang.Boolean</env-entry-type>
            <env-entry-value>false</env-entry-value>
        </env-entry>

        <env-entry>
            <description>Variable to distinguish between prod, uat and qa environments</description>
            <env-entry-name>isQA</env-entry-name>
            <env-entry-type>java.lang.Boolean</env-entry-type>
            <env-entry-value>false</env-entry-value>
        </env-entry>

如您所见,我两种方法都试过了,例如在 env-entry-name 中有完整的包和 class 名称以及普通的旧 env 条目名称

这是 Web 服务代码片段:

@SuppressWarnings("unused")
@Stateless
@Local(IMyWSService.class)
@WebService
public class MyWSService implements IMyWSService {

    @Resource(name = "isUAT")
    private boolean isUAT;
    @Resource
    private boolean isQA;

    @WebMethod
    @ResponseWrapper(localName="doSomethingResponse", className="Response", targetNamespace="http://model.mysubpackage.mypackage.net")
    public Response doSomething
    (@WebParam(name="param1", mode=Mode.IN) String param1
    , @WebParam(name="param2", mode=Mode.IN) String param2
    , @WebParam(name="param3", mode=Mode.IN) String param3) {

    //more and more code
    .
    .
    .
    //pertinent method
    initAndSetEnvEntrieVars();
    .
    .
    .
    //the method which actually utilizes the environment variables
    private void initAndSetEnvEntrieVars() {
    //setup env-entry related vars
            if(isUAT){
                System.out.println("We're in UAT");

            }else if(isQA){
                System.out.println("We're in QA");
            }
    }

注意: 再一次,这些值实际上被注入了,为了简洁起见,我从代码中删除了大约 15 个值。

这是 JBoss 控制台中的输出

12:43:34,919 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 2) WFLYDS0004: Found MyUseful.ear in deployment directory. To trigger deployment create a file called MyUseful.ear.dodeploy
12:43:34,925 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0027: Starting deployment of "MyUseful.ear" (runtime-name: "MyUseful.ear")
12:43:34,968 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0207: Starting subdeployment (runtime-name: "MyUsefulService.jar")
12:43:35,017 INFO  [org.jboss.weld.deployer] (MSC service thread 1-3) WFLYWELD0003: Processing weld deployment MyUseful.ear
12:43:35,030 INFO  [org.jboss.weld.deployer] (MSC service thread 1-3) WFLYWELD0003: Processing weld deployment MyUsefulService.jar
12:43:35,032 INFO  [org.jboss.as.ejb3.deployment] (MSC service thread 1-3) WFLYEJB0473: JNDI bindings for session bean named 'MyWSService' in deployment unit 'subdeployment "MyUsefulService.jar" of deployment "MyUseful.ear"' are as follows:

java:global/MyUseful/MyUsefulService/MyWSService!net.mycompany.mypackage.mysubpackage.IMyWSService 
java:app/MyUsefulService/MyWSService!net.mycompany.mypackage.mysubpackage.IMyWSService 
java:module/MyWSService!net.mycompany.mypackage.mysubpackage.IMyWSService 

12:43:35,034 INFO  [org.jboss.weld.deployer] (MSC service thread 1-3) WFLYWELD0006: Starting Services for CDI deployment: MyUseful.ear
12:43:35,036 INFO  [org.jboss.weld.deployer] (MSC service thread 1-6) WFLYWELD0009: Starting weld service for deployment MyUseful.ear
12:43:35,056 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 71) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
12:43:35,057 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 71) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
12:43:35,057 INFO  [org.jboss.ws.cxf.metadata] (MSC service thread 1-7) JBWS024061: Adding service endpoint metadata: id=MyWSService
 address=http://localhost:8080/MyUsefulService/MyWSService
 implementor=net.mycompany.mypackage.mysubpackage.MyWSService
 serviceName={http://model.mysubpackage.mypackage.net/}MyWSServiceService
 portName={http://model.mysubpackage.mypackage.net/}MyWSServicePort
 annotationWsdlLocation=null
 wsdlLocationOverride=null
 mtomEnabled=false
12:43:35,058 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 71) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
12:43:35,058 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (ServerService Thread Pool -- 71) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be passivated.
12:43:35,068 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 71) WFLYCLINF0002: Started client-mappings cache from ejb container
12:43:35,080 INFO  [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (MSC service thread 1-7) Creating Service {http://model.mysubpackage.mypackage.net/}MyWSServiceService from class net.mycompany.mypackage.mysubpackage..MyWSService
12:43:35,144 INFO  [org.apache.cxf.endpoint.ServerImpl] (MSC service thread 1-7) Setting the server's publish address to be http://localhost:8080/MyUsefulService/MyWSService
12:43:35,146 INFO  [org.apache.cxf.common.injection.ResourceInjector] (MSC service thread 1-7) failed to resolve resource isUAT
12:43:35,147 INFO  [org.apache.cxf.common.injection.ResourceInjector] (MSC service thread 1-7) failed to resolve resource isQA
12:43:35,183 INFO  [org.jboss.ws.cxf.deployment] (MSC service thread 1-7) JBWS024074: WSDL published to: file:/C:/jboss-eap-7.0/standalone/data/wsdl/MyUseful.ear/MyUsefulService.jar/MyWSServiceService.wsdl
12:43:35,198 INFO  [org.jboss.as.webservices] (MSC service thread 1-4) WFLYWS0003: Starting service jboss.ws.endpoint."MyUseful.ear"."MyUsefulService.jar".MyWSService
12:43:35,378 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 71) WFLYUT0021: Registered web context: /MyUsefulService
12:43:35,403 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) WFLYSRV0010: Deployed "MyUseful.ear" (runtime-name : "MyUseful.ear")

同样,这更像是一件麻烦事,但我觉得我会 运行 由你们所有人完成,以防万一其他人在研究它时陷入困境几个小时。

Update:抱歉,我没有意识到 StackExchange 和 Whosebug 之间的区别 - 一直想知道为什么名称不同......但太忙了,找不到原因。

所以在从好人那里得到一些 help/advice 之后,例如JBoss 论坛中的 Alessio Soldano 和 jaikiran pai Alessio 基本上说: “你好, 我需要去检查代码以确认,但我认为那里发生的事情是 WS 层基本上通过不同的机制来注入值。首先,它尝试让 Apache CXF 层解析值,如果失败(此处显示日志),它使用内部 JBoss 机制,这实际上是从 ejb-jar.xml 描述符获取值这里。

和...

”只需忽略日志中的该消息即可完成。这基本上是内部事务,日志来自 apache cxf,因此在这种情况下我们无能为力。 您链接的主题与一个略有不同的场景有关,该场景是由错误(嗯,当时缺少的功能)引起的,但已解决。"

论坛 post 是: JBoss EAP 7 - erroneous trace on Injected Resources

如果有人想进一步跟进它 - 看来我们现在只是坚持使用它