81,092
社区成员
发帖
与我相关
我的任务
分享
// Compiled from CompassGps.java (version 1.5 : 49.0, no super bit)
public abstract interface org.compass.gps.CompassGps {
// Method descriptor #4 (Lorg/compass/gps/CompassGpsDevice;)V
public abstract void addGpsDevice(org.compass.gps.CompassGpsDevice arg0);
// Method descriptor #6 ([Lorg/compass/gps/CompassGpsDevice;)V
public abstract void setGpsDevices(org.compass.gps.CompassGpsDevice[] arg0);
// Method descriptor #8 ()V
public abstract void start() throws org.compass.gps.CompassGpsException;
// Method descriptor #8 ()V
public abstract void stop() throws org.compass.gps.CompassGpsException;
// Method descriptor #13 ()Z
public abstract boolean isRunning();
// Method descriptor #13 ()Z
public abstract boolean isPerformingIndexOperation();
// Method descriptor #8 ()V
public abstract void index() throws org.compass.gps.CompassGpsException, java.lang.IllegalStateException;
// Method descriptor #17 ([Ljava/lang/Class;)V
public abstract void index(java.lang.Class... arg0) throws org.compass.gps.CompassGpsException, java.lang.IllegalStateException;
// Method descriptor #18 ([Ljava/lang/String;)V
public abstract void index(java.lang.String... arg0) throws org.compass.gps.CompassGpsException, java.lang.IllegalStateException;
// Method descriptor #19 (Lorg/compass/gps/IndexPlan;)V
public abstract void index(org.compass.gps.IndexPlan arg0) throws org.compass.gps.CompassGpsException, java.lang.IllegalStateException;
}
// Compass封装
private CompassGps compassGps;
你这里的compassGps对象的类型是CompassGps ,把他换成CompassGps 类所实现地接口
比如类CompassGps 是这样的:public class CompassGps implements someInterface {...}既实现接口someInterface
那么把CompassIndexBuilder 里的private CompassGps compassGps;
换成 private someInterface compassGps;
对应的get,set方法也换掉
public void setCompassGps(someInterface compassGps) {
this.compassGps = compassGps;
}
package com.test.service.impl;
import org.compass.gps.CompassGps;
import org.springframework.beans.factory.InitializingBean;
/**
* 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.
* 会启动后延时数秒新开线程调用compassGps.index()函数.
* 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.
* 也可以不用本Builder, 编写手动调用compassGps.index()的代码.
*
*/
public class CompassIndexBuilder implements InitializingBean {
// 是否需要建立索引,可被设置为false使本Builder失效.
private boolean buildIndex = false;
// 索引操作线程延时启动的时间,单位为秒
private int lazyTime = 10;
// Compass封装
private CompassGps compassGps;
// 索引线程
private Thread indexThread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(lazyTime * 1000);
System.out.println("begin compass index...");
long beginTime = System.currentTimeMillis();
// 重建索引.
// 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,
// 索引完成后再进行覆盖.
compassGps.index();
long costTime = System.currentTimeMillis() - beginTime;
System.out.println("compss index finished.");
System.out.println("costed " + costTime + " milliseconds");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
/**
* 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.
*
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception {
if (buildIndex) {
indexThread.setDaemon(true);
indexThread.setName("Compass Indexer");
indexThread.start();
}
}
public void setBuildIndex(boolean buildIndex) {
this.buildIndex = buildIndex;
}
public void setLazyTime(int lazyTime) {
this.lazyTime = lazyTime;
}
public void setCompassGps(CompassGps compassGps) {
this.compassGps = compassGps;
}
}
<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.hibernate.dep.SpringHibernate3GpsDevice">
<property name="name" value="hibernateDevice" />
<property name="sessionFactory"
ref="sessionFactory" />
</bean>
</list>
</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="compassIndexBuilder"
class="com.test.service.impl.CompassIndexBuilder"
lazy-init="false">
<property name="compassGps" ref="compassGps" />
<property name="buildIndex" value="true" />
<property name="lazyTime" value="10" />
</bean>
尝试以下修改:
compassIndexBuilder里compassGps属性的类型改成org.compass.gps.impl.SingleCompassGps所实现的接口。并加上set方法
org.compass.gps.impl.SingleCompassGps所实现的接口里有没有start方法,stop方法