[seasar-dev:662] AOPをかけたコンポーネントをシリアライズしたい

加藤 潤一 [E-MAIL ADDRESS DELETED]
2007年 4月 3日 (火) 11:16:57 JST


加藤 (j5ik2o) です.

お世話になります.

非常に初歩的な質問なのですが,ちょっと教えてください.

質問は,「AOPをかけたコンポーネントをシリアライズしたい」です.
シリアライズ対象はS2のコンポーネント(POJO)で,Serializableを実装させています.
問題は,readObjectで,java.lang.ClassNotFoundExceptionが発生してしまうことです.(writeObjectでは書き込みはできています)

そもそも,AOPで動的に拡張されたサブクラスを保存しているので,読み込んだ時にそんなクラスないよっていっているのでしょうか?
何かよい解決方法ないでしょうか?

        out.writeObject(task);  // AOPをかけたオブジェクトを書き込み

        task = in.readObject(); // ClassNotFoundException



java.lang.ClassNotFoundException: org.seasar.chronos.smartdeploy.task.SmartTask$$EnhancedByS2AOP$$1458dcb
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at java.io.ObjectInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at org.seasar.chronos.task.strategy.impl.TaskExecuteStrategyImpl.readExternal(TaskExecuteStrategyImpl.java:91)
        at java.io.ObjectInputStream.readExternalData(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at org.seasar.chronos.task.strategy.impl.TaskExecuteStrategyImplTest.testDeserialize(TaskExecuteStrategyImplTest.java:68)
        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 junit.framework.TestCase.runTest(TestCase.java:164)
        at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:306)
        at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
        at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:189)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:120)
        at junit.framework.TestSuite.runTest(TestSuite.java:230)
        at junit.framework.TestSuite.run(TestSuite.java:225)
        at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)


Seasar-dev メーリングリストの案内