使用 Liferay 6.1 在 Tomcat 7 环境中设置 JNDI
Setting up JNDI with a Tomcat 7 environment using Liferay 6.1
我很困惑为什么这不起作用。环境是 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)
我错过了什么?
编辑:
还确认了以下内容:
- mysql 连接器在路径中
- 相同的 jar 在 portlet 的类路径中
第二次编辑:
我使用相同的配置和 DAO 层创建了一个全新的动态 Web 应用程序项目,它 100% 运行。我有一种感觉,它现在与 Liferay 有关。不幸的是..
第三次编辑:
什么都试过了,包括这篇文章:http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java
这也没有用。同样的例外。 Liferay 网站上缺乏关于这个问题的信息让我感到惊讶。文档似乎非常缺乏。
另一个解决方案是(对我有用),从 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 应用程序的 portlet-ext.properties:
portal.security.manager.strategy=none
一旦我找到这个link:Liferay/Tomcat "hot-deploy" closes JNDI connection, how can I keep it open?
它最终解决了我的问题。
我很困惑为什么这不起作用。环境是 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)
我错过了什么?
编辑:
还确认了以下内容:
- mysql 连接器在路径中
- 相同的 jar 在 portlet 的类路径中
第二次编辑:
我使用相同的配置和 DAO 层创建了一个全新的动态 Web 应用程序项目,它 100% 运行。我有一种感觉,它现在与 Liferay 有关。不幸的是..
第三次编辑:
什么都试过了,包括这篇文章:http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java
这也没有用。同样的例外。 Liferay 网站上缺乏关于这个问题的信息让我感到惊讶。文档似乎非常缺乏。
另一个解决方案是(对我有用),从 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 应用程序的 portlet-ext.properties:
portal.security.manager.strategy=none
一旦我找到这个link:Liferay/Tomcat "hot-deploy" closes JNDI connection, how can I keep it open?
它最终解决了我的问题。