【问题标题】:Tomcat and MYSQL porting to AWSTomcat 和 MYSQL 移植到 AWS
【发布时间】:2017-08-01 11:23:54
【问题描述】:

我有一个可以在 tomcat 7 和 MYSQL 上运行的 java 7 应用程序。我试图让它在亚马逊 AWS 提供的基本(免费层)平台上运行。我已成功将数据加载到 MYSQL 社区的 RDS 实例并设置了一个 Elastic Beanstalk 实例,其中基本 JSP 正常运行。

我是 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

我做错了什么?

更新:

这是 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>

【问题讨论】:

  • 你的 web.xml 文件中有资源引用吗?
  • 没有。我应该在上面放什么?
  • Servlet 映射后需要在下面添加配置 DB Connectionjdbc/authzDBjavax.sql.DataSource Container
  • 还是一样的 java.lang.NullPointerException

标签: java mysql amazon-web-services tomcat


【解决方案1】:

双重响应:

1- 我无法使用 context.xml 文件中的数据。我有一个不同的解决方案:

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 实例不是独立创建的,而是与 Elastic Beanstalk 相关的。这样可以实现tomcat和Mysql之间的通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2011-03-14
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2010-10-27
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多