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

YOKOTA Takehiko [E-MAIL ADDRESS DELETED]
2009年 8月 3日 (月) 16:58:40 JST


西山さんこんにちは。横田です。

動作確認ありがとうございました。

s2-classbuilderの方もいただいたパッチを適用したものをMaven2のSNAPSHOT
リポジトリにデプロイしてみましたので確認してみていただけますでしょうか。
よろしくお願いします。


西山 はじめ さんは書きました:
> お世話になっております。
> 西山です。
> 
> 遅くなりましたが、確認できました。
> お忙しいところありがとうございました。
> 
> もう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 {
>>>>
>>>> =================ここまで
>>>>
>>>> 以上よろしくお願いいたします。
>>>>
>>
>>
>>
>>
> 
> 


-- 
YOKOTA Takehiko
  [E-MAIL ADDRESS DELETED]


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