<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>diconファイルの扱い</title>
    <link rel="stylesheet" href="/css/style.css" type="text/css" media="all" />
    
    
  </head>
  <body>
    <div class="header">
      <div id="pane.left-header" class="pane left">
        <div id="org.seasar.kvasir.cms.toolbox.customPop-2" class="pop org.seasar.kvasir.cms.toolbox.customPop">
          <div class="body"><div class="wiki">
<ul>
<li><a href="/" class="pageNotFound">（サイトトップ）</a></li>
<li><a href="/download">ダウンロード</a></li>
<li><a href="/news/" class="pageNotFound">新着情報</a></li>
<li><a href="/docs/" class="pageNotFound">ドキュメント</a></li>
</ul>
</div>
</div>
        </div>
      </div>
      <div id="pane.right-header" class="pane right">
        <div id="org.seasar.kvasir.cms.toolbox.loginPop-1" class="pop org.seasar.kvasir.cms.toolbox.loginPop">
          <div class="body">
<form method="post" action="/plugins/toolbox/login.do/docs/1.0.x/ref/dicon">
    <div class="row">
      <span class="label">Name</span>
      <span class="textinput"><input type="text" name="name" size="12" value="" /></span>
    </div>
    <div class="row">
      <span class="label">Password</span>
      <span class="textinput"><input type="password" name="password" size="12" value="" /></span>
    </div>
    <div class="row">
      <span class="submit"><input type="submit" value="Login" /></span>
    </div>
</form>
</div>
        </div><div id="org.seasar.kvasir.cms.pop.loginUserPop-1" class="pop org.seasar.kvasir.cms.pop.loginUserPop">
          <div class="body"></div>
        </div>
      </div>
    </div>
    <div class="page-frame">
      <div id="pane.left-sidebar" class="pane sidebar-frame sidebar subcontent">
        <div id="org.seasar.kvasir.cms.toolbox.searchPop-1" class="pop org.seasar.kvasir.cms.toolbox.searchPop">
          <h2 class="title">Search</h2>
          <div class="body"><form class="simple" method="get" action="/plugins/toolbox/search.do">
  <input type="text" name="query" size="12" />
  <input type="submit" value="Go!" />
</form>
</div>
        </div><div id="org.seasar.kvasir.cms.toolbox.customPop-1" class="pop org.seasar.kvasir.cms.toolbox.customPop">
          <h2 class="title">メニュー</h2>
          <div class="body"><ul>
  <li><a href="/" class="pageNotFound">（サイトトップ）</a></li>
  <li><a href="/download">ダウンロード</a></li>
  <li><a href="/news">新着情報</a></li>
  
    
    
      <li>
        <a href="/docs/1.0.x/user">ユーザマニュアル</a>
        <ul>
          <li>
            <a href="/docs/1.0.x/user/description">Ymirとは</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/processFlow">Ymirの処理フロー</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/projectStatus">動作ステータス</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/generator">自動生成機能</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/vili">Eclipseプラグイン「Vili（ヴィリ）」</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/ve">Eclipseプラグイン「Ve（ヴェー）」</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/setUp">セットアップ</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/skeleton">空のアプリケーション</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/example">サンプルアプリケーションの作成</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/development">開発における注意点</a>
            
          </li><li>
            <a href="/docs/1.0.x/user/faq">FAQ</a>
            
          </li>
        </ul>
      </li><li>
        <a href="/docs/1.0.x/ref">リファレンスマニュアル</a>
        <ul>
          <li>
            <a href="/docs/1.0.x/ref/pageClass">Pageクラス</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/pathMapping">リクエストパスとPageクラスのマッピング</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/response">レスポンス</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/fileupload">ファイルアップロード</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/typeConversion">型の自動変換</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/zptTemplate">ZPTテンプレート</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/constraintCheck">制約チェック</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/validation">バリデーション</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/transactionToken">トランザクショントークン</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/permissionCheck">権限チェック</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/objectScope">オブジェクトスコープ</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/i18n">国際化</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/exceptionHandler">例外処理</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/include">インクルード</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/conversation">カンバセーション</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/appProperties">アプリケーションの設定</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/dicon">diconファイルの扱い</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/standardArchitecture">アプリケーションアーキテクチャ標準</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/ymirJson">JSON連携</a>
            
          </li><li>
            <a href="/docs/1.0.x/ref/batch">バッチプログラムの作成</a>
            
          </li>
        </ul>
      </li><li>
        <a href="/docs/1.0.x/dev">Ymir開発者マニュアル</a>
        <ul>
          <li>
            <a href="/docs/1.0.x/dev/build">Ymirのビルド</a>
            
          </li><li>
            <a href="/docs/1.0.x/dev/release">Ymirのリリース</a>
            
          </li><li>
            <a href="/docs/1.0.x/dev/update-ymir-fragment-dbflute">DBFluteフラグメントの更新</a>
            
          </li>
        </ul>
      </li><li>
        <a href="/docs/1.0.x/etc">その他</a>
        
      </li><li>
        <a href="/docs/1.0.x/glossary">用語集</a>
        <ul>
          <li>
            <a href="/docs/1.0.x/glossary/Vili">Vili</a>
            
          </li><li>
            <a href="/docs/1.0.x/glossary/ve">Ve</a>
            
          </li>
        </ul>
      </li>
    
  
  <li><a href="/roadmap">ロードマップ</a></li>
  <li><a href="https://www.seasar.org/issues/browse/YMIR">既知の不具合を閲覧する・不具合を報告する</a></li>
  <li><a href="https://www.seasar.org/svn/ymir/">SVNリポジトリ</a></li>
  <li><a href="http://svn.seasar.org/browse/?root=ymir">SVNリポジトリを閲覧</a></li>
