带有Elastic Beanstalk和Tomcat 7的ClassNotFoundException

时间:2013-02-01 22:43:31

标签: mysql jdbc tomcat7 elastic-beanstalk

我正在尝试将maven构建的Java Web应用程序部署到Elastic Beanstalk,后者正在运行Amazon Linux Tomcat 7版本的环境。该应用程序在localhost上工作正常,即使使用外部mysql数据库(XEROUND)。

我原来的context.xml有如下资源:

<Resource auth="Container"        
    driverClassName="com.mysql.jdbc.Driver" 
    logAbandoned="true" 
    maxActive="100" 
    maxIdle="30" 
    maxWait="10000" 
    name="jdbc/xxxx-01292013" 
    password="xxxx" 
    removeAbandoned="true" 
    removeAbandonedTimeout="60" 
    type="javax.sql.DataSource" 
    url="jdbc:mysql://instancexxxx.db.xeround.com:xxxx/xxxx-01292013?   autoReconnect=true"
    username="xxxx-general"/>

然而,当我运行此应用程序时,我收到以下错误:

java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

我尝试将以下行添加到我的context.xml资源中:

factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

但这也没有奏效。然后我尝试添加这一行:

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

但这给了我新的例外:

javax.naming.NamingException: com.mysql.jdbc.Driver

我在这里碰到一堵墙,有人知道我能做些什么才能让这件东西运转起来吗?

1 个答案:

答案 0 :(得分:5)

好的,经过一些实验并玩弄配置之后,我让我的应用程序工作,将以下内容放在我的context.xml资源标记中:

    factory="org.apache.commons.dbcp.BasicDataSourceFactory"

以及我的pom.xml文件中的以下内容:

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>

    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>

我在AWS Forums here.

给出了这个答案

然而,我试图开始工作的更好的解决方案是在我的应用程序中放置一个.ebextensions文件,为它编写一个.config文件,并让它以这种方式工作。我认为这种方法将更适合长期,因为它将允许我解决我的开发环境和弹性beanstalk的Tomcat 7之间的任何进一步配置不匹配问题。此解决方案也在AWS论坛{{3 }和here