3

項目名稱:CarpoolDB,我添加的jar這個項目在其他應用程序的名稱拼車。 在運行Carpool應用程序時,我收到以下異常。spring,hibernate的與谷歌應用程序引擎

項目:拼車。 這裏爲「carpoolService」沒有得到,而作爲「谷歌的Web應用程序」,但同樣運行Tomcat和豆下得到正常運行注入自動連接我收到的例外。

@Controller 
public class PlacesSearchController { 

    @Autowired 
    CarpoolService carpoolService=null; 

    public CarpoolService getCarpoolService() { 
     return carpoolService; 
    } 
    public void setCarpoolService(CarpoolService carpoolService) { 
     this.carpoolService = carpoolService; 
    } 

} 

拼車應用-context1.xml

我也有的applicationContext-security.xml文件,春季安全。

項目:CarpoolDB 所有類都在包,com.company.carpooldb.db

public interface CarpoolService { 
     public boolean validateUser(User user); 
    } 

    @Service("carpoolService") 
    public class CarpoolServiceImpl implements CarpoolService{ 

     @Autowired 
     private CarpoolDao carpoolDao=null; 

     public CarpoolDao getCarpoolDao() { 
      return carpoolDao; 
     } 

     public void setCarpoolDao(CarpoolDao carpoolDao) { 
      this.carpoolDao = carpoolDao; 
     } 

     @Override 
     public boolean validateUser(User user) { 
       return carpoolDao.validateUser(user);; 
     } 

    } 


public interface CarpoolDao { 
    public boolean validateUser(User user); 
} 

public class CarpoolDaoImpl extends HibernateDaoSupport implements CarpoolDao{ 
    @Override 
    public boolean validateUser(User user) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

拼車應用-context.xml的

<context:annotation-config /> 
     <context:component-scan base-package="com.onmobile" /> 
    <context:property-placeholder location="classpath:server.properties" /> 


    <bean id="sessionFactory" 

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="mappingResources"> 
    <list> 
      <value>com\company\carpooldb\hbm\User.hbm.xml</value> 
    </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"><!--Which dialect is used of hibernate according to type of underlying database--> 
       org.hibernate.dialect.MySQLDialect 
      </prop> 
      <prop key="hibernate.show_sql">false</prop> 
     </props> 
    </property> 
    <property name="dataSource"><ref bean="dataSource"/></property> 

</bean> 


<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName"><beans:value>${cm.db.driverClassName}</beans:value></beans:property> 
    <beans:property name="url"><beans:value>${cm.db.url}</beans:value></beans:property> 
    <beans:property name="username"><beans:value>${cm.db.username}</beans:value></beans:property> 
    <beans:property name="password"><beans:value>${cm.db.password}</beans:value></beans:property> 
    <beans:property name="testOnBorrow"><beans:value>true</beans:value></beans:property> 
    <beans:property name="testOnReturn"><beans:value>true</beans:value></beans:property> 
    <beans:property name="validationQuery"><beans:value>select 1</beans:value></beans:property> 
</beans:bean> 

    <!--Hibernate's transaction manager used for handling database transactions/manipulating data happening--> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager" > 
     <property name="sessionFactory"> 
      <ref bean="sessionFactory" /> 
     </property> 
    </bean> 

    <bean id="carpoolDaoImpl" class="com.company.carpooldb.db.CarpoolDaoImpl"> 
     <property name="sessionFactory"> 
      <ref bean="sessionFactory" /> 
     </property> 
    </bean> 

運行應用程序時,我得到作爲例外,

log4j:WARN Error during default initialization 
java.lang.NoClassDefFoundError: java.io.FileOutputStream is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:290) 
......... 

    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:162) 
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48) 
    at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113) 
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89) 
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 
log4j:WARN Please initialize the log4j system properly. 
11 Nov, 2012 5:14:18 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: Failed startup of context [email protected]ab{/,D:\EclipseEuropa\CarpoolingGAE\war} 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placesSearchController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.onmobile.carpooldb.db.CarpoolService com.onmobile.carpool.controller.PlacesSearchController.carpoolService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.onmobile.carpooldb.db.CarpoolDao com.onmobile.carpooldb.db.CarpoolServiceImpl.carpoolDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
......... 
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113) 
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.onmobile.carpooldb.db.CarpoolService com.onmobile.carpool.controller.PlacesSearchController.carpoolService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.onmobile.carpooldb.db.CarpoolDao com.onmobile.carpooldb.db.CarpoolServiceImpl.carpoolDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:507) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283) 
    ... 31 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.onmobile.carpooldb.db.CarpoolDao com.onmobile.carpooldb.db.CarpoolServiceImpl.carpoolDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064) 
