2014-09-25 95 views
0

这个web应用程序在我的本地主机码头服务器上工作得很好。我正在Jelastic上进行测试,以便在部署到生产服务器之前解决任何问题。Spring应用程序上下文问题 - 数据源Bean创建

问题是,应用程序无法启动,因为配置错误,我无法修复,你能帮我吗?对于这个问题

完全堆栈跟踪:

[ERROR] ioc.Registry Operations trace: 
[ERROR] ioc.Registry [ 1] Realizing service ApplicationContext 
[ERROR] ioc.Registry [ 2] Instantiating service ApplicationContext implementation via ObjectCreator for Spring ApplicationContext 
[ERROR] ioc.Registry [ 3] Creating Spring ApplicationContext via ContextLoader 
[ERROR] SpringModuleDef.ApplicationContext Construction of service ApplicationContext failed: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/appDB' 
org.apache.tapestry5.ioc.internal.OperationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException; remaining name 'jdbc/appDB' 
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121) 
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88) 
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87) 
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124) 
    at org.apache.tapestry5.internal.spring.SpringModuleDef$3.createObject(SpringModuleDef.java:184) 
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) 
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74) 
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87) 
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124) 
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) 
    at org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29) 
    at org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46) 
    at org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63) 
    at org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54) 
    at org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60) 
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) 
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74) 
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87) 
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124) 
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) 
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66) 
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54) 
    at $ConfigurableWebApplicationContext_38b45053c6a2.delegate(Unknown Source) 
    at $ConfigurableWebApplicationContext_38b45053c6a2.getBeanDefinitionCount(Unknown Source) 
    at org.apache.tapestry5.spring.SpringModule$1.initializeApplication(SpringModule.java:61) 
    at $ApplicationInitializer_38b45053c6be.initializeApplication(Unknown Source) 
    at org.apache.tapestry5.services.TapestryModule$40.initializeApplication(TapestryModule.java:2438) 
    at $ApplicationInitializer_38b45053c6be.initializeApplication(Unknown Source) 
    at $ApplicationInitializer_38b45053c6ba.initializeApplication(Unknown Source) 
    at org.apache.tapestry5.services.TapestryModule$ServletApplicationInitializerTerminator.initializeApplication(TapestryModule.java:279) 
    at $ServletApplicationInitializer_38b45053c69f.initializeApplication(Unknown Source) 
    at org.apache.tapestry5.TapestryFilter.init(TapestryFilter.java:116) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:224) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:985) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.mortbay.start.Main.invokeMain(Main.java:194) 
    at org.mortbay.start.Main.start(Main.java:534) 
    at org.mortbay.start.Main.start(Main.java:441) 
    at org.mortbay.start.Main.main(Main.java:119) 

它seeems要与/WEB-INF/applicationContext.xml有问题吧?让我们来看看。

/WEB-INF/applicationContext.xml的

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

<!-- Enable the Spring MVC stuff --> 
<mvc:annotation-driven/> 

    <!-- Enable usage of @Autowired. --> 
    <context:annotation-config/> 

    <!-- Enable component scanning for defining beans with annotations. --> 
    <context:component-scan base-package="com.viktortech.automaton.model"/> 

    <!-- For translating native persistence exceptions to Spring's 
     DataAccessException hierarchy. --> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
     <props> 
      <prop key="java.naming.factory.initial">org.mortbay.naming.InitialContextFactory</prop> 
      <prop key="java.naming.provider.url">org.mortbay.naming</prop> 
     </props> 
    </property> 
</bean> 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 

    <property name="jndiTemplate"> 
     <ref bean="jndiTemplate"/> 
    </property> 
    <property name="jndiName"> 
      <value>jdbc/appDB</value> 
    </property> 
    </bean> 


<!-- *********************************************************************** 
    To avoid requesting unnecessary connections (not necessary for 
    MiniBank) with the Open Session in View filter, uncomment this and 
    change "sessionFactory" bean (bellow) to use "dataSourceProxy" instead 
    of "dataSource". 
<bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" 
    p:targetDataSource-ref="dataSource"/> 
    ******************************************************************* --> 

<!-- Hibernate Session Factory --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
     p:dataSource-ref="dataSource" 
     p:configLocation="classpath:/automaton-hibernate-config.xml"/> 

    <!-- Transaction manager for a single Hibernate SessionFactory. --> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory" /> 

<!-- Enable the configuration of transactional behavior based on 
    annotations. --> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <bean id="manageService" 
    class="com.viktortech.automaton.model.manageservice.ManageServiceImpl"/> 

<bean id="botService" 
    class="com.viktortech.automaton.model.botservice.BotServiceImpl"/> 

<context:component-scan base-package="com.viktortech.automaton.rest" /> 

</beans> 

那么这是什么JNDI JDBC/appDB,在那里的定义以及如何?向右走,它在/WEB-INF/jetty-env.xml文件

<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 

    <New id="viktor" class="org.mortbay.jetty.plus.naming.Resource"> 
     <Arg>jdbc/appDB</Arg> 
     <Arg> 
      <New class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
       <Set name="driverClassName">com.mysql.jdbc.Driver</Set> 
       <Set name="url">jdbc:mysql://workingDBserver/database</Set> 
       <Set name="username">******</Set> 
       <Set name="password">******</Set> 
      </New> 
     </Arg> 
    </New> 
</Configure> 

所以这是它。正如我所说的,它在localhost:8080上运行得非常流畅,但是当部署到远程Jetty服务器(Same jetty版本)时,它会运行503,然后产生上述错误。

请问,你需要任何其他资源来解决这个问题。提前致谢。

+0

创建“数据源”bean是一个问题。如果数据源bean创建成功,将创建“sessionFactory”bean。既然你说它给你503错误,可能是数据库服务关闭/它无法访问。您确定您的远程服务器上的应用程序可以连接到数据库吗? – vinay 2014-09-25 18:13:21

+0

100%确定,因为数据库服务器不在本地主机上。我敢肯定,它可以远程访问和所有这些东西(已经测试) – Trigork 2014-09-25 18:15:06

+0

难道是jetty-env.xml中的数据源ID是'viktor'而不是'appDB'?它不应该改变任何东西的JNDI,但... – Trigork 2014-09-25 18:20:09

回答

2

看起来像类路径上缺少的库?

Root exception is java.lang.ClassNotFoundException: org.mortbay.naming.InitialContextFactory 

您使用的是Maven吗?你如何获得应用程序所需的所有jar文件,并将其加载到正在尝试运行此应用程序的JVM中的classpath中?

+0

我的确在使用Maven,但是对于部署,我只是将我的.war上传到服务器。我应该在我的服务器中设置maven并通过mvn install或其他方式部署吗?如果是这样,你能给我一些建议吗?我是所有这些事情的第一人。 – Trigork 2014-09-25 20:10:29

+0

您可以提取战争并查看库文件夹是否有需要的罐子。此外,您可以提取jar并检查类定义是否存在。如果.class文件存在,那么我将检查的最后一件事是如果它在类路径中并且正在由类加载器加载。 – vinay 2014-09-25 21:01:39

+0

完成Edwin R Rivera的回答,是的,问题是没有构建类路径,所以JAR没有正确加载到服务器中。还有一个JNDI命名问题。修复了这两个问题,不再有堆栈跟踪,还有其他问题(与SSL有关),但是这个问题已经修复 – Trigork 2014-09-26 13:28:06

相关问题