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

YOKOTA Takehiko [E-MAIL ADDRESS DELETED]
2009年 8月 4日 (火) 13:46:59 JST


横田です。

動作確認ありがとうございました。今回の対処は、パッチを送っていただけたので
とても楽でした。ありがとうございました。

また何かありましたらどんどん質問・要望出してくださいね。よろしくお願いします。


西山 はじめ さんは書きました:
> お世話になっております。
> 西山です。
> 
> oc4jで、追加の「+」「++」系のdiconファイルがロードされるのが
> 確認できました。
> 
> oc4jでもTomcat同様、自動生成機能を使いながら開発を進めていけ
> そうです。
> 
> すばやい対応ありがとうございました。
> Ymirに関しましてはこれから、また質問させていただくかも知れま
> せんが、その際はどうかよろしくお願いいたします。
> 
> [2009/08/03 16:58] YOKOTA Takehiko さんは書きました。:
>> 西山さんこんにちは。横田です。
>>
>> 動作確認ありがとうございました。
>>
>> 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 メーリングリストの案内