<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ふたつの川うるおう日記</title>
	<atom:link href="http://jfut.integ.jp/feed/" rel="self" type="application/rss+xml" />
	<link>http://jfut.integ.jp</link>
	<description></description>
	<lastBuildDate>Wed, 20 Jan 2010 13:24:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>古いサーバでJDK 6 Update 18に更新したらタイムゾーンがJSTからGMTに変わった件と対処法</title>
		<link>http://jfut.integ.jp/2010/01/20/jdk-6-update-18-default-timezone-on-old-server/</link>
		<comments>http://jfut.integ.jp/2010/01/20/jdk-6-update-18-default-timezone-on-old-server/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 13:09:50 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Unkown]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=910</guid>
		<description><![CDATA[				
				とある古いサーバにインストールされているJDK 6 Update 17をJDK 6 Update 18に更新したらデフォルトのタイムゾーンがJSTからGMTに変わってしまいました。他のサーバでは問題なか [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content1" class="fswiki_content">
				<p>とある古いサーバにインストールされているJDK 6 Update 17をJDK 6 Update 18に更新したらデフォルトのタイムゾーンがJSTからGMTに変わってしまいました。<strong>他のサーバでは問題なかったのでこの古いサーバ限定の問題です。</strong></p>
				<p>状況を確認するためにサンプルコードを動かして確認しました。</p>
				<pre>import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        System.out.println(new java.util.Date());
    }
}
</pre>
				<p>実行してみます。</p>
				<pre># /usr/local/java/jdk1.6.0_17/bin/java DateTest
Wed Jan 20 21:42:44 JST 2010
# /usr/local/java/jdk1.6.0_18/bin/java DateTest
Wed Jan 20 12:42:56 GMT 2010
</pre>
				<p>というようにJDK 6 Update 17ではJSTなのにJDK 6 Update 18だとGMTになってしまいました。<a href="http://sel.ist.osaka-u.ac.jp/~m-itii/php/d/soliloquy.php?mode=daily&#038;date=2007%2F3%2F15">JVMのタイムゾーンがGMTになる 追記</a>と同じ原因のようで、/etc/localtime を調べてみたら /usr/share/zoneinfo/Asia/Tokyo と違うものでした。</p>
				<pre># ls -al /etc/localtime
-rw-r--r--  1 root root 73 Feb 26  2004 /etc/localtime
# ls -al /usr/share/zoneinfo/Asia/Tokyo
-rw-r--r--  2 root root 125 Mar 22  2006 /usr/share/zoneinfo/Asia/Tokyo
</pre>
				<p>というわけで、コピーして直します。</p>
				<pre>cp -a /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
</pre>
				<p>再び確認します。</p>
				<pre># /usr/local/java/jdk1.6.0_17/bin/java DateTest
Wed Jan 20 21:49:58 JST 2010
# /usr/local/java/jdk1.6.0_18/bin/java DateTest
Wed Jan 20 21:50:07 JST 2010
</pre>
				<p>無事直りました。良かった良かった。</p>
				<p>/etc/localtime が食い違ってのは、/etc/localtimeのタイムスタンプが2004-02-26 という古いサーバなので、インストール時に何かミスったか、これまでの運用の中での更新で何かがおきたのかなと思います。ただ、JDK更新したらいきなしWEBアプリが書き込むデータのタイムスタンプが9時間ずれ初めてたのでビックリしました。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/20/jdk-6-update-18-default-timezone-on-old-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cubbyのアクションクラスで定数を利用してリファクタリングしやすくする</title>
		<link>http://jfut.integ.jp/2010/01/11/cubby-actionclass-with-static-field/</link>
		<comments>http://jfut.integ.jp/2010/01/11/cubby-actionclass-with-static-field/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 03:10:12 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=884</guid>
		<description><![CDATA[				
				Cubbyのアクションクラスにはバリデーションルールの定義時やアノテーションに文字列が登場します。文字列で指定しているのでリファクタリングする時に修正漏れなどがおきそうでちょっと怖いです。そこで、それら [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content4" class="fswiki_content">
				<p>Cubbyのアクションクラスにはバリデーションルールの定義時やアノテーションに文字列が登場します。文字列で指定しているのでリファクタリングする時に修正漏れなどがおきそうでちょっと怖いです。そこで、それらの文字列を定数にしてしまえば、少しだけリファクタリングしやすくなりそうです。また、IDE上での参照元・参照先への移動や使われているかどうかのチェックも簡単になります。</p>
				<p>例えば、次のようなアクションクラスがあるとします。</p>
				<pre>@Path(&quot;hoge&quot;)
public class HogeAction extends AbstractAction {

    @Binding(bindingType = BindingType.NONE)
    protected ValidationRules processApplyValidation =
        new DefaultValidationRules() {
            @Override
            public void initialize() {
                add(&quot;token&quot;, new TokenValidator());
                add(&quot;name&quot;, new TokenValidator());
                add(&quot;comment&quot;, new TokenValidator());
            }
        };

    @RequestParameter
    public HogeParameterDto hogeParameterDto;

    @Path(&quot;process&quot;)
    @Accept(POST)
    @OnSubmit(&quot;apply&quot;)
    @Form(&quot;hogeParameterDto&quot;)
    @Validation(rules = &quot;processApplyValidation&quot;, errorPage = &quot;/hoge/edit.html&quot;)
    public ActionResult processApply() {
        return new Forward(&quot;/hoge/edit.html&quot;);
    }

}
</pre>
				<p>これを次のようにします。</p>
				<pre>import static org.example.test.entity.names.Names.*;

@Path(&quot;hoge&quot;)
public class HogeAction extends AbstractAction {

    private static final String processApplyValidationName
        = &quot;processApplyValidation&quot;;
    @Binding(bindingType = BindingType.NONE)
    protected ValidationRules processApplyValidation =
        new DefaultValidationRules() {
            @Override
            public void initialize() {
                add(TOKEN, new TokenValidator());
                add(post().name().toString(), new TokenValidator());
                add(post().comment().toString(), new TokenValidator());
            }
        };

    private static final String hogeParameterDtoName = &quot;hogeParameterDto&quot;;
    @RequestParameter
    public HogeParameterDto hogeParameterDto;

    @Path(&quot;process&quot;)
    @Accept(POST)
    @OnSubmit(&quot;apply&quot;)
    @Form(hogeParameterDtoName)
    @Validation(rules = processApplyValidationName, errorPage = &quot;/hoge/edit.html&quot;)
    public ActionResult processApply() {
        return new Forward(&quot;/hoge/edit.html&quot;);
    }

}
</pre>
				<p>変更した箇所を説明します。</p>
				</div>
				<p><span id="more-884"></span></p>
				<div id="fswiki_content5" class="fswiki_content">
				<h3> 説明</h3>
				<h4> S2JDBC-GenのNamesクラス内のstatic関数をStatic Import</h4>
				<pre>import static org.example.test.entity.names.Names.*;
</pre>
				<p>S2JDBC-Gen 2.4.40で導入されたNamesクラス内のstatic関数をStatic Importします。バリデーションルールのinitialize()内で使います。</p>
				<ul>
				<li> 参考: <a href="http://d.hatena.ne.jp/taedium/20091008/p1">Namesクラス と SqlFilesクラス &#8211; taediumの日記</a></li>
				</ul>
				<h4> バリデーションルールの変数名を定数定義</h4>
				<pre>private static final String processApplyValidationName = &quot;processApplyValidation&quot;;
</pre>
				<p>バリデーションルールprocessApplyValidationの変数名を表す定数です。アクションメソッドの @Validation にはここで指定した定数を使うようにすることでリファクタリングしやすくします。</p>
				<h4> バリデーションルール: TokenValidatorに使用するパラメータの定数化と使用</h4>
				<pre>add(TOKEN, new TokenValidator());
</pre>
				<p>Cubbyで標準提供されている2重サブミットを検証するTokenValidatorで仕様するパラメータ名を指定します。TOKEN は AbstractAction で次のように定義しておきます。</p>
				<pre>protected static final String TOKEN = &quot;token&quot;;
</pre>
				<p>この例では、パラメータ名に &quot;token&quot; を使用しています。</p>
				<h4> バリデーションルール: リクエストパラメータに定数を使用</h4>
				<pre>add(post().name().toString(), new TokenValidator());
add(post().comment().toString(), new TokenValidator());
</pre>
				<p>本来NamesクラスからStatic Importした静的関数はS2JDBCでjoinやwhereで指定するのに使うのに便利な関数ですが、ここではその文字列表現を流用してパラメータの指定に使用します。例ではテーブルpostが持つ属性名nameとcommentの文字列表現を流用しています。</p>
				<p>リクエストパラメータ名とテーブルの属性名は一緒なことが多いと思うので、多くの場合で流用できると思います。これでS2JBDC同様バリデーションの項目名もリファクタリングしやすくなります。</p>
				<h4> リクエストパラメータのバインド先の変数名を定数定義</h4>
				<pre>private static final String hogeParameterDtoName = &quot;hogeParameterDto&quot;;
</pre>
				<p>バリデーションルールの変数名同様、リクエストパラメータのバインド先hogeParameterDtoの変数名を表す定数です。アクションメソッドの @Form にはここで指定した定数を使うようにすることでリファクタリングしやすくします。</p>
				<h4> @Form で定数を使用する</h4>
				<pre>...
@Form(hogeParameterDtoName)
...
public ActionResult processApply() {
    ...
}
</pre>
				<p>先に定義した リクエストパラメータのバインド先hogeParameterDtoの変数名 をアクションメソッドに対するアノテーション @Form に指定します。</p>
				<h4> @Validation で定数を使用する</h4>
				<pre>...
@Validation(rules = processApplyValidationName, errorPage = &quot;/hoge/edit.html&quot;)
...
public ActionResult processApply() {
    ...
}
</pre>
				<p>先に定義した バリデーションルールprocessApplyValidationの変数名 をアクションメソッドに対するアノテーション @Validation に指定します。</p>
				<hr />
				<p>以上です。</p>
				<p>やろうと思えば、@Path や @OnSubmit などでも定数を使えますがそこは定数にしていません。@OnSubmitはHTMLファイルの中身と対応するので定数化してもリファクタリングのしやすさには影響しないですが、@PathはHTMLファイル名の変更や移動の時に使えるので定数化しても良いかもしれないですね。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/11/cubby-actionclass-with-static-field/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cubbyでアクションメソッドに指定するアノテーションの順番</title>
		<link>http://jfut.integ.jp/2010/01/10/cubby-actionmethod-annotation-order/</link>
		<comments>http://jfut.integ.jp/2010/01/10/cubby-actionmethod-annotation-order/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 03:41:33 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=855</guid>
		<description><![CDATA[				
				しばらく時間が空いてからCubbyを使ったWEBアプリケーションを書く時に、アクションメソッドに指定するアノテーションの順番どうだったかなっと考えるのでまとめます。アノテーションなので適当な順番に書いて [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content7" class="fswiki_content">
				<p>しばらく時間が空いてからCubbyを使ったWEBアプリケーションを書く時に、アクションメソッドに指定するアノテーションの順番どうだったかなっと考えるのでまとめます。アノテーションなので適当な順番に書いても問題なく動作しますが、処理の流れを考えて次の順番で指定しています。</p>
				<ol>
				<li> URIを指定: @Path</li>
				<li> HTTPメソッドを指定: @Accept</li>
				<li> 同一URIへのPOST時などに実行するアクションメソッドを変える指定: @OnSubmit</li>
				<li> リクエストパラメータのバインド先を指定: @Form</li>
				<li> リクエストパラメータのバリデーションを指定: @Validation</li>
				</ol>
				<pre>@Path(&quot;hoge&quot;)
public class HogeAction extends AbstractAction {
    ...
    @Path(&quot;process&quot;)
    @Accept(POST)
    @OnSubmit(&quot;apply&quot;)
    @Form(&quot;hogeParameterDto&quot;)
    @Validation(rules = &quot;processApplyValidation&quot;, errorPage = &quot;/hoge/edit.html&quot;)
    public ActionResult processApply() {
        return new Forward(&quot;/hoge/edit.html&quot;);
    }
    ...
}
</pre>
				<ul>
				<li> 参考: <a href="http://cubby.seasar.org/20x/action.html">Cubby Project &#8211; アクション</a></li>
				</ul>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/10/cubby-actionmethod-annotation-order/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JIRA 4.xと新しいPlugin機構</title>
		<link>http://jfut.integ.jp/2010/01/04/jira4-and-new-plugin-infrastructure/</link>
		<comments>http://jfut.integ.jp/2010/01/04/jira4-and-new-plugin-infrastructure/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 05:44:31 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Seasar]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=822</guid>
		<description><![CDATA[				
				Seasarプロジェクトでも利用しているJIRA のライセンスを去年の10月に自分用に購入しました。JIRAを開発しているAtlassian社が10ユーザまで利用できるGet Started for $ [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content10" class="fswiki_content">
				<p><a href="https://www.seasar.org/issues/">Seasarプロジェクトでも利用しているJIRA</a> のライセンスを去年の10月に自分用に購入しました。JIRAを開発している<a href="http://www.atlassian.com/">Atlassian社</a>が10ユーザまで利用できるGet Started for $10というライセンスを始めたので思わず買いました。JIRA 4.0になって、JIRA 3.x以前にあったエディションの違いが無くなり、$10でEnterpriseエディションが使えるというのは破格です。JIRA 3.xまではLDAPサポートにEnterprise以上が必要でとても買える金額では無かったため嬉しいです。また、このライセンスの購入費用は全額 <a href="http://www.roomtoread.org/">Room to Read</a> に寄付されるプログラムになっています。</p>
				<p>日本円で購入したい場合は、Atlassian社のOfficial Atlassian Partnerである <a href="http://www.ricksoft.jp/">リックソフト株式会社</a> が1,050 円で販売されています。</p>
				<ul>
				<li> <a href="http://www.atlassian.com/software/jira/">Bug Tracking, Issue Tracking &amp; Project Management Software &#8211; JIRA</a> (Atlassian社)</li>
				<li> <a href="http://www.ricksoft.jp/product/atlassian/at_price">アトラシアン(Atlassian)製品の価格と購入（オンライン販売）</a> (リックソフト株式会社)</li>
				</ul>
				<p>そんなわけで、だいぶ前置置きが長くなりましたが、自分用にJIRAの環境を作りました。購入当初JIRA 4.0には <a href="http://confluence.atlassian.com/display/JIRAKB/Gadgets+do+not+display+correctly+after+upgrade+to+JIRA+4.0">新しく導入されたガジェットの仕組みがSSL環境で上手く動かない問題</a> があったので、使い始めたのはこの問題がJIRA側で解決した4.0.1からです。</p>
				<p>ただ、まだ問題があって、Seasarプロジェクトで利用していた3.xのインストール手順でwarファイルを作成し、Tomcatにデプロイするとエラーがでて上手く起動しないのです。いろいろ試してみると自分で追加していたPluginを全部外すと起動しました。そんなことをつぶやいていたらリックソフトのohnukiさんがコンタクトをくださっていろいろやりとりした結果、原因が判明しました。</p>
				<p>原因は、JIRA 4.0からOSGiを使用した新しいPlugin機構(Version 2)がサポートされ、JIRA 3.xの時とPluginの配置の仕方が変わっていたことでした。これに気付かず、JIRA 3.xの導入の仕方で入れていたので上手くPluginがロードされなかったようです。一応、互換性のため、古いPluginの配置方法(Version 1)も使えるようですが、Tomcat 5.5.28では動作するものの、Tomcat 6.0.20では動作せず、それでエラーが出ていました。</p>
				<ul>
				<li> 参考: <a href="http://confluence.atlassian.com/display/JIRA/Managing+JIRA%27s+Plugins">Managing JIRA&#8217;s Plugins</a>
				<ul>
				<li> Version 1: atlassian-jira/WEB-INF/lib/ 以下に配置</li>
				<li> Version 2: jira.home/plugins/installed-plugins/ 以下に配置
				<ul>
				<li> jira.home はJIRA 4.0から導入されたホームディレクトリ指定</li>
				</ul>
				</ul>
				</ul>
				<p>というわけで、無事やっとPluginも使えるようになりました。ohnukiさんありがとうございました！</p>
				<p>Pluginが使えるようになったので、SeasarプロジェクトのJIRAも近日アップグレードのテストをし、アナウンスを出した後に現在の3.13.5から4.0.1に更新したいと思います。</p>
				<p>以下、何かの参考までにVersion 1 + Tomcat 6.0.20で起動した時の例外全文を記載しておきます。</p>
				</div>
				<p><span id="more-822"></span></p>
				<div id="fswiki_content11" class="fswiki_content">
				<h3> 起動時のエラー内容</h3>
				<ul>
				<li> 環境
				<ul>
				<li> Sun JDK 1.6.0_17 64-Bit Server VM</li>
				<li> JIRA 4.0.1 + Version 1の方法でのPlugin導入
				<ul>
				<li> JIRA Calendar Plugin 1.12</li>
				<li> JIRA Charting Plugin 1.5</li>
				</ul>
				<li> Tomcat 6.0.20</li>
				</ul>
				</ul>
				<pre>2010/01/04 13:18:33 org.apache.catalina.core.StandardContext listenerStart
致命的: クラス com.atlassian.jira.upgrade.ConsistencyLauncher のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です
java.lang.ExceptionInInitializerError
	at org.objectweb.jotm.Current.&lt;init&gt;(Current.java:121)
	at org.objectweb.jotm.UserTransactionFactory.getObjectInstance(UserTransactionFactory.java:45)
	at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:140)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.ofbiz.core.entity.transaction.JNDIFactory.getUserTransaction(JNDIFactory.java:109)
	at org.ofbiz.core.entity.TransactionFactory.getUserTransaction(TransactionFactory.java:91)
	at org.ofbiz.core.entity.TransactionUtil.getStatus(TransactionUtil.java:80)
	at org.ofbiz.core.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:369)
	at org.ofbiz.core.entity.jdbc.SQLProcessor.prepareStatement(SQLProcessor.java:416)
	at org.ofbiz.core.entity.GenericDAO.selectListIteratorByCondition(GenericDAO.java:1024)
	at org.ofbiz.core.entity.GenericDAO.selectByAnd(GenericDAO.java:595)
	at org.ofbiz.core.entity.GenericHelperDAO.findByAnd(GenericHelperDAO.java:134)
	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:792)
	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:777)
	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:754)
	at com.opensymphony.module.propertyset.ofbiz.OFBizPropertySet.getKeys(OFBizPropertySet.java:87)
	at com.opensymphony.module.propertyset.AbstractPropertySet.getKeys(AbstractPropertySet.java:292)
	at com.atlassian.jira.propertyset.PropertySetCache.bulkLoad(PropertySetCache.java:301)
	at com.atlassian.jira.propertyset.JiraCachingPropertySet.init(JiraCachingPropertySet.java:834)
	at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:45)
	at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:22)
	at com.atlassian.jira.config.properties.PropertiesManager.loadPropertySet(PropertiesManager.java:83)
	at com.atlassian.jira.config.properties.PropertiesManager.&lt;init&gt;(PropertiesManager.java:29)
	at com.atlassian.jira.config.properties.PropertiesManager.getInstance(PropertiesManager.java:39)
	at com.atlassian.jira.config.properties.ApplicationPropertiesImpl.getPropertiesManager(ApplicationPropertiesImpl.java:69)
	at com.atlassian.jira.config.properties.ApplicationPropertiesImpl.getString(ApplicationPropertiesImpl.java:117)
	at com.atlassian.jira.config.properties.ApplicationPropertiesImpl.getDefaultBackedString(ApplicationPropertiesImpl.java:143)
	at com.atlassian.jira.ComponentManager.registerExtensions(ComponentManager.java:299)
	at com.atlassian.jira.ComponentManager.initialise(ComponentManager.java:195)
	at com.atlassian.jira.ComponentManager.&lt;init&gt;(ComponentManager.java:181)
	at com.atlassian.jira.ComponentManager.&lt;clinit&gt;(ComponentManager.java:159)
	at com.atlassian.jira.upgrade.ConsistencyLauncher.launchConsistencyChecker(ConsistencyLauncher.java:63)
	at com.atlassian.jira.upgrade.ConsistencyLauncher.contextInitialized(ConsistencyLauncher.java:42)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed. (Caused by org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed.) (Caused by org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed. (Caused by org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed.))
	at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
	at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:370)
	at org.objectweb.jotm.TraceTm.&lt;clinit&gt;(TraceTm.java:47)
	... 65 more
Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed. (Caused by org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed.)
	at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)
	at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
	... 68 more
Caused by: org.apache.commons.logging.LogConfigurationException: Invalid class loader hierarchy.  You have more than one version of 'org.apache.commons.logging.Log' visible, which is not allowed.
	at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:385)
	... 69 more
