簡體   English   中英

Heroku Webapp運行程序JNDI命名,資源不可用

[英]Heroku webapp-runner JNDI naming, resource not available

我在src/main/webapp/META-INF/context.xml聲明了此資源

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

當我將應用程序部署到Tomcat 8時,它運行良好並且資源可用。
但是,當我嘗試使用以下命令通過webapp-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>   

請指教。

只是為那些在context.xml聲明數據庫資源的人提供的注釋:
如果由於javax.naming.NoInitialContextException而無法使用,請記住使用--enable-naming選項運行webapp-runner.jar,因為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>

dbcp2 JAR文件需要放置在java命令的類路徑上。 為此,您需要使用-cp選項而不是-jar選項。 您的命令將如下所示(假設dbcp2 JAR也位於target/dependency目錄中):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM