Tomcat 8、axis2 webservices aar、spring jndi 未绑定在上下文中

2024-01-12

我一直在解决在 axis2 Web 服务运行的上下文中找不到 JNDI 名称的问题。当我使用 spring 时,仅在 Tomcat 8 中出现此问题。 一些细节:(我将提供相关的元素) 1. 服务.xml

<service name="ScoreService" class="com.bpl.ws.service.ScoreServiceInitializer">
<description>Simple test service</description>
<parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter>
<parameter name="SpringBeanName" locked="false">scoreService</parameter>

2.服务器.xml:

      <Host name="localhost"  appBase="webapps" xmlBase="C:\Applications\apache-tomcat-8.0.30-windows-x64\context"
        unpackWARs="true" autoDeploy="true">
  1. 上下文.xml

        <JarResources className="org.apache.catalina.webresources.DirResourceSet"
               base="C:\Applications\apache-tomcat-8.0.30-windows-x64\commonLib" webAppMount="/WEB-INF/lib"/>
    

4.上下文文件中的JNDI资源:

<Resource name="jdbc/ADS" auth="Container"
  factory="com.bpl.ws.EncryptedJdbcDataSourceFactory"
  type="javax.sql.DataSource"
  driverClassName="oracle.jdbc.OracleDriver"
  url="jdbc:oracle:thin:@xxxxxxx.com:3203/xxxx"
  username="xxxxx"
  password="xxxx"
  initialSize="10"
  logAbandoned="false"
  maxActive="20"
  maxIdle="10"
  maxWait="10000"
  removeAbandoned="true"
  removeAbandonedTimeout="120"
  jdbcInterceptors="QueryTimeoutInterceptor(queryTimeout=10)"
  testOnBorrow="true"
  validationInterval="30000"
  validationQuery="Select 1 from dual"/>

如 services.xml 文件列表所示,我使用初始化器类,加载 spring 上下文的代码如下所示: 4.ScoreServiceInitializer

