2017-08-01 84 views
0

我有一個運行在tomcat 7和MYSQL上的可用的java 7應用程序。我試圖讓它在Amazon AWS提供的基本(免費層)平臺上運行。我已成功將數據加載到MYSQL社區的RDS實例,並設置了基本JSP正常運行的Elastic Beanstalk實例。Tomcat和MYSQL移植到AWS

我是AWS新手,所以主要問題應該是我缺乏知識。

我無法從我的代碼連接到數據庫。

這是我用來創建連接池代碼:

package com.authz.pap; 

import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 

public class DBConnections { 
    private static DataSource dataSource; 

    private static final DBConnections instance = new DBConnections(); 

    static 
    { 
     try 
     { 
      Context c = new InitialContext(); 
      dataSource = (DataSource)c.lookup("java:comp/env/jdbc/authzDB"); 
     } 
     catch (Exception e) 
     { 
      dataSource = null; 
     } 
    } 
    private DBConnections() 
    { 
    } 

    public static DBConnections getInstance() 
    { 
     return instance; 
    } 

    public static DataSource getGeoServDS() { 
     //if(dataSource==null) instance = new DBConnections(); 
     return dataSource; 
    } 

} 

這:

public DbCon() { 

    conn=null; 
    ProcessStatus stat = new ProcessStatus(); 
    stat.function="DbCon.DbCon"; 
    stat.message = "Initializing DB"; 
    stat.retcode=0; 
    stat.record(); 
    try { 
     conn=DBConnections.getGeoServDS().getConnection(); 
     conn.setAutoCommit(false); 
    } catch (Exception e) { 
     stat.message = e.toString(); 
     stat.retcode=-1; 
     stat.record(); 
    } 
} 

這是context.xml文件的內容:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/rest"> 
    <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="8" maxIdle="4" name="jdbc/authzDB" password="xxxx" type="javax.sql.DataSource" url="jdbc:mysql://x.x.x.x:3306/authzDB?autoReconnect=true&amp;allowMultiQueries=true" username="root"/> 
    <ResourceLink global="jdbc/authzDB" name="jdbc/authzDB" type="javax.sql.DataSource"/> 
</Context> 

我得到的是關於數據庫初始化的java.lang.NullPointerException

我在做什麼錯?

UPDATE:

這是web.xml文件的內容:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" id="WebApp_ID" version="2.5"> 
    <display-name>paprest</display-name> 
    <servlet> 
    <servlet-name>PAP rest interface</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.authz.pap.intfc</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>rest interface</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

你的web.xml文件中是否有resource-ref? –

+0

不可以。我應該放什麼? – jordi

+0

servlet映射後需要添加以下配置 <資源引用> DB連接 JDBC/authzDB javax.sql.DataSource中 容器

回答

0

雙響應:

1 - 我一直無法從context.xml中使用數據文件。我已經ISED不同的解決方案:

private static Connection getRemoteConnection() { 
    ProcessStatus stat = new ProcessStatus(); 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String dbName = "xxxxDB"; 
     String userName = "xxxxx"; 
     String password = "xxxxxx"; 
     String hostname = "xxxxxxxx"; 
     String port = "3306"; 
     String jdbcUrl = "jdbc:mysql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password + "&autoReconnect=true&amp;allowMultiQueries=true"; 
     Connection con = DriverManager.getConnection(jdbcUrl); 
     return con; 
    } 
    catch (ClassNotFoundException e) { stat.error(e.toString());} 
    catch (SQLException e) { stat.error(e.toString());} 
    return null; 
    } 

2 - 我有一個不同的問題,因爲RDS實例不是要獨立創建的,但關係到彈性魔豆。這允許tomcat和Mysql之間的通信。