【问题标题】:Setting up JNDI with a Tomcat 7 environment using Liferay 6.1使用 Liferay 6.1 在 Tomcat 7 环境中设置 JNDI
【发布时间】:2017-05-07 07:55:08
【问题描述】:

我很困惑为什么这不起作用。该环境是带有 Tomcat 7 的 Liferay 6.1 实例,并且数据库不是 Liferay 的默认数据库。它是用于数据的辅助服务器。所以我不确定这对 Liferay 是否重要。

web.xml(位于 Tomcat 的 webapps/conf 中)

<web-app>...
<resource-ref>
    <description>My database</description>
    <res-ref-name>jdbc/xxx</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
</web-app>

server.xml(位于 Tomcat 的 webapps/conf 中)

<GlobalNamingResources>
<Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" username="a" password="y" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/xxx" 
    maxActive="200" maxIdle="25" />
</GlobalNamingResources>

context.xml(位于 Tomcat 的 webapps/conf 中)

<context>
    <ResourceLink global="jdbc/xxx" name="jdbc/xxx" type="javax.sql.DataSource" />
</context>

代码

        Context ctx = new InitialContext();
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx");
        Connection conn = ds.getConnection();

错误

2016-12-21 19:13:04 FATAL asdasdsd:128 - Exception thrown in (removed): 
javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/xxx] is not bound in this Context. Unable to find [java:comp].
    at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:168)

我错过了什么?

编辑

还确认了以下几点:

  1. mysql 连接器在路径中
  2. 相同的 jar 在 portlet 的类路径中

二次编辑

我创建了一个全新的、全新的动态 Web 应用程序项目,它具有相同的配置和 DAO 层,并且它可以 100% 运行。我现在感觉它与 Liferay 有关。不幸的是..

第三次编辑

尝试了一切,包括这篇文章:http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java

这也不起作用。同样的例外。 Liferay 网站上缺乏有关此问题的信息令我惊讶。文档似乎非常缺乏。

【问题讨论】:

  • 你试过不给 java:comp/env/ 吗?
  • @RajkannanIyyappan java:comp/env/ 是绝对必需的。
  • 我假设您的意思是 tomcat/conf,而不是 webapps/conf。
  • @OlafKock - 是的,很抱歉。根据文档,我认为 java:comp/env/ 是必需的。
  • @RajkannanIyyappan java:comp/env 在 Java 代码中是绝对必需的。 resource-ref 配置不需要它,因为资源始终位于该子树下。当前显示的配置和代码对我来说看起来很准确。

标签: java tomcat jdbc liferay jndi


【解决方案1】:

另一个解决方案是(它适用于我),从 web.xml 中删除资源引用,从服务器中删除资源。 xml 并从 context.xml 中删除 ResourceLink。

将资源单独添加到 context.xml,

<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/xxx" password="" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/xxx" username=""/>

代码(在这种情况下需要 java:comp/env/):

 Context ctx = new InitialContext();
 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx");
 Connection conn = ds.getConnection();

【讨论】:

  • 同样的异常。不过感谢您的回答。
  • 这最终成为了 Liferay 的问题。感谢您的帮助!
【解决方案2】:

对于这对未来有帮助的任何人,因为男孩这很痛苦,而且没有很好的记录。

我必须将它添加到 Liferay 应用程序的 portlet-ext.properties:

portal.security.manager.strategy=none

找到此链接后:Liferay/Tomcat "hot-deploy" closes JNDI connection, how can I keep it open?

它最终解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多