用compass+hibernate+Spring 配置,在tomcat6.0中启动,出错。
但是如果不从tomcat启动,直接在类中启动:
ApplicationContext context = new ClassPathXmlApplicationContext(xmlfilenames);
是正常的。只是在tomcat中启动出错,控制台出现如下错误:
2010-7-23 16:51:47 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_10\bin;C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin
2010-7-23 16:51:47 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2010-7-23 16:51:47 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 476 ms
2010-7-23 16:51:47 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2010-7-23 16:51:47 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.20
2010-7-23 16:51:48 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2010-07-23 16:51:53,437 INFO org.compass.core.config.CompassConfiguration - Mapping class [class com.openlab.dbentityclass.News]
2010-07-23 16:51:53,500 INFO org.compass.core.config.CompassConfiguration - Mapping directory [C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\CompassWeb\WEB-INF\classes\com\openlab]
2010-07-23 16:51:54,406 INFO org.compass.core.lucene.engine.analyzer.LuceneAnalyzerManager - Building analyzer [MMAnalyzer]
2010-07-23 16:51:54,593 INFO org.compass.core.lucene.engine.highlighter.LuceneHighlighterManager - Building highlighter [default]
2010-07-23 16:51:54,796 INFO org.compass.core.lucene.engine.optimizer.LuceneSearchEngineOptimizerManager - Starting scheduled optimizer [class org.compass.core.lucene.engine.optimizer.DefaultLuceneSearchEngineOptimizer] with period [10000ms]
2010-07-23 16:51:54,812 INFO org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager - Starting scheduled index manager with period [60000ms]
2010-07-23 16:51:54,812 INFO org.compass.core.lucene.engine.manager.IndexHoldersCache - Starting scheduled refresh cache with period [5000ms]
2010-07-23 16:51:55,000 INFO org.compass.core.impl.DefaultCompass - Closing Compass [compass]
2010-07-23 16:51:55,000 INFO org.compass.core.impl.DefaultCompass - Closed Compass [compass]
2010-07-23 16:51:55,015 ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compassGps' defined in class path resource [applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.ClassCastException: $Proxy0 cannot be cast to org.hibernate.impl.SessionFactoryImpl
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassCastException: $Proxy0 cannot be cast to org.hibernate.impl.SessionFactoryImpl
at org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector.injectLifecycle(DefaultHibernateEntityLifecycleInjector.java:95)
at org.compass.gps.device.hibernate.HibernateGpsDevice.doStart(HibernateGpsDevice.java:147)
at org.compass.gps.device.AbstractGpsDevice.start(AbstractGpsDevice.java:124)
at org.compass.gps.device.support.parallel.AbstractParallelGpsDevice.start(AbstractParallelGpsDevice.java:73)
at org.compass.gps.impl.AbstractCompassGps.start(AbstractCompassGps.java:166)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 39 more
2010-7-23 16:51:55 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compassGps' defined in class path resource [applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.ClassCastException: $Proxy0 cannot be cast to org.hibernate.impl.SessionFactoryImpl
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)

解决方案 »

  1.   

    applicationContext-hibernate.xml文件内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <!--
     -Application context definition for Petclinic on Hibernate
     --> 
    <beans>
       <!-- 定义资源 -->
         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
            <property name="url"><value>jdbc:mysql://localhost:3306/crawltemp_db</value></property>
            <property name="username"><value>root</value></property>
            <property name="password"><value>openlab</value></property>
        </bean>
    <!-- 
        <bean id="setUpDatabaseForTesting" class="org.compass.sample.petclinic.SetUpDatabase">
            <property name="dataSource"><ref local="dataSource"/></property>
        </bean> -->
     <!-- Hibernate SessionFactory -->
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource"><ref local="dataSource"/></property>
            <property name="mappingResources">
                <value>com/openlab/dbentityclass/News.hbm.xml</value>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                </props>
            </property>
            <property name="eventListeners">
                <map>
                    <entry key="merge">
                        <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
                    </entry>
                </map>
            </property>
        </bean>
     <!-- COMPASS START -->
           <bean id="annotationConfiguration"
                class="org.compass.annotations.config.CompassAnnotationsConfiguration">
            </bean>
     <bean id="compass" class="org.compass.spring.LocalCompassBean">
     <property name="resourceDirectoryLocations">
      <list>
    <value>classpath:com/openlab</value>
    </list>
     </property>
                <property name="connection">
                    <value>target</value>
                </property>
     
               <property name="classMappings">
                    <list>
                        <value>com.openlab.dbentityclass.News</value>
                    </list>
                </property>
                <property name="compassConfiguration"
                    ref="annotationConfiguration" /> <property name="compassSettings">
     <props>
    <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
    <prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<b><font color='red'>]]></prop>
    <prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</font></b>]]></prop>
    <!-- 定义索引的存储位置 -->
    <prop key="compass.engine.connection">target</prop>
    <!-- 定义分词器 -->
    <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>
     </props>  </property>
      <property name="transactionManager">
       <ref local="transactionManager" />
      </property>
     </bean> <bean id="hibernateGpsDevice" class="org.compass.gps.device.hibernate.HibernateGpsDevice">
    <property name="name">
    <value>hibernateDevice</value>
    </property>
    <property name="sessionFactory" ref="sessionFactory"/>
    <!--<property name="mirrorDataChanges">
    <value>true</value>
    </property>
    -->
    </bean> <!-- 同步更新索引 -->
    <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">  
    <property name="compass" ref="compass"/>  
    <property name="gpsDevices">  
    <list>  
    <ref local="hibernateGpsDevice"/>  
    </list>  
    </property>
    </bean>
    <bean id="compassTemplate" class="org.compass.core.CompassTemplate">
    <property name="compass" ref="compass" />
    </bean>
          <!-- COMPASS END -->    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory"><ref local="sessionFactory"/></property>
        </bean>
    <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引  -->
    <bean id="compassIndexBuilder" class="com.openlab.search.CompassIndexBuilder" lazy-init="false">
    <property name="compassGps" ref="compassGps" />
    <property name="buildIndex" value="true" />
    <property name="lazyTime" value="10" />
    </bean> <!-- compass2.2 end -->
    </beans>
     
      

  2.   

    已经解决~~
    是Spring中的包冲突问题~·
      

  3.   

    Spring中的包冲突,最后把冲突的包都删了,就可以了
      

  4.   


    具体的我不记得是哪个了,好像是通过Myeclipse导入了Spring1.2中的一个库,其中有包和我后来导的Spring3相冲突,如果你需要,我可以把我现在这个成功工程的jar包导给你
      

  5.   

    我也遇到了通用的问题,现在还没解决.把jar包发给我吧,,十分感谢!