2012-03-15 7 views
5

私の春のwebapp(spring 3.1)でこのエラーが発生しています。エラーがなくなっているの下に、私はクラスでのアノテーション@Cacheableコメント場合NoClassDefFoundError(スプリングキャッシュとアスペクト)

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: mypackage/TestCache$AjcClosure1

$AjcClosure1は奇妙です)。

public class TestCache { 

     @Cacheable(value ="myCache") 
     public List<String> getDummyList(){ 
      Logger l = Logger.getLogger(this.getClass()); 
      l.error("calling getDummyList"); 
      ArrayList<String> foo = new ArrayList<String>(); 
      foo.add("foo"); 
      foo.add("bar"); 
      return foo; 
     } 

    } 

マイコントローラクラス(簡体字):

@Controller 
@RequestMapping("/mypage") 
public class MyController { 


    @RequestMapping 
    public String index(ModelMap model, Locale locale) { 
     TestCache tc = new TestCache(); 
     ... 
    } 
} 

アプリケーション・コンテキスト(のみキャッシュ部):

<cache:annotation-driven mode="aspectj"/> 
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache"/> 
    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="classpath:ehcache.xml"/> 

をIは、(プロキシ・モードで以下のエラープロキシとAspectJのモードを試みたがキャッシュは何もしていませんでした)

このWebアプリケーションは最初にrooで構築され、spring mv cとwebflow。したがって、applicationContext.xmlまたはwebmvc-config.xmlにはかなりのXMLがあります(そして、いくつかのBeanが何をしているのか理解できません)。 は私がのM2e-WTPと日食にwepappsを実行しているとのpom.xmlは、プラグインAspectJの-のmaven-プラグインを使用している(それが何をするか全く分からない)

問題はAspectJのと関連しているように見えます

、私はaspectJを使ったことはありません。 誰かがspring/java/aspectjの専門家が私にこのエラーを引き起こしていることを説明でき、私がどのようにキャッシュを動作させることができるかは素晴らしいと思います! (チュートリアルだけが見つかりましたが、キャッシュ可能な注釈を使用したサンプルプロジェクトは見つかりませんでした)。

+0

ターゲットフォルダをリフレッシュしてください。http://stackoverflow.com/questions/16283268/how-to-deploy-generated-resources-to-tomcat-with-m2e-wtp – xmedeko

答えて

0

1つの問題(NoClassDefFoundErrorを引き起こすものではないかもしれません)は、Spring Beansに対してのみ@CacheableのようなSpring関数を使用できるということです。したがって、newでクラスを作成した場合(このクラスには@Configurableでアノテートされていません)、これは通常のクラスであり、Spring Beanではありません。したがって、注釈はプロキシモードでは無視されます。 - AspectJモードでもこのような間違いが発生するかもしれませんが、わかりません。

+0

これは私を少し助けてくれますどのように動作するかを理解し始める! 私はインターフェイスを作成し、アプリケーションコンテキストでBeanを宣言し、コントローラで同じエラーでオートワイヤードします。 私は@configurableタグを見てみましょう – jpprade

+1

私は問題がEclipseかwtp plugginから来たと思っています。もしEclipseの下のターゲットパスをチェックすると、コンパイルされたmyclass $ AjcClosure1があります。しかし、 – jpprade

3

問題は、すべてのクラス$ AjcClosure [n] .classが公開されておらず、それを行う唯一の方法は、削除、Webアプリケーション、クリーンスタート、およびWebappの再発行であると思われます。

関連する問題