[Seasar-user:20169] Re: s2jdbc.dicon,jdbc.dicon をWEB-INF/classes外に配置したい(解決)
kubo
[E-MAIL ADDRESS DELETED]
2010年 9月 21日 (火) 11:46:59 JST
久保(jflute)です。
自分も参考までにということで。
自分がよく採用してるのは金子さんの言う「1」です。
というか、インフラ側からそのようにしてくれという
要求があったこともありました。
デプロイミスで、別のサーバのDBを参照したりしないように、
「必ずこのサーバで動くときはこのサーバに対応したDBを参照」
というのが保証されるように、というのが大きな理由。
万が一、ステージング環境で本番DBを参照するような設定で
デプロイしちゃってデータを変な風にしてしまわないように。
(本番用WARをプレビュー環境に置いちゃったりとか)
ただ、ローカル環境やバッチ環境との共存を少し工夫する必要が
あるので、システム規模が小さければ「2」のときもあります。
2010/9/21 金子 雄一 <[E-MAIL ADDRESS DELETED]>:
> 金子と申します。
>
> 解決をしたとのことですが、
> ほかの方法もありますので、
> 参考のために、投稿させていただきます。
> (私も、似たような課題にあたったことがあるので。)
>
>
> 1.それぞれのTomcatのweb.xmlにcontext-paramを追記して、
> OGNL式で、それぞれの設定を読み込む。
>
> 2. Mavenのプロファイルをそれぞれの環境ごとに定義をして、
> デプロイ時に、デプロイ先の環境にあったプロファイルを指定して、
> WARを作成(OR Mavenで直接デプロイ)
>
> 3.S2でTomcat(というかJ2EEコンテナ)のデータソースを利用するようにする。
>
> 1.の場合は、ほぼTomcat限定、2.の場合は、Maven利用が前提、
> 3.は、若干、資料不足(な気がする)というところですね。
>
> 私がやったことがあるのは、1.と2.です。
> やった感想としては、2.が一番お勧めできます。
>
> 現状では、解決したとのことですが、
> もし何かの参考になればとおもい、
> 投稿しました。
>
>
> 以上、よろしくお願いします。
>
>
> (2010/09/20 9:19), Kaoru Kobo wrote:
>> かおる工房です。
>>
>> 小林さん、アドバイスありがとうございます。
>>
>>>> データベース設定を書き込む s2jdbc.dicon を
>>>> <Webアプリケーションフォルダ>/WEB-INF/classes外に
>>>> 配備することができますでしょうか?
>>>
>>> dicon ファイルはクラスパスからリソースとして
>>> 読み込んでいるので,クラスパスに通っている
>>> 場所ならどこにでも置くことができます.
>>
>> Tomcatを利用している場合、
>> アプリケーションごとに柔軟に別のクラスパスを追加する方法は
>> 調べてみましたけど、分かりませんでした。
>> http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
>>
>> また、
>>
>>>
>>> ...
>>> 簡単なのは War ファイルを作成するスクリプトで
>>> s2jdbc.dicon が含まれないようにすることでは
>>> ないかと.
>>
>> これは確かに一番シンプルな手ですね。
>>
>> ただ、やはりclassesの中というのが…
>> いわゆる「生成されたファイル」で
>> 手軽に空にできるようにしたいという感覚があって
>> あまり設定などの手で編集するファイルを
>> 置きたくないという感じがするのです。
>>
>>
>> そこで、
>>
>>>
>>> こちらのプロダクトを利用している人達もいるようです.
>>>
>>> http://s2config.sandbox.seasar.org/ja/
>>
>> を読んでみたところ、ヒントを得ました。
>> diconの中のOGNL式内でメソッド呼び出しができるのですね。
>>
>> そこで、
>> WEB-INF/configuration.xml
>> という別の場所にあるXMLファイルをパースして設定をロードするための
>> コンポーネントXmlConfigurationを自作し、
>>
>> jdbc.dicon
>> ========================================================================
>> <component name="xmlConfiguration"
>> class="myapp.util.XmlConfiguration"></component>
>>
>> <component name="xaDataSource"
>> class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
>> <property name="driverClassName">
>> "com.mysql.jdbc.Driver"
>> </property>
>> <property name="URL">xmlConfiguration.get("jdbc/url")</property>
>> <property name="user">xmlConfiguration.get("jdbc/username")</property>
>> <property name="password">xmlConfiguration.get("jdbc/password")</property>
>> </component>
>> ========================================================================
>>
>> というふうに、
>> XmlConfiguration から取得した値を、
>> xaDataSource に注入するように記述しました。
>>
>> configuration.xml の中身はこのようなものです。
>> ========================================================================
>> <?xml version="1.0" encoding="UTF8"?>
>> <configuration>
>> <jdbc>
>> <url>jdbc:mysql://localhost:3306/DATABASE</url>
>> <username>USER</username>
>> <password>PASS</password>
>> </jdbc>
>> </configuration>
>> ========================================================================
>>
>> いまのところ、このような形で満足しております。
>>
>> アドバイスをありがとうございました。
>>
>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
>
> --
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> 金子 雄一 Yuichi Kaneko
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内