2014-10-05 53 views
0

我想让我的项目在线,但它不会工作,但它在devserver上正常工作,但是当我尝试访问在线时,我得到了以下日志:Spring + GAE +休眠,不能在谷歌服务器上工作

org.springframework.web.context.support.XmlWebApplicationContext refresh: Exception encountered during context initialization - cancelling refresh attempt 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/configs/spring/SpringServlet.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554) 
    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$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:975) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:752) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:199) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:174) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:445) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:309) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:301) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:442) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.ExceptionInInitializerError 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284) 
    at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) 
    at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) 
    at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) 
    at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:279) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:124) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) 
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$6.run(AbstractAutowireCapableBeanFactory.java:1603) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1600) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550) 
    ... 37 more 
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375) 
    at java.security.AccessController.checkPermission(AccessController.java:565) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56) 
    at com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:131) 
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) 
    at java.lang.Thread.init(Thread.java:378) 
    at java.lang.Thread.<init>(Thread.java:432) 
    at java.util.TimerThread.<init>(Timer.java:499) 
    at java.util.Timer.<init>(Timer.java:101) 
    at java.util.Timer.<init>(Timer.java:146) 
    at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:258) 

在我的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:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:util="http://www.springframework.org/schema/util" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

<!-- Scans within the base package of the application for @Components to configure as beans --> 
<!-- @Controller, @Service, @Configuration, etc. --> 
<context:component-scan base-package="com.dar.sncf"> 
    <context:include-filter 
     type="aspectj" 
     expression="com.dar.sncf.*" /> 
</context:component-scan> 


<!-- Enables the Spring MVC @Controller programming model --> 
<mvc:annotation-driven /> 

<bean 
    id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/views/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<bean 
    id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    p:location="/WEB-INF/configs/hibernate/jdbc.properties" /> 

<bean 
    id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close" 
    p:driverClassName="${jdbc.driverClassName}" 
    p:url="${jdbc.databaseurl}" 
    p:username="${jdbc.username}" 
    p:password="${jdbc.password}" /> 

<bean 
    id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property 
     name="dataSource" 
     ref="dataSource" /> 
    <property name="configLocation"> 
     <value>/WEB-INF/configs/hibernate/hibernate.cfg.xml</value> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> --> 
     </props> 
    </property> 
</bean> 

<tx:annotation-driven /> 

<bean 
    id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property 
     name="sessionFactory" 
     ref="sessionFactory" /> 
</bean> 

<bean 
    id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:packagesToScan="com.dar.sncf.data.model" 
    p:dataSource-ref="dataSource" 
    p:jpaVendorAdapter-ref="hibernateVendor" 
    p:jpaPropertyMap-ref="jpaPropertyMap" /> 

<util:map id="jpaPropertyMap"> 
    <entry 
     key="hibernate.hbm2ddl.auto" 
     value="update" /> 
    <entry 
     key="hibernate.dialect" 
     value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
</util:map> 

<bean 
    id="hibernateVendor" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
    p:showSql="false" /> 

JDBC配置:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.dialect=org.hibernate.dialect.MySQLDialect 
jdbc.databaseurl=jdbc:mysql://mysql1.alwaysdata.com:3306/darsncf_db 
jdbc.username=**** 
jdbc.password=*** 

正如我所说,在devserver上它工作正常,我使用Spring 4.0.7.RELEASE和休眠4.3.5.FINAL。 我的MySQL数据库是alwaysdata(仅适用于MySQL的免费的主机,我发现可以从外部访问)

+0

你如何访问你的数据库? HTTP? – 2014-10-05 11:58:37

+0

不知道,编辑我的帖子来添加我的jdbc配置文件。 – badoualy 2014-10-05 12:02:21

+0

我不会做Java,但是在Python中,您不能仅仅连接到另一个数据库,所需的传输不可用。因此,除非您可以通过HTTP连接到外部数据库,否则您必须使用Google SQL实例或使用数据存储本身。 – 2014-10-05 14:34:07

回答

0

大家都知道GAE不允许threadsThreadpool,由于您收到此异常。

所以你必须删除管理你的数据库池的spring JPA类。如果您需要拥有数据库池,那么您必须创建自己的池类,而不需要threads

您可以查看在谷歌应用程序引擎https://cloud.google.com/appengine/articles/spring_optimization App Engine是很好的与Spring 3.x和下面,从春天4.x中是好的与annoation和应用程序引擎建议,以避免component.scan的链接春天。要使用4.x,你可以使用延迟加载