struts2+spring+hibernate+compass的的一个异常~

H~~~ 2009-01-15 07:28:25
2009-1-15 19:01:19 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 'compassIndexBuilder' defined in ServletContext resource [/WEB-INF/applicationContext-compass.xml]: Cannot resolve reference to bean 'compassGps' while setting bean property 'compassGps'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compassGps' defined in ServletContext resource [/WEB-INF/applicationContext-compass.xml]: Invocation of init method failed; nested exception is java.lang.ClassCastException: $Proxy6
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'compassGps' defined in ServletContext resource [/WEB-INF/applicationContext-compass.xml]: Invocation of init method failed; nested exception is java.lang.ClassCastException: $Proxy6
Caused by: java.lang.ClassCastException: $Proxy6
at org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector.injectLifecycle(DefaultHibernateEntityLifecycleInjector.java:95)
at org.compass.gps.device.hibernate.HibernateGpsDevice.doStart(HibernateGpsDevice.java:149)
at org.compass.gps.device.AbstractGpsDevice.start(AbstractGpsDevice.java:125)
at org.compass.gps.device.support.parallel.AbstractParallelGpsDevice.start(AbstractParallelGpsDevice.java:73)
at org.compass.gps.device.AbstractGpsDeviceWrapper.start(AbstractGpsDeviceWrapper.java:65)
at org.compass.gps.impl.AbstractCompassGps.start(AbstractCompassGps.java:166)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1241)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1206)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:428)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:424)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4336)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1206)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1307)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
at java.lang.Thread.run(Unknown Source)
...全文
565 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwz526 2009-02-18
  • 打赏
  • 举报
回复
庖丁解牛的分词功能参考v512工作室的视频,在applicationContext-compass.xml里面没有实现。我是又配置了compass.cfg.xml才实现的。但是如何才能实现:输入查询语句的时候,把包含其中的部分查询语句的对象都查询出来?(例如查询:“中国北京” 的时候,将只包含“中国”的对象查询出来啊?)
还有,楼主的xml在我的项目里面跑过了。没有问题的!!!可能是其他地方出了问题吧?
liang512 2009-02-12
  • 打赏
  • 举报
回复
帮顶,同样关注
fanyuanwaifdl 2009-01-17
  • 打赏
  • 举报
回复
up
Landor2004 2009-01-16
  • 打赏
  • 举报
回复
// Compass封装
private CompassGps compassGps;
这么写,如果CompassGps是个接口的话,应该没有问题了
harry2926 2009-01-16
  • 打赏
  • 举报
回复
wlh86618 ,你的代码是不是参考 v512工作室发布的Struts2_Hibernate_Spring_Compass整合开发视频,我刚刚在看这段视频,遇到的问题跟你的一模一样,请问 问题解决了吗?


视频中有个配置文件paoding-dic-home.properties里面的配置lucene paoding 搜索算法,你是怎么配置的?
paoding.dic.home=C:/paoding/dic
paoding.dic.detector.interval=60


继续关注,我的邮箱是:harry2926@163.com
H~~~ 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fulianglove 的回复:]
Java code
// 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 s…
[/Quote]


// 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;
}


这是CompassGps的声明,它本身是个抽象接口,而且没有父接口啊,看来无法向上转型了。
fulianglove 2009-01-16
  • 打赏
  • 举报
回复

// 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;
}


这样改下,然后试试
socool627 2009-01-16
  • 打赏
  • 举报
回复
up
H~~~ 2009-01-16
  • 打赏
  • 举报
回复
没人会吗?
H~~~ 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 harry2926 的回复:]
wlh86618 ,你的代码是不是参考 v512工作室发布的Struts2_Hibernate_Spring_Compass整合开发视频,我刚刚在看这段视频,遇到的问题跟你的一模一样,请问 问题解决了吗?


视频中有个配置文件paoding-dic-home.properties里面的配置lucene paoding 搜索算法,你是怎么配置的?
paoding.dic.home=C:/paoding/dic
paoding.dic.detector.interval=60


继续关注,我的邮箱是:harry2926@163.com
[/Quote]

paoding不是搜索算法,是中文分词,那个目录是配置词典的~
zou_wei_forever 2009-01-16
  • 打赏
  • 举报
回复
路过,up一下~~
H~~~ 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Landor2004 的回复:]
引用 2 楼 fulianglove 的回复:
compassIndexBuilder里compassGps属性的类型改成org.compass.gps.impl.SingleCompassGps所实现的接口。并加上set方法

类CompassIndexBuilder中的compassGps属性声明为SingleCompassGps所实现的接口
private SingleCompassGps所实现的接口 compassGps;
而不是
private  SingleCompassGps compassGps
[/Quote]

说实话,我没太理解你的意思,我贴一下CompassIndexBuilder:

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;
}
}

Landor2004 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fulianglove 的回复:]
compassIndexBuilder里compassGps属性的类型改成org.compass.gps.impl.SingleCompassGps所实现的接口。并加上set方法
[/Quote]
类CompassIndexBuilder中的compassGps属性声明为SingleCompassGps所实现的接口
private SingleCompassGps所实现的接口 compassGps;
而不是
private SingleCompassGps compassGps
H~~~ 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fulianglove 的回复:]
错误主要是下面两个bean(对应的类)引起的
XML code<!--同步更新索引--><beanid="compassGps"class="org.compass.gps.impl.SingleCompassGps"init-method="start"destroy-method="stop"><propertyname="compass"ref="compass"/><propertyname="gpsDevices"><list><beanclass="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper"><propertyname="gpsDevice"ref="hibernateGpsDevice"/></bean></list></property><…
[/Quote]


我看源码了,compassGps就是org.compass.gps.impl.SingleCompassGps所实现的接口。
而且在这个接口中定义了start,stop方法。
我也在com.test.service.impl.CompassIndexBuilder这个类中设置了compassGps的setter方法了。

继续求助各位高人!!!!!!!!!!!!!
Sou2012 2009-01-15
  • 打赏
  • 举报
回复
一般是 xml 中bean没定义好。。。用注解的人路过
Alien 2009-01-15
  • 打赏
  • 举报
回复
帮你顶起来,人多了,就一定有会的
H~~~ 2009-01-15
  • 打赏
  • 举报
回复


<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合成这个就不提示错误,但是搜索功能不好使,在hits.length()为0,这么改是在跟本上把错误改了吗?
fulianglove 2009-01-15
  • 打赏
  • 举报
回复
错误主要是下面两个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方法



H~~~ 2009-01-15
  • 打赏
  • 举报
回复
applicationContext-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.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.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/test</value>
</list>
</property>
<property name="connection">
<value>/lucene/indexes</value>
</property>


<property name="classMappings">
<list>
<value>com.test.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.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>
</property>
</bean>





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

<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
<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>



</beans>

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