.... at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:780) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    ... 33 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.onmobile.carpooldb.db.CarpoolDao com.onmobile.carpooldb.db.CarpoolServiceImpl.carpoolDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:507) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283) 
    ... 44 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) 
.... at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    ... 46 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) 
.... at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) 
    ... 59 more 
Caused by: java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 
.... at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1457) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    ... 66 more 
11 Nov, 2012 5:14:18 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placesSearchController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.onmobile.carpooldb.db.CarpoolService com.onmobile.carpool.controller.PlacesSearchController.carpoolService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.onmobile.carpooldb.db.CarpoolDao com.onmobile.carpooldb.db.CarpoolServiceImpl.carpoolDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carpoolDaoImpl' defined in class path resource [carpool-application-context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [carpool-application-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details.: 
java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class. Please see the Google App Engine developer's guide for more details. 
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 
    at org.hibernate.id.AbstractUUIDGenerator.<clinit>(AbstractUUIDGenerator.java:22) 
    ......at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064) 
..... 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
..... at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89) 
The server is running at http://localhost:8888/ 

爲什麼我越來越爲 1. java.lang.NoClassDefFoundError:java.io.FileOutputStream中是受限制的類。

我不是在文件

  1. GAE寫任何東西不支持,我知道的,但我和我的應用程序已經爲MySQL的工作,我想支持一些API。我的意思是基於屬性文件中設置的屬性,我希望某些時候使用MySQL,並且有時想使用GAE數據存儲。
  2. 我使用的彈簧3

    我應該在這種情況下怎麼辦

+1

這個問題是不是春天 - 這是關於log4j的嘗試寫日誌文件,這樣做,是由谷歌Apps的禁止。 DaoImpl也是如此:java.net.InetAddress受Google Apps限制。 –

+0

@BorisTreukhov,我在我的應用程序中有log4j.xml文件,但是在拋出應用程序文檔後,我才知道這種異常是由於日誌寫入文件導致的,所以我刪除了log4j.xml文件,以確保沒有寫入日誌。我提供的代碼是完整的,請你指出這個問題的確切根源...... – Jayesh

+1

當你看到一個bean創建異常時,你應該自下而上閱讀Spring堆棧跟蹤:它顯示了在類路徑資源[carpool-application-context.xml]中定義的名爲'sessionFactory'的bean創建錯誤:調用init方法失敗;嵌套異常是java.lang.NoClassDefFoundError:java.net.InetAddress是一個受限制的類。所以問題出在sessionFactory –

回答

3

由於鮑里斯指出,這個問題似乎是與你的會話工廠。 GAE不支持JDBC,它看起來像SessionFactory的配置爲MySQL:

<property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect"><!--Which dialect is used of hibernate according to type of underlying database--> 
      org.hibernate.dialect.MySQLDialect 
     </prop> 
     <prop key="hibernate.show_sql">false</prop> 
    </props> 
</property> 

如果你使用現有的代碼庫依賴於Hibernate的工作,你可以嘗試配置Hibernate的運行由雲SQL支持:https://developers.google.com/appengine/articles/using_hibernate

至於FileOutputStream中的問題,我相信log4j的默認附加目的地之一是FileAppender,所以根本就沒有配置的log4j不會修復它 - 你需要明確的配置它。看看這個頁面幫助:http://blog.xam.de/2010/03/logging-in-google-appengine-for-java.html

+0

壞消息是,似乎谷歌應用程序引擎根本不支持休眠。 http://code.google.com/p/googleappengine/wiki/WillItPlayInJava –

+0

以「using_hibernate」結尾的鏈接已損壞 – yair