public void startUp(ConfigurationContext ignore, AxisService service) {
    System.out.println("SCORESERVICE:: Starting up..");
    DataSource ds;


        ClassLoader cloader = service.getClassLoader();
        Thread.currentThread().setContextClassLoader(cloader);
        System.out.println("SCORESERVICE:: spring context starting up");
        spContext = new ClassPathXmlApplicationContext(new String[] {"DST-Context.xml"},false);
        spContext.setClassLoader(cloader);


        try {
            spContext.refresh();
  1. spring context.xml (DST-Context.xml)

DST-Context.xml 条目如下所示:

<bean id="applicationContext"
    class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />

<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/ADS</value>
    </property>
</bean>
  1. 汤姆猫日志:

    [警告] 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名为“datasource”的 bean 时出错 [DST-Context.xml]:调用 init 方法失败;嵌套异常是 javax.naming.NameNotFoundException:名称 [java:comp/env/jdbc/ADS] 未在此上下文中绑定。无法找到 [java:comp].org.springframework.beans.factory.BeanCreationException:创建在类路径资源 [DST-Context.xml] 中定义的名为“datasource”的 bean 时出错:调用 init 方法失败;嵌套异常是 javax.naming.NameNotFoundException: 名称 [java:comp/env/jdbc/ADS] 未在此上下文中绑定。无法找到 [java:comp]。

在不更改配置中的任何内容的情况下,如果我更改 ScoreServiceInitializer 来执行以下操作:

initCtx = new InitialContext();

        envCtx = (Context) initCtx.lookup("java:comp/env"); 

        ds = (DataSource)
                  envCtx.lookup("jdbc/ADS");

一切正常。正如你在这里看到的,我不使用任何 spring 并且 jndi 数据源在上下文中。

如果我在 Tomcat 7 中使用 spring 配置部署代码,它可以正常工作。 spring 上下文似乎是问题所在,但已经研究了一段时间,似乎无法弄清楚为什么 Tomcat 8 与 Tomcat 7 相比有不同的行为。我知道 Tomcat8 在资源的方式方面改变了一些行为配置完毕,dbcp 现在是 dbcp2,我已经相应地更新了配置文件。 任何帮助是极大的赞赏。如果需要任何其他信息,请告诉我。


@bplso 当我在 axis2 项目上将 tomcat 7 升级到 tomcat 8.5 时,我遇到了同样的问题,请尝试图像中给出的步骤。它可能会解决你的问题。 !

Step 1: Specify the connection resource in server.xml inside <GlobalNamingResources> like 
<Resource name="jdbc/name" 
global="jdbc/name" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
auth="Container" 
type="javax.sql.DataSource" 
username="xxx" 
password="YYY" 
driverClassName="net.sourceforge.jtds.jdbc.Driver" 
url="jdbc:jtds:sqlserver://host:port/dbname" 
maxTotal="10" 
maxIdle="10" 
maxWaitMillis="10000" /> 


Step 2: Specify the resource reference in web.xml inside the <web-app> like 

<resource-ref> 
<description> This is a reference to the global Resource for SQL database connetion. </description> 
<res-ref-name>jdbc/name</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 


Step 3: Create a context.xml file and paste it in your project/META-INF/ path as below 

<?xml version=.1.0 encoding="UTF-8.?> 
<Context> 
<ResourceLink name="jdbc/name" global="jdbc/name" type="javax.sgl.DataSource" 
</Context>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 8、axis2 webservices aar、spring jndi 未绑定在上下文中 的相关文章

随机推荐

  • 如何访问 Sharepoint 2007/2010/2013 _layouts 文件夹

    我正在尝试在该位置插入一些数据 mysiteurl layouts 因为我必须使用第三方软件 该软件使用该文件夹中存储的数据 我是机器的管理员 Windows Server 2008R2 上的 Sharepoint 2010 但 Share
  • ActiveMQ - 通过命令行删除/清除所有队列

    有没有办法通过命令行 win linux 删除 清除ActiveMQ中的所有队列 我只能找到特定队列的命令 或者也许有办法通过 activeMQ 管理员来做到这一点 同样 我只找到了如何一一删除 清除队列 这可能非常乏味 Thanks 你可
  • gitlab.com SSH 连接超时

    我尝试让 Gitlab 与 SSH 一起工作 但不行 我已完成以下步骤 1 生成ssh密钥 ssh keygen t rsa C email protected cdn cgi l email protection b 4096 2 在文件
  • WPF DataGrid 虚拟化无法正常工作?

    我有一个 DataGrid 其中有一个 DataTable 设置为其 ItemsSource DataTable 包含 24 列和约 1600 行 实际上我稍后必须加载更多行 但目前这已经够麻烦的了 尽管将列和行的虚拟化设置为活动状态 Da
  • 使用 libwebsockets 编译 libuv

    我正在尝试运行与 LWS 库一起安装的 libwebsockets test server 但它不会运行 因为 lwsts 31616 libuv support not generated in 我检查过 libuv 已安装 1 8 0
  • 可以在 Try/Except 中重试/循环吗?

    我试图了解是否可以在 Try Except 调用内部设置循环 或者是否需要重构以使用函数 长话短说 在花了几个小时学习 Python 和 BeautifulSoup 后 我设法将一些代码组合在一起来抓取 URL 列表 将数据提取到 CSV
  • 向元组添加元素的有效方法

    我想向元组添加元素 我找到了两种方法 This https stackoverflow com a 16730367 3337089 and this https stackoverflow com a 1380875 3337089答案说
  • 在 Numpy 中生成对称矩阵

    我正在尝试在 numpy 中生成对称矩阵 具体来说 这些矩阵具有随机位置的条目 并且每个条目中的内容可以是随机的 沿着主对角线 我们不关心其中有哪些条目 因此我也将它们随机化 我采取的方法是首先生成一个 nxn 全零矩阵 然后简单地循环矩阵
  • 正则表达式在引号外的特定字符上分割字符串

    如何在保留带引号的字符串的同时分割这一行 gt div a more style ui url in tray value 分割的字符在哪里 gt 产生 gt div a more style ui url in tray value 目前
  • 识别哪个文件包含某些特定的头文件

    有时 对于复杂的标头结构 可能会包含一些标头 但很难分辨出来自哪里 是否有某种工具 依赖项查看器 或一种方法如何查找 包含堆栈 哪个源 哪个标头 哪个标头 包含一个特定的头文件 如果头文件被多次包含 找到第一个包含就足够了 找到所有包含是一
  • 我可以在嵌入式交互式 Python 控制台中使用 IPython 吗?

    我使用以下代码片段将其放入 Python shell 程序中 这工作正常 但我只得到标准控制台 有没有办法做同样的事情但使用IPython http ipython scipy org shell import code class Emb
  • 虚拟Qt信号?

    在查看一些 Qt C 代码时 我遇到了这个 class Foo Q OBJECT signals virtual void someSignal const QString str int n Q UNUSED str Q UNUSED n
  • HTTP 基本身份验证和 Atlassian JIRA、Confluence 和 Bitbucket

    我在 Apache 反向代理后面的服务器上部署了 JIRA Confluence 和 Bitbucket 他们中的每一个都通过应用程序链接与其他人连接 现在 我想通过在此之前实现 HTTP 基本身份验证来添加额外的保护层 当我这样做时 我会
  • 如何将任意数量的值绑定到 mysqli 中的准备好的语句? [复制]

    这个问题在这里已经有答案了 我真的希望有人花一点时间来检查我的代码 我正在解析一些新闻内容 我可以将初始解析插入到我的数据库中 其中包含新闻 URL 和标题 我想进一步扩展它 传递每个文章链接并解析文章的内容并将其包含在我的数据库中 最初的
  • MongoDB嵌套数组交集查询

    并提前感谢您的帮助 我有一个 mongoDB 数据库 其结构如下 id objectID userID id movies movieID movieID rating rating 我的问题是 我想搜索具有 userID 3 的特定用户
  • 此应用暂时禁用使用 Google 登录的功能

    当我们尝试向 Google 进行身份验证时 我们会看到以下屏幕 我们尝试验证的应用程序用于内部开发 我们没有将其发布给我们的用户 知道为什么会发生这种情况吗 我们之前遇到过 未经验证的应用程序 屏幕 如下所示 但现在身份验证被禁用 OAut
  • NodeJS 无法读取 ubuntu 中的默认 CA

    在我们的测试环境中 我们使用我们公司签名的 SSL 连接到另一台服务器 每次建立连接时 nodejs 都会抛出异常UNABLE TO VERIFY LEAF SIGNATURE 我通过设置找到了解决方法拒绝未经授权 false 但这不适用于
  • 当没有更多引用时,如何从缓存中删除智能指针?

    我一直在尝试使用智能指针来升级现有的应用程序 并且我正在尝试克服一个难题 在我的应用程序中 我有一个对象缓存 例如 我们称它们为书籍 现在 书籍的缓存是通过 ID 请求的 如果它们在缓存中 则返回它们 如果不在缓存中 则从外部系统请求对象
  • 分类:如果一个类的数据量是另一类的 4 倍,会发生什么?

    我正在尝试调试我的分类器的问题 问题在于 尽管准确率接近 80 但它总是针对给定输入预测相同的类别 我训练 CNN 来检测两个类别之间的差异 A 类有 2575 个 jpeg B 类有 665 个 jpeg 这是否会导致我的 CNN 始终预
  • Tomcat 8、axis2 webservices aar、spring jndi 未绑定在上下文中

    我一直在解决在 axis2 Web 服务运行的上下文中找不到 JNDI 名称的问题 当我使用 spring 时 仅在 Tomcat 8 中出现此问题 一些细节 我将提供相关的元素 1 服务 xml