2017-02-21 169 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> 
相關問題