[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 メーリングリストの案内