java - 使用 Liferay 6.1 在 Tomcat 7 环境中设置 JNDI

标签 java tomcat jdbc liferay jndi

我很困惑为什么这不起作用。环境是带有 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 的类路径中

第二次编辑:

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

第三次编辑:

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

这也没有用。同样的异常(exception)。 Liferay 网站上缺乏关于这个问题的信息让我感到惊讶。文档似乎非常缺乏。

最佳答案

这对将来有帮助的任何人来说,因为男孩这是一种痛苦而且没有很好的记录。

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

portal.security.manager.strategy=none

一旦我找到这个链接:Liferay/Tomcat "hot-deploy" closes JNDI connection, how can I keep it open?

它最终解决了我的问题。

关于java - 使用 Liferay 6.1 在 Tomcat 7 环境中设置 JNDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270451/

相关文章:

java - GridBagLayout:在一根垂直线上对齐 JPanel

java - 无法在 Windows 命令提示符下使用 javac 编译 .java 文件

java - 如何确定集合是否为空

java - 如何使 CORS 过滤器在具有基本身份验证的 Jersey REST 中工作?

java - 如何使用java复制mysql中的模式

java - 尝试为游戏循环实现线程

ssl - 尽管使用 SSL,任何人都可以连接到我的服务

java - Tomcat——Web 服务器还是 Web 容器?

mysql - 带有 glassfish v3 的 jdbc 领域 : Realm properties and configuration error

java - 结果集更新行不起作用