【发布时间】:2014-03-07 16:42:14
【问题描述】:
我创建了一个 OpenShift 应用程序 (Tomcat 7 (JBoss EWS 2.0)),在 developercorey 的帮助下,我能够将我的应用程序部署到 OpenShift 并连接到 OpenShift 中的本地 MySQL 数据库。
我现在尝试仅在本地计算机上连接到同一个数据库,但是当我调用 initialContext.lookup("jdbc/local") 时会引发错误。即使将应用程序部署在 OpenShift 中它可以正常工作,它也无法找到 context.xml 文件。
异常:javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中:java.naming.factory.initial需要在环境或系统中指定类名属性,或作为小程序参数,或在应用程序资源文件中:java.naming.factory.initial 异常:java.lang.NullPointerExceptionnull
我习惯了 Tomcat,数据源的位置位于: WebContent\META-INF\context.xml
但是对于 JBoss,context.xml 位于: .openshift\config\context.xml
我需要做额外的映射以使应用程序在本地连接吗?
提前致谢!
private static DataSource getDataSource() {
DataSource datasource = null;
try {
InitialContext ic = new InitialContext();
Context initialContext = (Context) ic.lookup("java:comp/env");
datasource = (DataSource) initialContext.lookup("jdbc/local");
} catch (Exception ex) {
System.out.println("Exception: " + ex + ex.getMessage());
} finally {
return datasource;
}
}
<Resource name="jdbc/OpenShift"
url="jdbc:mysql://127.10.198.2:3306/remote"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="*****"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
/>
<Resource name="jdbc/local"
url="jdbc:mysql://127.0.0.1:3306/local"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="******"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
/>
【问题讨论】: