2017-02-21 41 views
2

我有这个资源,我src/main/webapp/META-INF/context.xmlHeroku的Web应用程序亚军JNDI命名,资源不可

<Resource name="jdbc/myDB" type="javax.sql.DataSource" auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://..." username="..." password="..." /> 

当我部署我的应用程序到Tomcat 8运行良好和资源可用声明。
但是当我尝试使用此命令通过web应用,runnner(本地或在Heroku)运行:

java -jar target/dependency/webapp-runner.jar target/*.war --enable-naming 

我得到这样的警告和资源不可用:

WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory] 

我尝试添加这些依赖于我的pom.xml,但它没有区别:

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-dbcp2</artifactId> 
    <version>2.1.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-dbcp</artifactId> 
    <version>7.0.65</version> 
</dependency> 

请指教。

回答

0

dbcp2 JAR文件需要放在java命令的类路径中。为此,您需要使用-cp选项,而不是-jar选项。你的命令看起来像这样(假设dbcp2 JAR文件也都在target/dependency DIR):

java -cp target/dependency/*.jar webapp.runner.launch.Main target/*.war --enable-naming 
+1

谢谢你,成功了!唯一的事情:需要使用'target/dependency/*'而不是'target/dependency/*。jar' –

1

只是说明对于那些谁在context.xml声明数据库资源:
如果它不因为javax.naming.NoInitialContextException工作,因为webapp-runner默认禁用了JNDI命名(与Tomcat不同)

在这种情况下,您需要将tomcat-dbcp放入类路径中,因为webapp-runner没有它(与Tomcat不同)

我更喜欢使用Maven插件部署到Heroku的mvn heroku:deploy(不mvn heroku:deploy-war
的pom.xml将包括这样的事情:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>com.github.jsimone</groupId> 
           <artifactId>webapp-runner</artifactId> 
           <version>8.5.11.2</version> 
           <destFileName>webapp-runner.jar</destFileName> 
          </artifactItem> 
          <artifactItem> 
           <groupId>org.apache.tomcat</groupId> 
           <artifactId>tomcat-dbcp</artifactId> 
           <version>8.0.33</version> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>com.heroku.sdk</groupId> 
      <artifactId>heroku-maven-plugin</artifactId> 
      <version>1.1.3</version> 
      <configuration> 
       <appName>RELPACE_THIS_WITH_YOUR_HEROKU_APP_NAME</appName> 
       <processTypes> 
        <web>java $JAVA_OPTS -cp 'target/dependency/*' webapp.runner.launch.Main target/*.war --enable-naming --port $PORT</web> 
       </processTypes> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 
相关问题