当我尝试在 TomCat 这个使用 Spring 的应用程序上部署和执行时,为什么会出现此异常?
Why I obtain this exception when I try to deploy and execute on TomCat this application that use Spring?
我不太喜欢 Maven 和 NetBeans(我过去使用过 Eclipse 和 Ant),我遇到了以下问题在 TomCat 上部署和执行一个使用 Spring.
的 Web 应用程序
我已经使用 Maven 功能获得了一个名为 Project from Archetype 的项目,并选择了教程中指定的原型(名为entando-archetype-portal-bootstrap,这是生成 Entando 门户的原型。
在下一个 NetBeans window 中,我将 项目名称 指定为 myfirstportal 和 Group 我指定的id com.entando
我没有更改默认项目路径,即:
/home/andrea/NetBeansProjects/myfirstportal
然后,在 NetBeans 项目选项卡中,我 select 我的项目和我执行 Maven 清理和构建 任务,该任务工作了几秒钟并且正确地以构建成功 消息。
看来构建过程没问题。
然后我 select 我的项目和我执行 运行,所以我选择我的 TomCat 安装。
启动过程开始但最后我总是收到此错误消息:
ebapp assembled in [9582 msecs]
Building war: /home/andrea/NetBeansProjects/myfirstportal/target/myfirstportal.war
--- tomcat7-maven-plugin:2.1:exec-war-only (war-build-standalone) @ myfirstportal ---
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 31.067s
Finished at: Thu Jul 02 18:23:41 CEST 2015
Final Memory: 48M/233M
------------------------------------------------------------------------
NetBeans: Deploying on Apache Tomcat or TomEE
profile mode: false
debug mode: false
force redeploy: true
Checking data source definitions for missing JDBC drivers...
Undeploying ...
undeploy?path=/myfirstportal
OK - Undeployed application at context path /myfirstportal
In-place deployment at /home/andrea/NetBeansProjects/myfirstportal/target/myfirstportal
Deployment is in progress...
deploy?config=file%3A%2Ftmp%2Fcontext5305066681099450691.xml&path=/myfirstportal
FAIL - Deployed application at context path /myfirstportal but context failed to start
正如您在最后看到的那样,该过程失败并显示此特定错误消息:
FAIL - Deployed application at context path /myfirstportal but context failed to start
所以我调查了进一步打开 NetBeans 服务 window 右键单击 Tomcat 服务器和 select 查看服务器日志,在这里我得到了应该导致失败的异常:
03-Jul-2015 13:33:40.806 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
03-Jul-2015 13:33:41.546 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
03-Jul-2015 13:33:52.989 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.entando.entando.aps.servlet.StartupListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'InitializerManager' defined in class path resource [spring/baseSystemConfig.xml]: Invocation of init method failed; nested exception is java.lang.Exception: Error while initializating Db Installer
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:302)
................................................................
................................................................
................................................................
Caused by: java.lang.Exception: Error while initializating Db Installer
at org.entando.entando.aps.system.init.InitializerManager.init(InitializerManager.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
................................................................
................................................................
................................................................
Caused by: java.lang.RuntimeException: Error while loading component installation report - version: production
at org.entando.entando.aps.system.init.InstallationReportDAO.loadReport(InstallationReportDAO.java:58)
at org.entando.entando.aps.system.init.AbstractInitializerManager.extractReport(AbstractInitializerManager.java:40)
... 66 more
Caused by: com.agiletec.aps.system.exception.ApsSystemException: Error getting connection to the datasource
at com.agiletec.aps.system.common.AbstractDAO.getConnection(AbstractDAO.java:64)
at org.entando.entando.aps.system.init.InstallationReportDAO.loadReport(InstallationReportDAO.java:40)
... 67 more
Caused by: java.sql.SQLException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2043)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1939)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
at com.agiletec.aps.system.common.AbstractDAO.getConnection(AbstractDAO.java:61)
... 68 more
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2034)
... 71 more
03-Jul-2015 13:35:54.960 INFO [http-nio-8080-exec-14] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
似乎它可能取决于某些数据库连接问题
可能是什么问题?我错过了什么?我该如何尝试修复它?
Tnx
编辑 1:
所以在我看来,我的 NetBeans 项目(包含从 Maven 下载的所有 jar)的 Dependencies 文件夹中没有 derby-10.x.x.x.jar 文件,但进入 pom.xml 文件,我参考了 detby 驱动程序 class:
<properties>
<!--
<test.database.driver>org.postgresql.Driver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>5432</test.database.port>
<test.database.username>agile</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:postgresql://${test.database.hostname}:${test.database.port}/${project.artifactId}testPort</test.database.port.url>
<test.database.serv.url>jdbc:postgresql://${test.database.hostname}:${test.database.port}/${project.artifactId}testServ</test.database.serv.url>
-->
<!--
<test.database.driver>com.mysql.jdbc.Driver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>3306</test.database.port>
<test.database.username>root</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:mysql://${test.database.hostname}:${test.database.port}/${project.artifactId}testPort</test.database.port.url>
<test.database.serv.url>jdbc:mysql://${test.database.hostname}:${test.database.port}/${project.artifactId}testServ</test.database.serv.url>
-->
<test.database.driver>org.apache.derby.jdbc.EmbeddedDriver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>1527</test.database.port>
<test.database.username>agile</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:derby:${project.build.directory}/test/db/${project.artifactId}testPort;create=true</test.database.port.url>
<test.database.serv.url>jdbc:derby:${project.build.directory}/test/db/${project.artifactId}testServ;create=true</test.database.serv.url>
<skipDerby>true</skipDerby>
<skipStandalone>true</skipStandalone>
<entando.version>4.2.0-TP1</entando.version>
<spring.version>4.0.6.RELEASE</spring.version>
<struts2.version>2.3.16.3</struts2.version>
<cxf.version>3.0.0-milestone2</cxf.version>
</properties>
如您所见,与 postgresql 和 MySql DBMS 相关的部分已禁用,而是与org.apache.derby.jdbc.EmbeddedDriver 似乎已启用。
进入 dependencies 部分我发现:
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.9.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.9.1.0</version>
</dependency>
所以我认为 Maven 应该正确下载和配置 derby 驱动程序 classes.
为什么好像没有下载这个jar?
说找不到驱动程序。如果是 tomcat - 将驱动程序 jar 放入 libs
文件夹并尝试重新启动它。
编辑:您提供依赖项的方式仅在编译时可用,但在结果 war 中不可用。我认为你应该使用 assembly-plugin
或 shade-plugin
之类的东西来在 war.
中提供这个 jar
但是如果您查看 tomcat
文档... ta-daaa -(搜索词 forget
)- 您应该向 lib
文件夹。
您需要 derby-10.x.x.x.jar
derby download 到您的 class path/lib。
将 Maven 依赖项添加到 java 构建路径将解决您的错误。
在 java 构建路径菜单中添加库和 select maven 依赖项。
我不太喜欢 Maven 和 NetBeans(我过去使用过 Eclipse 和 Ant),我遇到了以下问题在 TomCat 上部署和执行一个使用 Spring.
的 Web 应用程序我已经使用 Maven 功能获得了一个名为 Project from Archetype 的项目,并选择了教程中指定的原型(名为entando-archetype-portal-bootstrap,这是生成 Entando 门户的原型。
在下一个 NetBeans window 中,我将 项目名称 指定为 myfirstportal 和 Group 我指定的id com.entando
我没有更改默认项目路径,即:
/home/andrea/NetBeansProjects/myfirstportal
然后,在 NetBeans 项目选项卡中,我 select 我的项目和我执行 Maven 清理和构建 任务,该任务工作了几秒钟并且正确地以构建成功 消息。
看来构建过程没问题。
然后我 select 我的项目和我执行 运行,所以我选择我的 TomCat 安装。
启动过程开始但最后我总是收到此错误消息:
ebapp assembled in [9582 msecs]
Building war: /home/andrea/NetBeansProjects/myfirstportal/target/myfirstportal.war
--- tomcat7-maven-plugin:2.1:exec-war-only (war-build-standalone) @ myfirstportal ---
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 31.067s
Finished at: Thu Jul 02 18:23:41 CEST 2015
Final Memory: 48M/233M
------------------------------------------------------------------------
NetBeans: Deploying on Apache Tomcat or TomEE
profile mode: false
debug mode: false
force redeploy: true
Checking data source definitions for missing JDBC drivers...
Undeploying ...
undeploy?path=/myfirstportal
OK - Undeployed application at context path /myfirstportal
In-place deployment at /home/andrea/NetBeansProjects/myfirstportal/target/myfirstportal
Deployment is in progress...
deploy?config=file%3A%2Ftmp%2Fcontext5305066681099450691.xml&path=/myfirstportal
FAIL - Deployed application at context path /myfirstportal but context failed to start
正如您在最后看到的那样,该过程失败并显示此特定错误消息:
FAIL - Deployed application at context path /myfirstportal but context failed to start
所以我调查了进一步打开 NetBeans 服务 window 右键单击 Tomcat 服务器和 select 查看服务器日志,在这里我得到了应该导致失败的异常:
03-Jul-2015 13:33:40.806 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
03-Jul-2015 13:33:41.546 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
03-Jul-2015 13:33:52.989 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.entando.entando.aps.servlet.StartupListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'InitializerManager' defined in class path resource [spring/baseSystemConfig.xml]: Invocation of init method failed; nested exception is java.lang.Exception: Error while initializating Db Installer
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:302)
................................................................
................................................................
................................................................
Caused by: java.lang.Exception: Error while initializating Db Installer
at org.entando.entando.aps.system.init.InitializerManager.init(InitializerManager.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
................................................................
................................................................
................................................................
Caused by: java.lang.RuntimeException: Error while loading component installation report - version: production
at org.entando.entando.aps.system.init.InstallationReportDAO.loadReport(InstallationReportDAO.java:58)
at org.entando.entando.aps.system.init.AbstractInitializerManager.extractReport(AbstractInitializerManager.java:40)
... 66 more
Caused by: com.agiletec.aps.system.exception.ApsSystemException: Error getting connection to the datasource
at com.agiletec.aps.system.common.AbstractDAO.getConnection(AbstractDAO.java:64)
at org.entando.entando.aps.system.init.InstallationReportDAO.loadReport(InstallationReportDAO.java:40)
... 67 more
Caused by: java.sql.SQLException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2043)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1939)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
at com.agiletec.aps.system.common.AbstractDAO.getConnection(AbstractDAO.java:61)
... 68 more
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2034)
... 71 more
03-Jul-2015 13:35:54.960 INFO [http-nio-8080-exec-14] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
似乎它可能取决于某些数据库连接问题
可能是什么问题?我错过了什么?我该如何尝试修复它?
Tnx
编辑 1:
所以在我看来,我的 NetBeans 项目(包含从 Maven 下载的所有 jar)的 Dependencies 文件夹中没有 derby-10.x.x.x.jar 文件,但进入 pom.xml 文件,我参考了 detby 驱动程序 class:
<properties>
<!--
<test.database.driver>org.postgresql.Driver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>5432</test.database.port>
<test.database.username>agile</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:postgresql://${test.database.hostname}:${test.database.port}/${project.artifactId}testPort</test.database.port.url>
<test.database.serv.url>jdbc:postgresql://${test.database.hostname}:${test.database.port}/${project.artifactId}testServ</test.database.serv.url>
-->
<!--
<test.database.driver>com.mysql.jdbc.Driver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>3306</test.database.port>
<test.database.username>root</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:mysql://${test.database.hostname}:${test.database.port}/${project.artifactId}testPort</test.database.port.url>
<test.database.serv.url>jdbc:mysql://${test.database.hostname}:${test.database.port}/${project.artifactId}testServ</test.database.serv.url>
-->
<test.database.driver>org.apache.derby.jdbc.EmbeddedDriver</test.database.driver>
<test.database.hostname>localhost</test.database.hostname>
<test.database.port>1527</test.database.port>
<test.database.username>agile</test.database.username>
<test.database.password>agile</test.database.password>
<test.database.port.url>jdbc:derby:${project.build.directory}/test/db/${project.artifactId}testPort;create=true</test.database.port.url>
<test.database.serv.url>jdbc:derby:${project.build.directory}/test/db/${project.artifactId}testServ;create=true</test.database.serv.url>
<skipDerby>true</skipDerby>
<skipStandalone>true</skipStandalone>
<entando.version>4.2.0-TP1</entando.version>
<spring.version>4.0.6.RELEASE</spring.version>
<struts2.version>2.3.16.3</struts2.version>
<cxf.version>3.0.0-milestone2</cxf.version>
</properties>
如您所见,与 postgresql 和 MySql DBMS 相关的部分已禁用,而是与org.apache.derby.jdbc.EmbeddedDriver 似乎已启用。
进入 dependencies 部分我发现:
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.9.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.9.1.0</version>
</dependency>
所以我认为 Maven 应该正确下载和配置 derby 驱动程序 classes.
为什么好像没有下载这个jar?
说找不到驱动程序。如果是 tomcat - 将驱动程序 jar 放入 libs
文件夹并尝试重新启动它。
编辑:您提供依赖项的方式仅在编译时可用,但在结果 war 中不可用。我认为你应该使用 assembly-plugin
或 shade-plugin
之类的东西来在 war.
但是如果您查看 tomcat
文档... ta-daaa -(搜索词 forget
)- 您应该向 lib
文件夹。
您需要 derby-10.x.x.x.jar
derby download 到您的 class path/lib。
将 Maven 依赖项添加到 java 构建路径将解决您的错误。
在 java 构建路径菜单中添加库和 select maven 依赖项。