Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NamingException:无法使用tomcat7 maven插件h2/mysql数据库创建资源实例_Mysql_Maven_Tomcat7_H2_Tomcat Jdbc - Fatal编程技术网

NamingException:无法使用tomcat7 maven插件h2/mysql数据库创建资源实例

NamingException:无法使用tomcat7 maven插件h2/mysql数据库创建资源实例,mysql,maven,tomcat7,h2,tomcat-jdbc,Mysql,Maven,Tomcat7,H2,Tomcat Jdbc,我试图创建maven web应用程序项目,在打包时生成独立的可执行jar,为此,我使用tomcat7 maven插件。最初的hello world应用程序运行良好,但我正在努力使其与数据库一起工作。 下面是我的pom.xml的样子: <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <v

我试图创建maven web应用程序项目,在打包时生成独立的可执行jar,为此,我使用tomcat7 maven插件。最初的hello world应用程序运行良好,但我正在努力使其与数据库一起工作。 下面是我的pom.xml的样子:

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<executions>
    <execution>
        <id>tomcat-run</id>
        <goals>
            <goal>exec-war-only</goal>
        </goals>
        <phase>package</phase>
        <configuration>
            <contextFile>src/main/resources/tomcat/context.xml</contextFile>
            <path>/helloworld</path>
            <enableNaming>true</enableNaming>
            <finalName>standalone.jar</finalName>
            <charset>utf-8</charset>
        </configuration>
    </execution>
</executions>
<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.183</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>
</dependencies>
或用于h2数据库的java:/comp/env/jdbc/H2DB 当tomcat启动我的servlet时,两种情况下我都会得到相同的异常:

严重:Servlet/helloworld引发load()异常 javax.naming.NamingException:无法创建资源实例 位于org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:146) 位于javax.naming.spi.NamingManager.getObjectInstance(未知源) 位于org.apache.naming.NamingContext.lookup(NamingContext.java:843) 位于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)

如果有任何想法,我将不胜感激。
提前感谢。

通过将mysql连接器java添加到tomcat7 maven插件的配置中解决了这个问题,如前所述

<web-app>
...
<servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.mycompany.test.TestServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/helloworld</url-pattern>
    </servlet-mapping>
    <resource-ref>
        <description>H2 DS</description>
        <res-ref-name>jdbc/H2DB</res-ref-name>
        <res-type>org.apache.tomcat.jdbc.pool.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    <resource-ref>
        <description>Mysql DS</description>
        <res-ref-name>jdbc/TestDB</res-ref-name>
        <res-type>org.apache.tomcat.jdbc.pool.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
...
</web-app>
<Context path="/helloworld">
    <Resource type="org.apache.tomcat.jdbc.pool.DataSource"
        name="jdbc/H2DB"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        driverClassName="org.h2.Driver"
        url="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1"
        username="testuser"
        password="testpassword"
        initialSize="5"
        maxActive="10"
        maxIdle="5"
        minIdle="2"
    />
    <Resource name="jdbc/TestDB" auth="Container" type="org.apache.tomcat.jdbc.pool.DataSource"
        url="jdbc:mysql://localhost:3306/testdb"
        username="testuser" 
        password="testpassword" 
        driverClassName="com.mysql.jdbc.Driver"
        initialSize="5"
        maxActive="10"
        maxIdle="5"
        minIdle="2"
    />
</Context>
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/TestDB");