</ul>
</div>
        </div>
      </div>
      <div id="pane.main" class="pane main">
      
        <div id="org.seasar.kvasir.cms.toolbox.breadcrumbsPop-1" class="pop org.seasar.kvasir.cms.toolbox.breadcrumbsPop">
          
          <div class="body"><ul>
  <li class="first"><a href="/">(TOP)</a></li><li><a href="/docs">ドキュメント</a></li><li><a href="/docs/1.0.x">ドキュメント（1.0.x系）</a></li><li><a href="/docs/1.0.x/ref">リファレンスマニュアル</a></li><li>diconファイルの扱い</li>
</ul>
</div>
        </div><div id="org.seasar.kvasir.cms.pop.contentPop-1" class="pop org.seasar.kvasir.cms.pop.contentPop">
          <h2 class="title">diconファイルの扱い</h2>
          <div class="body">
<ul class="information">
  
  <li>2009-10-16 19:41:40</li>
</ul>
<div class="content"><div class="document">
<p>YmirではSeasar2によるdiconファイルの読み込みにs2-classbuilderというライブラリを使用しており、Seasar2を単独で利用した場合に比べてコンポーネントの読み込みを柔軟に制御することができるようになっています。</p>
<p>具体的には以下のことが実現できるようになっています。</p>
<ul>
<li>diconファイルの置き換え</li>
<li>dicon中の特定のコンポーネントの差し替え</li>
<li>dicon中の特定のコンポーネントの除去</li>
<li>diconへのコンポーネント定義の追加</li>
</ul>
<div class="section" id="s2-classbuildere381aee382bbe38383e38388e382a2e38383e38397">
<h3><a name="s2-classbuildere381aee382bbe38383e38388e382a2e38383e38397">s2-classbuilderのセットアップ</a></h3>
<p>Viliで作成したYmirアプリケーションプロジェクトには、基本的に全てs2-classbuilderが組み込み済みですので、セットアップは不要です。</p>
<p>自分でYmirアプリケーションプロジェクトを構築する場合や、Ymir以外のSeasar2アプリケーションプロジェクトでs2-classbuilderを利用する場合は、次のようにして下さい。</p>
<ol>
<li>
<p>クラスパス上に次のようなs2container.diconを配置する:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;dicon&quot; class=&quot;org.seasar.cms.classbuilder.impl.RedefinableXmlS2ContainerBuilder&quot; /&gt;
  &lt;component class=&quot;org.seasar.cms.classbuilder.impl.RedefinableResourceResolver&quot; /&gt;
