[compass] compass2.1+struts1.2+ hibernate3.1+spring2.5 更新索引

myjiky 2009-06-23
当<propertyname="mirrorDataChanges"><value>false</value></property>时正常操作数据库,索引不更新。当<value>true</value>时,操作数据库出错。

Spring.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" default-lazy-init="true">



	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	  <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
	  <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;DatabaseName=RoyalGX"></property>
	  <property name="user" value="sa"></property>
	  <property name="password" value="123"></property>
	  <property name="maxPoolSize" value="40"></property>
	  <property name="minPoolSize" value="1"></property>
	  <property name="initialPoolSize" value="1"></property>
	  <property name="maxIdleTime" value="20"></property> 
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.SQLServerDialect
				</prop>
				<!--设置二级缓冲-->
				<prop key="hibernate.cache.provider_class">
					org.hibernate.cache.EhCacheProvider
				</prop>
				<!--设置二级缓冲,打开查询缓冲-->
				<prop key="hibernate.cache.use_query_cache">true</prop>
				<!--设置显示Hibernate操作的SQL语句-->
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>				
				<value>
					com/royal/hib/AllClub.hbm.xml
				</value>
			</list>
		</property>
	</bean>
	
	<bean id ="allClubDao" class = "com.royal.dao.impl.AllClubDaoImpl">
		<property name="sessionFactory" ref = "sessionFactory"></property>
	</bean>
	
	<bean id = "AllClubService" class = "com.royal.service.impl.AllClubServiceImpl">
		<property name="allClubDao" ref = "allClubDao"></property>
		<property name="compassTemplate" ref = "compassTemplate"></property>
	</bean>
	
	<!-- 配置事务管理器 -->	
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory"/>
		</property>
	</bean>
    
    <!-- 配置事务特性 ,配置add、delete和update开始的方法,事务传播特性为required-->       
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    	<tx:attributes>
    		<tx:method name="insert*" propagation="REQUIRED"/>
    		<tx:method name="delete*" propagation="REQUIRED"/>
    		<tx:method name="update*" propagation="REQUIRED"/>
    		<tx:method name="*" read-only="true"/>
    	</tx:attributes>
    </tx:advice>
    
    <!-- 配置那些类的方法进行事务管理,当前cn.com.jobedu.oa.service包中的子包、类中所有方法需要,还需要参考tx:advice的设置 -->
    <aop:config>
    	<aop:pointcut id="allManagerMethod" expression="execution (* com.royal.service.impl.*.*(..))"/>
    	<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
    </aop:config>  

</beans>


compass.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"
	xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	default-lazy-init="true">


	<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/royal</value>
			</list>
		</property>
		<property name="connection">
			<value>/lucene/indexes</value>
		</property>


		<property name="classMappings">
			<list>
				<value>com.royal.hib.AllClub</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.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>
			</props>
		</property>

		<property name="transactionManager" ref="transactionManager" />
	</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>
				<bean
					class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
					<property name="gpsDevice" ref="hibernateGpsDevice" />
				</bean>
			</list>
		</property>
	</bean>


	<bean id="compassTemplate"
		class="org.compass.core.CompassTemplate">
		<property name="compass" ref="compass" />
	</bean>

	<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
	<bean id="compassIndexBuilder"
		class="com.royal.service.impl.CompassIndexBuilder"
		lazy-init="false">
		<property name="compassGps" ref="compassGps" />
		<property name="buildIndex" value="true" />
		<property name="lazyTime" value="10" />
	</bean>



</beans>


报如下错误:


Hibernate: insert into RoyalGX.dbo.AllClub (ClubID, ClubName, Area, AreaOrderNo, AreaPicUrl, City, cDel) values (?, ?, ?, ?, ?, ?, ?)
09-06-23 03:24:03 ERROR [action]:253 - Servlet.service() for servlet action threw exception
 java.lang.NoSuchMethodError: org.hibernate.event.PostInsertEvent.getSession()Lorg/hibernate/event/EventSource;
	at org.compass.gps.device.hibernate.lifecycle.HibernateEventListener.doInsert(HibernateEventListener.java:205)
	at org.compass.gps.device.hibernate.lifecycle.HibernateEventListener$1.doInCompassWithoutResult(HibernateEventListener.java:101)
	at org.compass.core.CompassCallbackWithoutResult.doInCompass(CompassCallbackWithoutResult.java:29)
	at org.compass.core.CompassTemplate.execute(CompassTemplate.java:130)
	at org.compass.core.CompassTemplate.execute(CompassTemplate.java:112)
	at org.compass.gps.impl.SingleCompassGps.executeForMirror(SingleCompassGps.java:166)
	at org.compass.gps.device.hibernate.lifecycle.HibernateEventListener.onPostInsert(HibernateEventListener.java:99)
	at org.hibernate.action.EntityIdentityInsertAction.postInsert(EntityIdentityInsertAction.java:70)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:55)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
	at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:693)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:690)
	at com.royal.dao.impl.AllClubDaoImpl.create(AllClubDaoImpl.java:19)
	at com.royal.service.impl.AllClubServiceImpl.insertAllClub(AllClubServiceImpl.java:50)
	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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy21.insertAllClub(Unknown Source)
	at com.royal.struts.action.InsertAction.execute(InsertAction.java:51)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:619)



希望大大们能耐心看完,并帮帮我。谢谢!!
terryzhou 2009-06-24
前面没看,
java.lang.NoSuchMethodError: org.hibernate.event.PostInsertEvent.getSession()Lorg/hibernate/event/EventSource;   

是重点,check下
caizhongda 2009-08-10
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	default-lazy-init="true">


	<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/jor/compass</value>
			</list>
		</property>
		<property name="connection">
			<value>/lucene/indexes</value>
		</property>

		<property name="classMappings">
			<list>
				<value>com.jor.compass.model.Product</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.analyzer.MMAnalyzer.CustomAnalyzer">
				  	net.paoding.analysis.analyzer.PaodingAnalyzer
				</prop> -->
				<prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">
					org.apache.lucene.annalysis.cn.SmartChineseAnalyzer
				</prop>
				
				<!-- 高亮关键字 -->
				<prop key="compass.engine.highlighter.default.formatter.simple.pre">
    			 	<![CDATA[<font color="red"><b>]]>
  			 	</prop>
   				<prop key="compass.engine.highlighter.default.formatter.simple.post">
     				<![CDATA[</b></font>]]>
    			</prop>
			</props>
		</property>
		<property name="transactionManager" ref="transactionManager" />
		
	</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>
				<bean
					class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
					<property name="gpsDevice" ref="hibernateGpsDevice" />
				</bean>
			</list>
			 -->
			 <!-- 用上面这个不能插入..用下面这个 -->
			  <bean id="hibernateGpsDevice2" class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice">
	       			<property name="name" value="hibernateDevice"></property>
	      			 <property name="sessionFactory" ref="sessionFactory"></property>
	   		  </bean>
			 
			 
		</property>
		
	</bean>


	<bean id="compassTemplate"
		class="org.compass.core.CompassTemplate">
		<property name="compass" ref="compass" />
	</bean>

	<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
	<bean id="compassIndexBuilder"
		class="com.jor.compass.service.impl.CompassIndexBuilder"
		lazy-init="false">
		<property name="compassGps" ref="compassGps" />
		<property name="buildIndex" value="true"/><!--   -->
		<property name="lazyTime" value="10" />
	</bean>
	
</beans>
caizhongda 2009-08-10
好像你的compass配置有问题..试一下这个吧.
Global site tag (gtag.js) - Google Analytics