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

西山 はじめ [E-MAIL ADDRESS DELETED]
2009年 8月 3日 (月) 14:41:35 JST


お世話になっております。
西山です。

遅くなりましたが、確認できました。
お忙しいところありがとうございました。

もう1件oc4j絡みでお願いがあります。

s2-classbuilder 0.0.8 が やはりcode-sourceに対応していない
為、diconファイルの置き換えが有効になりません。

正確には、Jarファイル内の通常のdiconが読み込まれるのに対し
て、ファイルとして展開された 「+」や 「++」のdiconファイルが
読み込まれません。

以下の修正で読み込まれるようになりますが、この箇所だけでよい
かどうかわかりません。(HotDeploy、CoolDeployでは大丈夫でした)

S2ContainerBuilderUtils
Index:
src/main/java/org/seasar/cms/classbuilder/util/S2ContainerBuilderUtils.java
===================================================================
---
src/main/java/org/seasar/cms/classbuilder/util/S2ContainerBuilderUtils.java
(revision 995)
+++
src/main/java/org/seasar/cms/classbuilder/util/S2ContainerBuilderUtils.java
(working copy)
@@ -21,6 +21,10 @@

     private static final String SUFFIX_JAR = "!/";

+    public static final String PREFIX_CODE_SOURCE =
"code-source:";
+
+    public static final String SUFFIX_CODE_SOURCE = "!/";
+
     private static final String PREFIX_FILE = "file:";

     private static final char COLON = ':';
@@ -113,6 +117,13 @@
                     return resourcePath;
                 }
             }
+        } else if (path.startsWith(PREFIX_CODE_SOURCE)) {
+            int idx = path.indexOf(SUFFIX_CODE_SOURCE);
+            if (idx >= 0) {
+                return path.substring(idx +
SUFFIX_CODE_SOURCE.length());
+            } else {
+                return null;
+            }
         }
         return null;
     }
=============================ここまで


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

[2009/08/01 13:37] YOKOTA Takehiko さんは書きました。:
> 横田です。
> 
> 西山さんからいただいたパッチを適用したものをMaven2のSNAPSHOTリポジトリ
> にデプロイしました。試してみていただけますでしょうか?
> 
> よろしくお願いします。
> 
> 
> YOKOTA Takehiko さんは書きました:
>> 横田です。
>>
>> ご報告ありがとうございます。対応させていただきたいと思います。
>>
>> (ちょっと今本業が佳境のため、週末の対応となってしまうと思います。
>> すみません。)
>>
>> 対応終わりましたらご連絡します。
>>
>> 以上よろしくお願いします。
>>
>>
>> 西山 はじめ さんは書きました:
>>> お世話になっております。
>>> 西山と申します。
>>>
>>> 環境:
>>>  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 メーリングリストの案内