[Seasar-user:18133] [Ymir][s2-pluggable] oc4j用の code-source プロトコルに対応していない

西山 はじめ [E-MAIL ADDRESS DELETED]
2009年 7月 30日 (木) 21:58:11 JST


お世話になっております。
西山と申します。

環境:
 Ymir 1.0.4


現在、YmirをOC4Jで動かすテストを行っております。
しかし、s2-pluggableがOC4Jに対応しておりません。

S2Container自体はOC4Jに対応しておりますので、対応を検討して
いただけないでしょうか。

s2-frameworkの
org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister$CodeSourceFileStrategy
と同じ処理を
org.seasar.cms.pluggable.ClassTraverser
に追加することで、今のところ動作しております。

こちらで作成したソースは以下の通りです。

Index:
src/main/java/org/seasar/cms/pluggable/ClassTraverser.java
===================================================================
---
src/main/java/org/seasar/cms/pluggable/ClassTraverser.java
(revision 994)
+++
src/main/java/org/seasar/cms/pluggable/ClassTraverser.java
(working copy)
@@ -13,6 +13,7 @@
 import org.seasar.framework.util.ClassTraversal;
 import org.seasar.framework.util.JarFileUtil;
 import org.seasar.framework.util.ResourceUtil;
+import org.seasar.framework.util.URLUtil;
 import org.seasar.framework.util.ClassTraversal.ClassHandler;

 public class ClassTraverser {
@@ -31,6 +32,7 @@
         strategies.put("file", new FileSystemStrategy());
         strategies.put("jar", new JarFileStrategy());
         strategies.put("zip", new ZipFileStrategy());
+        strategies.put("code-source", new
CodeSourceFileStrategy());
     }

     public int getClassPatternSize() {
@@ -197,6 +199,22 @@
             return JarFileUtil.create(new File(jarFileName));
         }
     }
+    /**
+     * OC4J固有の<code>code-source:</code>プロトコルで表現
されるURLをサポートするストラテジです。
+     */
+    protected class CodeSourceFileStrategy implements
Strategy {
+
+        public void process(Class<?> referenceClass, URL url) {
+            final JarFile jarFile = createJarFile(url);
+            ClassTraversal.forEach(jarFile, classHandler);
+        }
+
+        protected JarFile createJarFile(final URL url) {
+            final URL jarUrl = URLUtil.create("jar:file:" +
url.getPath());
+            return JarFileUtil.toJarFile(jarUrl);
+       }
+
+    }

     class FilteredClassHandler implements ClassHandler {

=================ここまで

以上よろしくお願いいたします。

-- 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
株式会社フジミック 
        システム開発センター ソフトウェア開発部
 西山 創
[E-mail]:[E-MAIL ADDRESS DELETED]
 
〒140-0002 東京都品川区東品川3-32-42 フジテレビ別館7階
[TEL]:03-5495-1060
++++++++++++++++++++++++++++++++++++++++++++++++++++++++



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