1

我目前正在使用 Tomcat 7 的 64 位 AmazonLinux 服务器将 maven 构建的 .war 文件部署到 Elastic Beanstalk。但是,由于以下错误(堆栈跟踪位于底端):

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

我正在连接到外部 Xeround 实例。在网上阅读后,我尝试将我的应用程序的 context.xml 修改为:

<Resource auth="Container" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" //<- NOT THERE BEFORE
    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"/>

是否有其他人在将以前工作的版本上传和使用到 Elastic Beanstalk Tomcat 7 应用程序时遇到问题,并找到了让它工作的方法?

我也读过这篇文章,但我不知道在 Netbeans maven 项目中的 .ebextensions 文件中的何处添加,我不明白那会做什么。谢谢你的帮助。

1) 注入构造函数时出错,javax.persistence.PersistenceException: [PersistenceUnit: myapp-persist] Unable to build EntityManagerFactory at com.berger.jpa.EntityInitializer.(EntityInitializer.java:12)
while locating com.berger.jpa.EntityInitializer for field在 com.nexuscop.startup.StartupListener.entityInit(StartupListener.java:40) 定位 com.nexuscop.startup.StartupListener

在 com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:65) 在 com.google.inject.internal.InjectorImpl 的 com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:451) 出现 1 个错误.injectMembers(InjectorImpl.java:944) 在 com.nexuscop.startup.StartupListener.(StartupListener.java:41) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java: 57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 java.lang.Class.newInstance0(Class.java:372) 在org.apache.catalina.core 中的 java.lang.Class.newInstance(Class.java:325)。DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4715) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) at org .apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase .java:871) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 在 org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1099) 在 org.apache.catalina。在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.startup.HostConfig$DeployDirectory.run(HostConfig.java:1621)。concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java .util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:679) 原因:javax.persistence.PersistenceException: [PersistenceUnit: nexuscop-persist] 无法在 org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57) 在 org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 构建 EntityManagerFactory ) 在 com 的 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)。berger.jpa.JpaPersistService.start(JpaPersistService.java:83) 在 com.berger.jpa.EntityInitializer.(EntityInitializer.java:14) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 com.google.inject.internal.DefaultConstructionProxyFactory$2 .newInstance(DefaultConstructionProxyFactory.java:85) 在 com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) 在com.google.inject.internal。SingleFieldInjector.inject(SingleFieldInjector.java:53) 在 com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) 在 com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75) 在com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) 在 com.google.inject.internal.MembersInjectorImpl.injectAndNotify (MembersInjectorImpl.java:73) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60) ... 23 更多原因:org.hibernate.HibernateException:无法在 org.hibernate.connection 找到数据源.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79) 在 org.hibernate.connection。ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143) at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:51) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:90) at org.hibernate.cfg .Configuration.buildSettingsInternal(Configuration.java:2863) 在 org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870) 在 org.hibernate。 ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906) ... 42 更多原因:javax.naming.NamingException: com.mysql.jdbc.Driver at org.apache.naming.NamingContext.lookup(NamingContext.java:860)在 org.apache.naming.NamingContext.lookup(NamingContext.java:154) 在 org.apache.naming.NamingContext.lookup(NamingContext.java:831) 在 org.apache.naming.NamingContext.lookup(NamingContext.java:154) 在 org.apache.naming.NamingContext.lookup(NamingContext.java :831) 在 org.apache.naming.NamingContext.lookup(NamingContext.java:154) 在 org.apache.naming.NamingContext.lookup(NamingContext.java:831) 在 org.apache.naming.NamingContext.lookup(NamingContext. java:168) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) at javax.naming.InitialContext.lookup(InitialContext.java:409) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java :75)在 org.apache.naming.NamingContext.lookup(NamingContext.java:831) 在 org.apache.naming.NamingContext 中查找(NamingContext.java:831)在 org.hibernate.connection.DatasourceConnectionProvider 的 javax.naming.InitialContext.lookup(InitialContext.java:409) 中的 org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 中的 .lookup(NamingContext.java:168)。配置(DatasourceConnectionProvider.java:75)在 org.apache.naming.NamingContext.lookup(NamingContext.java:831) 在 org.apache.naming.NamingContext 中查找(NamingContext.java:831)在 org.hibernate.connection.DatasourceConnectionProvider 的 javax.naming.InitialContext.lookup(InitialContext.java:409) 中的 org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 中的 .lookup(NamingContext.java:168)。配置(DatasourceConnectionProvider.java:75)在 org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75) 查找(InitialContext.java:409)在 org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75) 查找(InitialContext.java:409)

4

1 回答 1

1

目前,许多人似乎无法让 .ebextensions 方法正常工作。这是一个解决方法,只是为了启动和运行。我不会像这样在生产环境中运行,但是当我对 .ebextensions 感到沮丧时,我用它来进行测试/调试。

您可以将mysql驱动程序直接放在您的WAR中。如果您使用的是 Maven,只需将其添加到 pom.xml:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

您也可以将其添加到 META-INF/context.xml

<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" factory="org.apache.commons.dbcp.BasicDataSourceFactory" type="javax.sql.DataSource" 
      url="jdbc:mysql://XXXXXXX
       ... />

并将其放在 pom.xml 中(否则找不到 BasicDataSourceFactory):

    <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>
于 2013-02-14T18:10:18.100 回答