2010/01/04 13:18:33 org.apache.catalina.core.StandardContext listenerStart
致命的: クラス com.atlassian.jira.upgrade.UpgradeLauncher のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です
java.lang.NoClassDefFoundError: Could not initialize class com.atlassian.jira.ComponentManager
	at com.atlassian.jira.upgrade.UpgradeLauncher.getJiraLicenseService(UpgradeLauncher.java:215)
	at com.atlassian.jira.upgrade.UpgradeLauncher.checkLicenseIsValid(UpgradeLauncher.java:145)
	at com.atlassian.jira.upgrade.UpgradeLauncher.checkIfUpgradeNeeded(UpgradeLauncher.java:85)
	at com.atlassian.jira.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:49)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2010/01/04 13:18:33 org.apache.catalina.core.StandardContext listenerStart
致命的: クラス com.atlassian.jira.scheduler.JiraSchedulerLauncher のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です
java.lang.NoClassDefFoundError: Could not initialize class com.atlassian.jira.ComponentManager
	at com.atlassian.jira.ManagerFactory.getApplicationProperties(ManagerFactory.java:200)
	at com.atlassian.jira.scheduler.JiraSchedulerLauncher.canCreateScheduler(JiraSchedulerLauncher.java:75)
	at com.atlassian.jira.scheduler.JiraSchedulerLauncher.proceedIfAllClear(JiraSchedulerLauncher.java:45)
	at com.atlassian.jira.scheduler.JiraSchedulerLauncher.contextInitialized(JiraSchedulerLauncher.java:29)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2010/01/04 13:18:33 org.apache.catalina.core.StandardContext listenerStop