&lt;/components&gt;
</pre>
</li>
<li>クラスパス上にs2-classbuilderのJarを配置する。</li>
</ol>
<p><em>[注意]</em> Seasar2.4（少なくとも2.4.39までのSeasar2.4）の不具合により、Ymir以外のSeasar2.4系フレームワークとs2-classbuilderを組み合わせた場合に正しく動作しないことがあります。Seasar2.4の不具合を回避するためにはs2-classbuilder-0.0.10以降を使用して下さい。</p>
</div>
<div class="section" id="dicone38395e382a1e382a4e383abe381aee7bdaee3818de68f9be38188">
<h3><a name="dicone38395e382a1e382a4e383abe381aee7bdaee3818de68f9be38188">diconファイルの置き換え</a></h3>
<p>aaa.diconに対してaaa+.diconをクラスパスに配置しておくことで、aaa.diconの代わりにaaa+.diconが読み込まれます。</p>
<p>aaa.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
<p>aaa+.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb2&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc2&quot; /&gt;
&lt;/components&gt;
</pre>
<p>この場合、aaa.diconが以下のような場合と等価になります:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb2&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc2&quot; /&gt;
&lt;/components&gt;
</pre>
</div>
<div class="section" id="dicone4b8ade381aee789b9e5ae9ae381aee382b3e383b3e3839de383bce3838de383b3e38388e381aee5b7aee38197e69bbfe38188">
<h3><a name="dicone4b8ade381aee789b9e5ae9ae381aee382b3e383b3e3839de383bce3838de383b3e38388e381aee5b7aee38197e69bbfe38188">dicon中の特定のコンポーネントの差し替え</a></h3>
<p>aaa.diconにbbbという名前のコンポーネント定義が記述されている場合、bbbのコンポーネント定義を記述したaaa+bbb.diconをクラスパスに配置しておくことで、aaa.dicon中のbbbコンポーネントの定義を差し替えることができます。</p>
<p>aaa.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
<p>aaa+bbb.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb2&quot; /&gt;
&lt;/components&gt;
</pre>
<p>この場合、aaa.diconが以下のような場合と等価になります:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb2&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
<p>インクルード定義やメタ情報定義もaaa.diconに追加されます。</p>
<p>[s2classbuilder-0.0.9以降] なおaaa+bbb.diconにbbb以外のコンポーネント定義が含まれている場合はそれもaaa.diconに追加されます。</p>
<p>[s2classbuilder-0.0.9以降] aaa++.dicon（後述）によって追加されたbbbコンポーネントもaaa+bbb.diconで置き換えることができます。</p>
</div>
<div class="section" id="dicone4b8ade381aee789b9e5ae9ae381aee382b3e383b3e3839de383bce3838de383b3e38388e381aee999a4e58ebb">
<h3><a name="dicone4b8ade381aee789b9e5ae9ae381aee382b3e383b3e3839de383bce3838de383b3e38388e381aee999a4e58ebb">dicon中の特定のコンポーネントの除去</a></h3>
<p>aaa.diconにbbbという名前のコンポーネント定義が記述されている場合、空のaaa+bbb.diconをクラスパスに配置しておくことで、aaa.dicon中のbbbコンポーネントの定義を除去することができます。</p>
<p>aaa.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
<p>aaa+bbb.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
&lt;/components&gt;
</pre>
<p>この場合、aaa.diconが以下のような場合と等価になります:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
</div>
<div class="section" id="dicone381b8e381aee382b3e383b3e3839de383bce3838de383b3e38388e5ae9ae7bea9e381aee8bfbde58aa0">
<h3><a name="dicone381b8e381aee382b3e383b3e3839de383bce3838de383b3e38388e5ae9ae7bea9e381aee8bfbde58aa0">diconへのコンポーネント定義の追加</a></h3>
<p>aaa.diconに対してaaa++.diconをクラスパスに配置しておくことで、aaa.diconにコンポーネント定義を追加することができます。</p>
<p>aaa.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
&lt;/components&gt;
</pre>
<p>aaa++.dicon:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;ddd&quot; class=&quot;com.example.Ddd&quot; /&gt;
  &lt;component name=&quot;eee&quot; class=&quot;com.example.Eee&quot; /&gt;
&lt;/components&gt;
</pre>
<p>この場合、aaa.diconが以下のような場合と等価になります:</p>
<pre class="literal-block">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE components PUBLIC &quot;-//SEASAR//DTD S2Container 2.4//EN&quot;
  &quot;http://www.seasar.org/dtd/components24.dtd&quot;&gt;
&lt;components&gt;
  &lt;component name=&quot;bbb&quot; class=&quot;com.example.Bbb&quot; /&gt;
  &lt;component name=&quot;ccc&quot; class=&quot;com.example.Ccc&quot; /&gt;
  &lt;component name=&quot;ddd&quot; class=&quot;com.example.Ddd&quot; /&gt;
  &lt;component name=&quot;eee&quot; class=&quot;com.example.Eee&quot; /&gt;
&lt;/components&gt;
</pre>
<p>aaa++.diconに含まれているインクルード定義やメタ情報定義もaaa.diconに追加されます。また、クラスパス上に複数のaaa++.diconが存在する場合は全てのaaa++.diconの内容が追加されます。なおaaa++.diconにはaaa.diconに含まれるコンポーネントと同じ名前のコンポーネント定義を含めないようにして下さい。</p>
<p>++aaa.diconというファイルがあると、aaa.diconのコンポーネント定義<em>の前に</em>コンポーネント定義が追加されます。</p>
</div>
<div class="section" id="e3819de381aee4bb96">
<h3><a name="e3819de381aee4bb96">その他</a></h3>
<ul>
<li>diconのパス名に「+」が含まれる場合は上記のような振る舞いはしません。例えばaaa+bbb.diconに関して、aaa+bbb+.diconで置き換えるようなことはしません。</li>
<li>[s2-classbuilder-0.0.8以前] diconファイルの置き換えの場合以外では、includeタグなどの「componentタグ以外のもの」は無視されます。例えばaaa++.diconにincludeタグを書いていたとしても、それはaaa.diconに追加されません。</li>
</ul>
</div>
</div>
</div>
</div>
        </div>
      
    </div>
    </div>
    <div class="footer-delimiter"></div>
    <div id="pane.footer" class="pane footer">
      <div id="org.seasar.kvasir.cms.pop.poweredByPop-1" class="pop org.seasar.kvasir.cms.pop.poweredByPop">
        <div class="body">Powered by Kvasir/Sora</div>
      </div>
    </div>
  </body>
</html>
