javax.naming.noinitialcontextexception:需要在环境或系统属性中指定类名

zu0ti5jz  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(209)

我试图将java web应用程序部署到heroku,我从https://devcenter.heroku.com/articles/deploying-java-applications-with-the-heroku-maven-plugin,但当我试图打开一个页面,其中有来自db的数据时,我得到:

`javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
2021-06-09T19:50:10.133124+00:00 app[web.1]:    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:673)
2021-06-09T19:50:10.133124+00:00 app[web.1]:    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
2021-06-09T19:50:10.133125+00:00 app[web.1]:    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
2021-06-09T19:50:10.133125+00:00 app[web.1]:    at javax.naming.InitialContext.lookup(InitialContext.java:417)
2021-06-09T19:50:10.133126+00:00 app[web.1]:    at listeners.JDBCContextListener.contextInitialized(JDBCContextListener.java:27)
2021-06-09T19:50:10.133127+00:00 app[web.1]:    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)
2021-06-09T19:50:10.133127+00:00 app[web.1]:    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
2021-06-09T19:50:10.133127+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
2021-06-09T19:50:10.133128+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
2021-06-09T19:50:10.133128+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
2021-06-09T19:50:10.133128+00:00 app[web.1]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2021-06-09T19:50:10.133129+00:00 app[web.1]:    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
2021-06-09T19:50:10.133129+00:00 app[web.1]:    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
2021-06-09T19:50:10.133130+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
2021-06-09T19:50:10.133130+00:00 app[web.1]:    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
2021-06-09T19:50:10.133130+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
2021-06-09T19:50:10.133131+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
2021-06-09T19:50:10.133131+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
2021-06-09T19:50:10.133132+00:00 app[web.1]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2021-06-09T19:50:10.133132+00:00 app[web.1]:    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
2021-06-09T19:50:10.133132+00:00 app[web.1]:    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
2021-06-09T19:50:10.133133+00:00 app[web.1]:    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
2021-06-09T19:50:10.133133+00:00 app[web.1]:    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
2021-06-09T19:50:10.133134+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
2021-06-09T19:50:10.133134+00:00 app[web.1]:    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
2021-06-09T19:50:10.133135+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
2021-06-09T19:50:10.133135+00:00 app[web.1]:    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
2021-06-09T19:50:10.133135+00:00 app[web.1]:    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
2021-06-09T19:50:10.133136+00:00 app[web.1]:    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:459)
2021-06-09T19:50:10.133136+00:00 app[web.1]:    at webapp.runner.launch.Main.main(Main.java:289)`

它在我的本地机器上运行良好。请告诉我。这是我的pom.xml:

`<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>GrowUp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>GrowUp</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-util -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-util</artifactId>
            <version>8.5.23</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.23</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.ckeditor/ckeditor-java-core -->
        <dependency>
            <groupId>com.ckeditor</groupId>
            <artifactId>ckeditor-java-core</artifactId>
            <version>3.5.3</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.heroku.sdk</groupId>
                <artifactId>heroku-maven-plugin</artifactId>
                <version>3.0.3</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
`

这是我的context.xml

`<?xml version="1.0" encoding="UTF-8"?>
<Context path="/GrowUp">
<Resource auth="Container" 
            driverClassName="com.mysql.jdbc.Driver" 
            maxIdle="30" maxTotal="100" 
            maxWaitMillis="10000" 
            name="jdbc/heroku_a6ba2d62a41cee6" 
            password="..." 
            type="javax.sql.DataSource"
            url="jdbc:mysql://us-cdbr-east-04.cleardb.com/heroku_a6ba2d62a41cee6?reconnect=true"
            username="..."/>
</Context>`

我正在使用侦听器进行会话,假设问题存在:

`@Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource) envContext.lookup("jdbc/heroku_a6ba2d62a41cee6");`
js4nwp54

js4nwp541#

更改pom.xml解决了我的问题:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <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>grow-up-project</appName>
                <processTypes>
                    <web>java $JAVA_OPTS -cp 'target/dependency/*' webapp.runner.launch.Main target/*.war --enable-naming --port $PORT</web>
                </processTypes>
            </configuration>
        </plugin>

相关问题