【问题标题】:why the JAXRSIntegration can't lookup JNDI为什么 JAXRSIntegration 无法查找 JNDI
【发布时间】:2022-01-05 16:25:36
【问题描述】:

我需要一些帮助!

我正在使用 javaEE 7、javax-ws-rs 2.0.1 和 Weblogic 12.2.1.4.0。

我的管理服务器日志出现以下错误:

<04.01.2022 16:51 Uhr MEZ> <Warning> <JAXRSIntegration> <BEA-2192505> <An instance of EJB class com.my.company.rest.MyExchangeServer could not be looked up using a simple form name. 
Attempting to look up using the fully-qualified form name.
javax.naming.NameNotFoundException: While trying to look up /app/my-company-web-1.7.0.2/MyExchangeServer in /app/webapp/my-company-web/1607311341.; remaining name '/app/my-company-web-1/7/0/2/MyExchangeServer'

这发生在从 Weblogic 12.1 迁移到 Weblogic 12.2 之后。 该应用程序运行没有问题艰难。 只有 ms_logs 困扰着我们,因为它占用了太多内存。

@ApplicationPath("rest") 
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> restClasses = new HashSet<>();
        restClasses.add(MyExchangeServer.class);
        return restClasses;
    }
}
</web-app>
    ...
    <servlet>
        <servlet-name>Jersey-Servlet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.my.company.rest.ApplicationConfig</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerResponseFilter</param-name>
            <param-value>com.sun.jersey.server.linking.LinkFiler</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey-Servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>
@Stateless
@LocalBean
@Path("serviceInterface")
public class MyExchangeServer {
    ...
}

在 JNDI 树下我发现: java:global.my-int-ear.my-company-web.MyExchangeServer!com.my.company.rest.MyExchangeServer

似乎 MyExchangeServer 类是由 jersey 而不是从 EJB 实例化的。 为什么 JAXRSIntegration 会尝试在 /app/my-company-web-1.7.0.2/MyExchangeServer 下查找?

该应用程序非常强大

【问题讨论】:

    标签: java rest jax-rs weblogic12c java-ee-7


    【解决方案1】:

    现在我找到了解决方案。问题是我仍在我的项目中使用 JAX-RS 1.0。从 WLS 12.2 开始。* JAX-RS 1.0 已弃用。我必须使用 JAX-RS 2.*。

    到目前为止,我只需要更改我的 web.xml 上的 Jersey 配置。我可以走了。

    <web-app>
        <servlet>
            <servlet-name>Jersey-Servlet</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <!-- Register resources and providers under my.package. -->
            <init-param>
                <param-name>jersey.config.server.provider.classnames</param-name>
                <param-value>my.company.rest.ApplicationConfig</param-value>
            </init-param>
            <!-- Enable Tracing support. -->
            <init-param>
                <param-name>jersey.config.server.tracing</param-name>
                <param-value>ALL</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>Jersey-Servlet</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-22
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2011-02-18
      • 2019-12-17
      • 1970-01-01
      相关资源
      最近更新 更多