致命的: クラス com.atlassian.jira.startup.JiraStartupChecklistContextListener のリスナインスタンスにコンテキスト破棄イベントを送信中の例外です
java.lang.NoClassDefFoundError: Could not initialize class com.atlassian.jira.ComponentManager
	at com.atlassian.jira.startup.JiraStartupChecklistContextListener.unlockJiraHome(JiraStartupChecklistContextListener.java:75)
	at com.atlassian.jira.startup.JiraStartupChecklistContextListener.contextDestroyed(JiraStartupChecklistContextListener.java:62)
	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3973)
	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4577)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4474)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
</pre>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/04/jira4-and-new-plugin-infrastructure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WP FreeStyle Wiki 0.1</title>
		<link>http://jfut.integ.jp/2010/01/01/wp-fswiki/</link>
		<comments>http://jfut.integ.jp/2010/01/01/wp-fswiki/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 17:00:47 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Diary]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=686</guid>
		<description><![CDATA[				
				tDiaryからWordPressに乗り換え、これから書いていくのに標準のエディタで書くのがどうしても面倒だったので、一番慣れ親しんでいるFreeStyle Wikiの記法で書けるPlugin、WP F [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content14" class="fswiki_content">
				<p>tDiaryからWordPressに乗り換え、これから書いていくのに標準のエディタで書くのがどうしても面倒だったので、一番慣れ親しんでいる<a href="http://fswiki.org/">FreeStyle Wiki</a>の記法で書けるPlugin、WP FreeStyle Wikiを作りました。作ったといってもかなりの強引なことをしていてFreeStyle Wikiを丸ごと中で持っており、そこへ外部コマンドで投げてレンダリングしているだけです。</p>
				<p>これは、大晦日の31日にWordPress Pluginをなんとなく見ていたところ、<a href="http://blog.makotokw.com/">makotokw</a>さん(ありがとうございます！)が作られている<a href="http://wordpress.org/extend/plugins/pukiwiki-for-wordpress/">PukiWiki for WordPress</a>というPluginを見つけて、ソースを見てみたらPukiWikiを丸ごと中に持っていてそんな手があったかと、そのまま勢いで年が明ける前にFreeStyle Wiki用に改造したものです。</p>
				<p>以下に置いてありますので使いたい方がいましたらご自由にお使いください。ライセンスは中に持っているFreeStyle Wikiと同じGPLです。</p>
				<ul>
				<li> [2010-01-01]: <a href="http://jfut.integ.jp/linux/wordpress/">WP FreeStyle Wiki 0.1</a>
				<ul>
				<li> 最初のリリース、FreeStyle Wiki 3.6.3内蔵、そのうち中身を整理して<a href="http://wordpress.org/extend/plugins/">Plugin Directory</a>に登録するかもしれません</li>
				</ul>
				<li> [2010-01-01]: <a href="http://jfut.integ.jp/linux/wordpress/">WP FreeStyle Wiki 0.1.1</a> リリース
				<ul>
				<li> <a href="http://www.kenichimaehashi.com/">Kenichi Maehashiさん</a>からいただいたパッチを適用しました</li>
				</ul>
				</ul>
				<h3> 記法サンプル</h3>
				<p>以下、記法のサンプルです。 &#91;fswiki] と &#91;/fswiki] で囲んだ部分がFreeStyle Wikiで処理されます。</p>
				</div>
				<p><span id="more-686"></span></p>
				<div id="fswiki_content15" class="fswiki_content">
				<h4> ソース</h4>
				<pre>&#91;fswiki]
!!見出し

行を!ではじめると見出しになります。
見出しは3レベルありますが、!!!は記事名と被るので使わない方が良いかもしれません。

!!中見出し
!小見出し

!!テキスト装飾

シングルクォート2つで囲むと''イタリック''になります。
シングルクォート3つで囲むと'''ボールド'''になります。
これは==打ち消し線==です。
これは__下線__です。

!!引用

&quot;&quot;これは引用です。
&quot;&quot;これも引用です。

!!説明

:項目:説明文

::項目
:::説明文は複数行にわけて書くこともできます。
:::こんな感じで。

!!項目

行を*ではじめるとリストになります。
リストは*の個数に応じて3段階までネストすることができます。

*項目1-1
**項目2-1
**項目2-2
***項目3-1
*項目1-2
**項目2-3

行を+ではじめると番号付きリストになります。

+番号付き項目1
++番号付き項目1-1
+番号付き項目2
+番号付き項目3

!!リンク

*http://www.yahoo.co.jp/
*[Google|http://www.google.co.jp/]

!!テーブル

CSVはテーブルになります。1行目がヘッダになります。

,1-1,1-2,1-3
,2-1,2-2,2-3

セル内にカンマを含めたい場合は値をダブルクォートで囲みます。
また、ダブルクォートで囲んだセルにダブルクォートを表示したい場合はダブルクォートを2つ続けて記述します。

,カンマ,ダブルクォート
,&quot;セルの中にカンマ,を表示&quot;,&quot;セルの中にダブルクォート&quot;&quot;を表示&quot;

!!整形済テキスト

行頭をスペースまたはタブではじめると整形済テキストとして扱われます。

これは整形済テキストです。
入力したとおりに表示されます。

{{pre
preタグバージョン
これは整形済テキストです。
入力したとおりに表示されます。
}}

!!水平線

行頭に----と書くと水平線になります。

----

!!コメント

行を//ではじめるとその行はコメントとみなされます。コメント行は一切出力されません。

//これはコメントになります。画面には出力されません。
&#91;/fswiki]
</pre>
				<h4> レンダリング結果</h4>
				<p>上記のソースが下記のようになります。</p>
				<h3>見出し</h3>
				<p>行を!ではじめると見出しになります。見出しは3レベルありますが、!!!は記事名と被るので使わない方が良いかもしれません。</p>
				<h3>中見出し</h3>
				<h4>小見出し</h4>
				<h3>テキスト装飾</h3>
				<p>シングルクォート2つで囲むと<em>イタリック</em>になります。シングルクォート3つで囲むと<strong>ボールド</strong>になります。これは<del>打ち消し線</del>です。これは<ins>下線</ins>です。</p>
				<h3>引用</h3>
				<blockquote><p>これは引用です。</p>
				<p>これも引用です。</p>
				</blockquote>
				<h3>説明</h3>
				<dl>
				<dt>項目</dt>
				<dd>説明文</dd>
				</dl>
				<dl>
				<dt>項目</dt>
				<dd>説明文は複数行にわけて書くこともできます。こんな感じで。</dd>
				</dl>
				<h3>項目</h3>
				<p>行を*ではじめるとリストになります。リストは*の個数に応じて3段階までネストすることができます。</p>
				<ul>
				<li>項目1-1
				<ul>
				<li>項目2-1</li>
				<li>項目2-2
				<ul>
				<li>項目3-1</li>
				</ul>
				</li>
				</ul>
				<li>項目1-2
				<ul>
				<li>項目2-3</li>
				</ul>
				</ul>
				<p>行を+ではじめると番号付きリストになります。</p>
				<ol>
				<li>番号付き項目1
				<ol>
				<li>番号付き項目1-1</li>
				</ol>
				<li>番号付き項目2</li>
				<li>番号付き項目3</li>
				</ol>
				<h3>リンク</h3>
				<ul>
				<li><a href="http://www.yahoo.co.jp/">http://www.yahoo.co.jp/</a></li>
				<li><a href="http://www.google.co.jp/">Google</a></li>
				</ul>
				<h3>テーブル</h3>
				<p>CSVはテーブルになります。1行目がヘッダになります。</p>
				<table>
				<tr>
				<th>1-1</th>
				<th>1-2</th>
				<th>1-3</th>
				</tr>
				<tr>
				<td>2-1</td>
				<td>2-2</td>
				<td>2-3</td>
				</tr>
				</table>
				<p>セル内にカンマを含めたい場合は値をダブルクォートで囲みます。また、ダブルクォートで囲んだセルにダブルクォートを表示したい場合はダブルクォートを2つ続けて記述します。</p>
				<table>
				<tr>
				<th>カンマ</th>
				<th>ダブルクォート</th>
				</tr>
				<tr>
				<td>セルの中にカンマ,を表示</td>
				<td>セルの中にダブルクォート&quot;を表示</td>
				</tr>
				</table>
				<h3>整形済テキスト</h3>
				<p>行頭をスペースまたはタブではじめると整形済テキストとして扱われます。</p>
				<p>これは整形済テキストです。入力したとおりに表示されます。</p>
				<pre>preタグバージョン
これは整形済テキストです。
入力したとおりに表示されます。
</pre>
				<h3>水平線</h3>
				<p>行頭に&#8212;-と書くと水平線になります。</p>
				<hr />
				<h3>コメント</h3>
				<p>行を//ではじめるとその行はコメントとみなされます。コメント行は一切出力されません。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/01/wp-fswiki/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>tDiaryからWordPressへ</title>
		<link>http://jfut.integ.jp/2010/01/01/tdiary-to-wordpress/</link>
		<comments>http://jfut.integ.jp/2010/01/01/tdiary-to-wordpress/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 15:59:54 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=682</guid>
		<description><![CDATA[				
				新年を向かえtDiaryからWordPressへ乗り換えました。
				最近WordPressで何かすることが多いので自分のところもWordPressにしました。tDiaryではWikiスタイル +  [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content17" class="fswiki_content">
				<p>新年を向かえtDiaryからWordPressへ乗り換えました。</p>
				<p>最近WordPressで何かすることが多いので自分のところもWordPressにしました。tDiaryではWikiスタイル + 適当な書き方で書いていたので、自分の書き方に併せて移行するスクリプトを書きました。移行漏れなどまだ一部不具合があるかもしれませんがちょくちょく直していきます。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/01/tdiary-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>あけましておめでとうございます</title>
		<link>http://jfut.integ.jp/2010/01/01/happy-new-year/</link>
		<comments>http://jfut.integ.jp/2010/01/01/happy-new-year/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 15:56:19 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://jfut.integ.jp/?p=680</guid>
		<description><![CDATA[				
				本年もどうぞよろしくお願い申し上げますm(_ _)m。
				
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content19" class="fswiki_content">
				<p>本年もどうぞよろしくお願い申し上げますm(_ _)m。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2010/01/01/happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DellのサーバマシンのBIOS設定をLinux上から行う方法</title>
		<link>http://jfut.integ.jp/2009/11/12/dell-bios-on-linux/</link>
		<comments>http://jfut.integ.jp/2009/11/12/dell-bios-on-linux/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/11/dell%e3%81%ae%e3%82%b5%e3%83%bc%e3%83%90%e3%83%9e%e3%82%b7%e3%83%b3%e3%81%aebios%e8%a8%ad%e5%ae%9a%e3%82%92linux%e4%b8%8a%e3%81%8b%e3%82%89%e8%a1%8c%e3%81%86%e6%96%b9%e6%b3%95/</guid>
		<description><![CDATA[				
				
				 要約: activateCmosToken 0xXXXX でDellのサーバマシンのBIOS設定は変えられます (但し、サポート外)
				
				既に CentOS 5.x をインスト [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content21" class="fswiki_content">
				<ul>
				<li> 要約: activateCmosToken 0xXXXX でDellのサーバマシンのBIOS設定は変えられます (<em>但し、サポート外</em>)</li>
				</ul>
				<p>既に CentOS 5.x をインストール済みの Dell PowerEdge 830 サーバで、OS上でメモリがなぜか256MBしか認識されていませんでした。何か壊れてるのかと思い、既にインストールしてあったDell提供のサーバ管理ソフトウェア OpenManage でハードウェア情報を確認してみると、1GBのメモリが2枚認識されており、合計2GBと表示されていました。</p>
				<p>そこで調べてみるとDellのサーバマシンのBIOSには、巨大なメモリが見えるとインストールが失敗するようなOSインストール用に OS Install Mode という設定があり、これが Enable になっているとメモリが256MBしか見えないようにハード的に制約を加えるようです。</p>
				<p>というわけで、BIOSの設定を変えれば良いことが判りました。でも、このサーバは遠隔地に置いてあって、現地に行くのがちょっと大変です。こういう時にリモートKVMが使える別売りのDell Remote Access Controller(DRAC)が入っていれば、BIOS画面を直に見ながら簡単に設定できるのですが、残念ながらこのマシンにはDRACは入っていませんでした。というわけで、Linux上からBIOSの設定を変えられないのかなと調べたら変えられました。方法としては次の2つあります。</p>
				<ol>
				<li> OpenManage 上のBIOS設定で変更</li>
				<li> smbios に含まれるコマンドで変更</li>
				</ol>
				<p>1は、WEB UIから設定する方法ですが、設定できる項目に限りがありました。基本的な項目以外は設定できないと思って良いでしょう。今回設定を変えたかった OS Install Mode も設定できませんでした。以下に、PowerEdge 830 で設定可能な項目と設定されていた値を記しておきます。</p>
				<ul>
				<li> 一般
				<ul>
				<li> Num Lock: オン</li>
				<li> Diskette: 自動</li>
				<li> NIC: PXE で有効</li>
				<li> USB: BIOS サポートありで有効</li>
				<li> IDE: 自動</li>
				<li> Boot Sequence: デバイスリスト</li>
				<li> Speaker: オン</li>
				<li> CPU Logical Processor (HyperThreading): 有効</li>
				<li> AC Power Recovery Mode: 最終</li>
				<li> Embedded SATA Controller: ATA</li>
				<li> SATA Port 0: 自動</li>
				<li> SATA Port 1: 自動</li>
				<li> SATA Port 2: オフ</li>
				<li> SATA Port 3: オフ</li>
				<li> IDE Primary Drive 0: 自動</li>
				<li> IDE Primary Drive 1: オフ</li>
				<li> Demand-Based Power Management: 無効</li>
				</ul>
				<li> シリアル通信
				<ul>
				<li> Serial Port 1: 不明</li>
				<li> Console Redirection After Boot: 有効</li>
				<li> Console Redirection: シリアルポート 1</li>
				<li> Console Redirection Failsafe BAUD Rate: 19200</li>
				</ul>
				</ul>
				<p>OpenManage はyumで簡単にインストールできるので、上記で設定した項目があれば、OpenManage で設定するのが良いと思います。</p>
				<ul>
				<li> 参考: <a href="http://linux.dell.com/repo/hardware/latest/">Dell OMSA 6.1 Linux repository</a></li>
				</ul>
				<p>2は、コマンドラインから設定する方法です。smbios と libsmbios は、OpenManage を入れると一緒にインストールされるDellのサーバマシンのBIOSにアクセスするためのユーティリティ群です。</p>
				<ul>
				<li> <a href="http://linux.dell.com/files/libsmbios/main/cmdlinetools.html">Command-line tools summary</a></li>
				<li> <a href="https://fedorahosted.org/libsmbios/">libsmbios &#8211; Trac</a></li>
				</ul>
				<p>こちらはおそらくDellのサーバマシンに用意されているBIOSの設定項目すべてを設定できるのだと思います。ただし、BIOSの設定を変える activateCmosToken というコマンドは <em>Unsupported Binaries</em> に分類されています。<em>従って、この記事を読んで設定したらBIOSが壊れてマシンが起動しなくなることもあるかもしれません。そうなっても自分で責任とれる方以外は絶対に行わない方が良いでしょう。</em></p>
				<p>というわけで、設定の仕方です。設定を行うのはactivateCmosToken コマンドを使います。基本構文は次のとおりです。</p>
				<pre># /usr/sbin/activateCmosToken 0x&quot;Token Value&quot;
</pre>
				<p>Token Valueというのは、BIOS設定の項目とというる値に対してユニークに割り振られている値になります。Token Valueの一覧は以下にあります。先頭の項目がToken Valueになります。</p>
				<ul>
				<li> <a href="https://fedorahosted.org/libsmbios/browser/doc/token_list.csv">Token Value List</a></li>
				</ul>
				<p>見てみれば判りますが、よくあるBIOS設定項目、最新の技術に関する設定項目、そして、Dell独自の設定項目があります。</p>
				<p>現在の値を確認するには、isCmosTokenActive コマンドを使います。activateCmosToken 同様、引数に 0x&quot;Token Value&quot; を取ればいいだけです。出力の BITFIELD が 1 の場合、それが有効になっているという意味です。</p>
				<p>では具体的に OS Install Mode を設定を変え、設定が変わっているか確認します。Token Value List より、OS Install Mode のとりうる値は Enable と Disable の2つで、それぞれに 0&#215;008a と 0&#215;008b の Token Value が割り当てられています。片方の Token Value に対して activateCmosToken を実行すると、もう片方の Token Value の BITFIELD が無効を示す 0 に自動的に変わります。</p>
				<ul>
				<li> Limit System Memory (OS Install Mode) を無効化する方法</li>
				</ul>
				<pre># /usr/sbin/activateCmosToken 0x008b
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008b  Location 0x55 AND(fe) OR(0)  BITFIELD: 1
# /usr/sbin/isCmosTokenActive 0x008a
Running...
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008a  Location 0x55 AND(fe) OR(1)  BITFIELD: 0
# /usr/sbin/isCmosTokenActive 0x008b
Running...
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008b  Location 0x55 AND(fe) OR(0)  BITFIELD: 1
</pre>
				<ul>
				<li> Limit System Memory (OS Install Mode) 有効化する方法</li>
				</ul>
				<pre># /usr/sbin/activateCmosToken 0x008a
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008a  Location 0x55 AND(fe) OR(1)  BITFIELD: 1
# /usr/sbin/isCmosTokenActive 0x008a
Running...
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008a  Location 0x55 AND(fe) OR(1)  BITFIELD: 1
# /usr/sbin/isCmosTokenActive 0x008b
Running...
DMI type 0xd4  Handle 0xd401  Index Port 0x70  Data Port 0x71  Type 0x008b  Location 0x55 AND(fe) OR(0)  BITFIELD: 0
</pre>
				<p>以上です。設定はマシンを再起動すると反映されます。</p>
				<p>実際に上記の OS Install Mode を無効化する方法で実際に設定しました。その結果、次のように正常にメモリ2GB認識されるようになりました。</p>
				<ul>
				<li> 設定前</li>
				</ul>
				<pre># free
             total       used       free     shared    buffers     cached
Mem:        252164     232364      19800          0       9264     129620
-/+ buffers/cache:      93480     158684
Swap:      2097144        236    2096908
</pre>
				<ul>
				<li> 設定後</li>
				</ul>
				<pre># free
             total       used       free     shared    buffers     cached
Mem:       2059368     220968    1838400          0      10396     134724
-/+ buffers/cache:      75848    1983520
Swap:      2097144          0    2097144
</pre>
				<p>無事、サーバのある現地に行くことなく、BIOS設定を変えることができました。遠隔地にあるサーバマシンのBIOS設定をどうしてもリモートで変えたい場合は、試してみると良いかもしれません。ただし、サポート外の方法ですので、BIOSが壊れて起動しなくなるかもしれないことは覚えておいてくださいね！</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/11/12/dell-bios-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>仮想化環境をテストする環境</title>
		<link>http://jfut.integ.jp/2009/11/04/%e4%bb%ae%e6%83%b3%e5%8c%96%e7%92%b0%e5%a2%83%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b%e7%92%b0%e5%a2%83/</link>
		<comments>http://jfut.integ.jp/2009/11/04/%e4%bb%ae%e6%83%b3%e5%8c%96%e7%92%b0%e5%a2%83%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b%e7%92%b0%e5%a2%83/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/11/%e4%bb%ae%e6%83%b3%e5%8c%96%e7%92%b0%e5%a2%83%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b%e7%92%b0%e5%a2%83/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content22" class="fswiki_content">
				<p>最近XenとKVMのHVM環境を比較して試していますが、これまで1台のマシン環境を毎回壊して作り直していました。これが毎回面倒なため、現在、他の用途だったマシンを2台潰して再構築しています。</p>
				<p>仮想化環境をテストするのに、PVM環境をテストするなら適当な仮想化環境上(例: VMwareの上でXen PVM環境)で問題ないものの、HVM環境をテストするにはVT対応のCPUが載った実機が必要になるので面倒です。最近のCPUでないとVT対応していないし、VMをたくさん動かすにはメモリもたくさん必要で、そこらへんに余ってる古いマシンで試せず困りものです。</p>
				<p>最終的にあと2台用意してXenとKVMを2ノードづつ計4台の環境にしたいものの残り2台をどうしようかな。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/11/04/%e4%bb%ae%e6%83%b3%e5%8c%96%e7%92%b0%e5%a2%83%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b%e7%92%b0%e5%a2%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XenからKVMへ、ファイルからLVMへ</title>
		<link>http://jfut.integ.jp/2009/10/30/xen%e3%81%8b%e3%82%89kvm%e3%81%b8%e3%80%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%8b%e3%82%89lvm%e3%81%b8/</link>
		<comments>http://jfut.integ.jp/2009/10/30/xen%e3%81%8b%e3%82%89kvm%e3%81%b8%e3%80%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%8b%e3%82%89lvm%e3%81%b8/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/10/xen%e3%81%8b%e3%82%89kvm%e3%81%b8%e3%80%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%8b%e3%82%89lvm%e3%81%b8/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content23" class="fswiki_content">
				<p>この日記が動いてるサーバはまだXenですが、新しく仮想マシンをたくさん作る機会があったので、XenからKVMに乗り換えました。OSはdebootstrapになっていますが、virt-installで強引なことしているのでDebianじゃなくてCentOSに入れ替わっています。</p>
				<pre># gnt-instance list
Instance           Hypervisor OS          Primary_node    Status     Memory
admin1.example.org   kvm        debootstrap node1.example.org running      1.0G
admin2.example.org   kvm        debootstrap node2.example.org running      1.0G
cron1.example.org    kvm        debootstrap node1.example.org running      1.0G
db1.example.org      kvm        debootstrap node1.example.org running      1.0G
ftp1.example.org     kvm        debootstrap node2.example.org running      512M
irc1.example.org     kvm        debootstrap node1.example.org running      512M
lvs1.example.org     kvm        debootstrap node2.example.org running      512M
lvs2.example.org     kvm        debootstrap node1.example.org running      512M
mail1.example.org    kvm        debootstrap node1.example.org running      1.0G
mail2.example.org    kvm        debootstrap node2.example.org running      1.0G
nouse.example.org    kvm        debootstrap node2.example.org ADMIN_down      -
template.example.org kvm        debootstrap node1.example.org ADMIN_down      -
web1.example.org     kvm        debootstrap node2.example.org running      1.0G
web-ssl1.example.org kvm        debootstrap node1.example.org running      1.0G
web-ssl2.example.org kvm        debootstrap node2.example.org running      1.0G
</pre>
				<p>ディスクイメージもファイルからLVMへ乗り換えました。I/O的にも早くなりましたし、1仮想マシンに1LV割り当てたのでライブマイグレーションも出来るようになりました。</p>
				<pre># cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:1030228 nr:0 dw:1030228 dr:515856 al:499 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 2: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:684592 dw:684592 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 3: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:282556 nr:0 dw:282556 dr:432780 al:226 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 4: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:594628 dw:594628 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 5: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:281224 nr:0 dw:281224 dr:433112 al:242 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 6: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:281116 dw:281116 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 7: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:281048 nr:0 dw:281048 dr:432008 al:227 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 8: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:283900 dw:283900 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 9: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:286256 nr:0 dw:286256 dr:430084 al:242 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
10: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:281384 dw:281384 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
11: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:306608 nr:0 dw:306608 dr:532548 al:286 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

13: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:681680 nr:0 dw:681680 dr:823276 al:468 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
14: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:571076 dw:571076 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

100: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:48640 nr:0 dw:48640 dr:217 al:23 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
101: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:188
</pre>
				<p>今回KVMを使ってみて、XenとKVMでは、ホストマシン上でのCPU(uptime)とメモリ(free)の表示が違っていることに気付きました。</p>
				<p>Xenを使った時のuptimeの表示は、ホスト側も特殊なDom0 Kernelなのでゲスト側でCPUに負荷が掛かってもホスト側のuptimeにその負荷具合が反映されませんでした。一方、KVMの場合はゲストマシンは1プロセスとして見えるので、ゲスト側に負荷を与えるとホスト側のuptimeの表示に負荷具合が反映されました。</p>
				<p>Xenを使った時のfreeの表示は、dom_mem0を指定していない場合、割り当てたメモリ分だけtotalの値が減り、ホスト側では見えなくなります。一方、KVMの場合は起動時に指定したメモリを上限とし、実際にゲスト上でメモリが使用されるとホスト側のfreeが消費されてusedが増えていき、totalの値は常に物理メモリの量のままでした。つまり常に動的なバルーン機能が働いているような状態。もしくは、Sparseファイルのメモリ版のような状態。</p>
				<p>どちらが良いかは好みですが、ホスト側で状況を把握できるKVMの方が良い気がしています。あと、最近はXenよりKVMが推されているようなので今後はXenとKVMどちらでも良い場合はKVMを使っていこうと思っています。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/10/30/xen%e3%81%8b%e3%82%89kvm%e3%81%b8%e3%80%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%8b%e3%82%89lvm%e3%81%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 3.269 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-14 07:30:55 -->
