Windows 環境のローカル マシンで Tomcat 6.0.32 にコードを展開しています。そして、同じ WAR ファイルが Linux 環境のリモート マシンの Tomcat 7.0.39 にデプロイされます。
context.xml のコードは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/CentralizedPush">
<Resource auth="Container" driverClassName="org.postgresql.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/postgres" password="commonpush12#" type="javax.sql.DataSource" url="jdbc:postgresql://10.40.5.59:5444/commonpush_database" username="commonpush"/>
</Context>
DBConnection.java のコードは次のとおりです。
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.slf4j.LoggerFactory;
public class DBConnection {
private static Connection con = null;
/**function is used for creating connection
* @return Connection object
*/
public static Connection getConnection() {
org.slf4j.Logger LOG = LoggerFactory.getLogger("Error");
try {
Driver d = (Driver) Class.forName(Constant.CLASS_NAME).newInstance();
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/postgres");
con = ds.getConnection();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
LOG.error("ClassNotFoundException" );
} catch (InstantiationException ex) {
ex.printStackTrace();
LOG.error("InstantiationException" );
} catch (IllegalAccessException ex) {
ex.printStackTrace();
LOG.error("IllegalAccessException" );
} catch (NamingException ex) {
ex.printStackTrace();
LOG.error("NamingException" );
} catch (SQLException ex) {
ex.printStackTrace();
LOG.error("SQLException in db connection" );
}
return con;
}
アクセスしようとしているデータベースがpostgresにあり、その詳細は次のとおりです。
Name: CDCUCOMPUDB
Host: 10.40.5.59
Port: 5444
database name: commonpush_database
問題は、コードをローカル マシンにデプロイした場合は問題ありませんが、Linux 環境にあり、Tomcat バージョンが異なるリモート サーバーにコードをデプロイすると、次のエラーが発生することです。
javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp].
親切に解決策を提案してください。