错误位置:在访问文档(Article)详细信息时候报错!
错误提示:
java.lang.NoSuchFieldError: NOT_ANALYZED
at org.compass.core.lucene.LuceneResource.<init>(LuceneResource.java:81)
at org.compass.core.lucene.LuceneResource.<init>(LuceneResource.java:68)
at org.compass.core.lucene.LuceneMultiResource.<init>(LuceneMultiResource.java:52)
at org.compass.core.lucene.LuceneResourceFactory.createResource(LuceneResourceFactory.java:40)
at org.compass.core.marshall.DefaultMarshallingStrategy.marshall(DefaultMarshallingStrategy.java:153)
at org.compass.core.impl.DefaultCompassSession.save(DefaultCompassSession.java:484)
at org.compass.core.impl.DefaultCompassSession.save(DefaultCompassSession.java:473)
at org.compass.core.impl.ExistingCompassSession.save(ExistingCompassSession.java:313)
at org.compass.gps.device.jpa.AbstractCompassJpaEntityListener$2.doInCompassWithoutResult(AbstractCompassJpaEntityListener.java:136)
at org.compass.core.CompassCallbackWithoutResult.doInCompass(CompassCallbackWithoutResult.java:29)
at org.compass.core.CompassTemplate.execute(CompassTemplate.java:133)
at org.compass.gps.device.jpa.AbstractCompassJpaEntityListener.postUpdate(AbstractCompassJpaEntityListener.java:134)
at org.compass.gps.device.jpa.lifecycle.HibernateJpaEntityLifecycleInjector$HibernateEventListener.onPostUpdate(HibernateJpaEntityLifecycleInjector.java:65)
at org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:184)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:163)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.cwc.service.imp.ArticleServiceBean$$EnhancerByCGLIB$$ad924c6c.update(<generated>)
at com.cwc.web.action.FrontManageAction.showItem(FrontManageAction.java:31)
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.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.cwc.web.filter.SetCodeFilter.doFilter(SetCodeFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    访问Article的代码(Struts的Action实现):
    public ActionForward showItem(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws Exception {
    FrontForm formbean = (FrontForm) form;
    Article article=articleService.find(Article.class, formbean.getId());//根据id找到Article
    Integer hits=article.getHits()+1;//点击次数增加1
    article.setHits(hits);
    articleService.update(article);
    request.setAttribute("article", article);
    return mapping.findForward("showitem");
    }
    实体类Article代码:package com.cwc.bean;import java.io.Serializable;
    import java.util.Date;import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;import org.compass.annotations.Searchable;
    import org.compass.annotations.SearchableId;
    import org.compass.annotations.Index;
    import org.compass.annotations.SearchableProperty;
    @Entity @Searchable
    public class Article implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @SearchableId
    private Integer id;

    @Column(length=200,nullable=false) @SearchableProperty(name="articleName", boost=2)
    private String name;//标题

    @Column(nullable=false)@SearchableProperty
    private String content;//内容

    @Temporal(TemporalType.TIMESTAMP)
    private Date creatDate;//创建时间

    @ManyToOne(cascade=CascadeType.REFRESH,optional=false)
    @JoinColumn(name="typeid")
    private ArticleType type;//文章类型

    @Column(length=50)
    private String keyword;//关键字

    @Column(length=50)
    private String source;//来源

    @Column(nullable=false)
    private Boolean visible = true ;

    @Column(nullable=false) @SearchableProperty
    private Integer hits = 1;//点击数

    @Column(length=15) 
    private String ip;//创建ip

    @Column(nullable=false)
    private Boolean commend = false;//是否推荐
    @ManyToOne(cascade=CascadeType.REFRESH)
    @JoinColumn(name="employeeid")
    private Employee creater;//创建者


    public Article(){}

    public Article(String name,String content){
    this.name=name;
    this.content=content;
    }

    public Article(String name,String content,ArticleType type){
    this.name=name;
    this.content=content;
    this.type=type;
    }

    public Article(Integer id, String name, String content, Date creatDate,
    ArticleType type, String keyword, String source, Boolean visible,
    Integer hits, String ip, Boolean commend) {
    super();
    this.id = id;
    this.name = name;
    this.content = content;
    this.creatDate = creatDate;
    this.type = type;
    this.keyword = keyword;
    this.source = source;
    this.visible = visible;
    this.hits = hits;
    this.ip = ip;
    this.commend = commend;
    } public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getContent() {
    return content;
    }
    public void setContent(String content) {
    this.content = content;
    }
    public Date getCreatDate() {
    return creatDate;
    }
    public void setCreatDate(Date creatDate) {
    this.creatDate = creatDate;
    }
    public ArticleType getType() {
    return type;
    }
    public void setType(ArticleType type) {
    this.type = type;
    } public String getKeyword() {
    return keyword;
    } public void setKeyword(String keyword) {
    this.keyword = keyword;
    } public String getSource() {
    return source;
    } public void setSource(String source) {
    this.source = source;
    } public Boolean getVisible() {
    return visible;
    } public void setVisible(Boolean visible) {
    this.visible = visible;
    } public Integer getHits() {
    return hits;
    } public void setHits(Integer hits) {
    this.hits = hits;
    } public String getIp() {
    return ip;
    } public void setIp(String ip) {
    this.ip = ip;
    } public Boolean getCommend() {
    return commend;
    } public void setCommend(Boolean commend) {
    this.commend = commend;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    final Article other = (Article) obj;
    if (id == null) {
    if (other.id != null)
    return false;
    } else if (!id.equals(other.id))
    return false;
    return true;
    } public Employee getCreater() {
    return creater;
    } public void setCreater(Employee creater) {
    this.creater = creater;
    }

    }
      

  2.   

    spring的配置:
    <?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:context="http://www.springframework.org/schema/context"
           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/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:component-scan base-package="com.cwc"/>
        <!--  使用数据源和指定persistence.xml位置的方式创建entityManagerFactory,如果使用的不是hibernate JPA实现,
        需要在tomcat作一些特殊配置.具体参考手册
        注意:使用该方式需要把persistence.xml中的hibernate.connection.driver_class,hibernate.connection.username,hibernate.connection.password,hibernate.connection.url配置删除-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="initialSize" value="${initialSize}"/>
        <property name="maxActive" value="${maxActive}"/>
        <property name="maxIdle" value="${maxIdle}"/>
        <property name="minIdle" value="${minIdle}"/>
       </bean>
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    <property name="loadTimeWeaver">
              <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
           </property>
    </bean>

       <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory"/>
       </bean>
       
       <tx:annotation-driven transaction-manager="transactionManager"/>
      
       <bean id="compass" class="org.compass.spring.LocalCompassBean">
    <property name="classMappings">
    <list>
    <value>com.cwc.bean.Article</value>
    </list>
    </property>
    <property name="compassSettings">
    <props>
    <prop key="compass.engine.analyzer.default.type">net.paoding.analysis.analyzer.PaodingAnalyzer</prop>
    <prop key="compass.engine.connection">file://d:/index</prop>
    <!-- 在内存中建立索引
    <prop key="compass.engine.connection">ram://index</prop>
    -->
    <prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<font color='red'>]]></prop>
    <prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</font>]]></prop>
    <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
    </props>
    </property>
    <property name="transactionManager" ref="transactionManager" />
    </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>
    <!-- 设置JPA驱动 -->
    <bean class="org.compass.gps.device.jpa.JpaGpsDevice">
    <property name="name" value="jpaDevice" />
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="injectEntityLifecycleListener" value="true"/>
    </bean>
    </list>
    </property>
    </bean>

       <bean id="jdbcDataSource"
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
    <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="url">
    <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
    </property>
    <property name="username" value="xssf2004" />
    <property name="password" value="zhao" />
    </bean> <bean id="jdbcTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
    <ref bean="jdbcDataSource" />
    </property>
    </bean> <bean id="jdbcTxProxyTemplate" abstract="true"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref bean="jdbcTransactionManager" />
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>

    <bean id="sqlDao" class="com.cwc.jdbc.dao.SqlDao">
    <property name="dataSource">
    <ref bean="jdbcDataSource" />
    </property>
    </bean>


    <!-- Activates @Transactional for DefaultImageDatabase -->
       <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

    </beans>
      

  3.   

    这是lucene的错误呀,NoSuchFieldError: NOT_ANALYZED
    看看创建索引时有错
      

  4.   

    高手 能讲讲怎么使用compass构建搜索引擎吗?