<?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>ふたつの川うるおう日記 &#187; Seasar</title>
	<atom:link href="http://jfut.integ.jp/category/seasar/feed/" rel="self" type="application/rss+xml" />
	<link>http://jfut.integ.jp</link>
	<description></description>
	<lastBuildDate>Tue, 22 Jun 2010 16:50:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<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_content2" 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_content3" 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_content5" 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_content8" 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_content9" 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>Seasar Conference 2009 Autumn 閉幕</title>
		<link>http://jfut.integ.jp/2009/09/13/seasar-conference-2009-autumn-%e9%96%89%e5%b9%95/</link>
		<comments>http://jfut.integ.jp/2009/09/13/seasar-conference-2009-autumn-%e9%96%89%e5%b9%95/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/09/seasar-conference-2009-autumn-%e9%96%89%e5%b9%95/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content10" class="fswiki_content">
				<p><a href="http://event.seasarfoundation.org/sc2009autumn/">Seasar Conference 2009 Autumn</a> お疲れ様でしたー。セッション資料は順次掲載されると思います。</p>
				<p>コミットログから気になっていたCMSのメール機能(Ymirセッション)とDomaを廊下からこっそり見たり、ちょうどよく最後だけ見れたmobyletのデモでGoogle App Engineへデプロイして動かしてるのを見て楽しんでいました。Blogopolisは途中まで見たものの、途中でお片づけで出てしまったので資料が掲載された続きみたいと思います。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/09/13/seasar-conference-2009-autumn-%e9%96%89%e5%b9%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>明日はSeasar Conference 2009 Autumn</title>
		<link>http://jfut.integ.jp/2009/09/11/%e6%98%8e%e6%97%a5%e3%81%afseasar-conference-2009-autumn/</link>
		<comments>http://jfut.integ.jp/2009/09/11/%e6%98%8e%e6%97%a5%e3%81%afseasar-conference-2009-autumn/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/09/%e6%98%8e%e6%97%a5%e3%81%afseasar-conference-2009-autumn/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content11" class="fswiki_content">
				<p>あっという間に日が過ぎて、明日は <a href="http://event.seasarfoundation.org/sc2009autumn/">Seasar Conference 2009 Autumn</a> です。</p>
				<p>Flexいじりたいなって思っているのでS2Flex2関係のセッションが気になっています。でも、1コマ目はこうげきりょくが2 あがったらしいYmirも気になります。</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/09/11/%e6%98%8e%e6%97%a5%e3%81%afseasar-conference-2009-autumn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seasar Conference 2009 Autumnのセッション公開</title>
		<link>http://jfut.integ.jp/2009/09/02/seasar-conference-2009-autumn%e3%81%ae%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%ac%e9%96%8b/</link>
		<comments>http://jfut.integ.jp/2009/09/02/seasar-conference-2009-autumn%e3%81%ae%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%ac%e9%96%8b/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/09/seasar-conference-2009-autumn%e3%81%ae%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%ac%e9%96%8b/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content12" class="fswiki_content">
				<p><a href="http://event.seasarfoundation.org/sc2009autumn/Session">Seasar Conference 2009 Autumnのセッション情報</a> が公開されました！</p>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/09/02/seasar-conference-2009-autumn%e3%81%ae%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%ac%e9%96%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seasar Conference 2009 Autumnのお知らせ</title>
		<link>http://jfut.integ.jp/2009/08/17/seasar-conference-2009-autumn/</link>
		<comments>http://jfut.integ.jp/2009/08/17/seasar-conference-2009-autumn/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[Seasar]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/08/seasar-conference-2009-autumn%e3%81%ae%e3%81%8a%e7%9f%a5%e3%82%89%e3%81%9b/</guid>
		<description><![CDATA[				
				3月9月14日12日(土)に Seasar Conference 2009 Autumn が開催されます。セッション情報はまだないですが奮ってご参加ください。
				開催日: 2009年 9月 12日 [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content14" class="fswiki_content">
				<p><del>3月</del>9月<del>14日</del>12日(土)に <a href="http://event.seasarfoundation.org/sc2009autumn/">Seasar Conference 2009 Autumn</a> が開催されます。セッション情報はまだないですが奮ってご参加ください。</p>
				<pre>開催日: 2009年 9月 12日(土)
会場: 法政大学市ケ谷キャンパス 外濠校舎3F
主催: 特定非営利活動法人Seasarファウンデーション
後援: 法政大学情報科学部
参加費用: 無料
</pre>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/08/17/seasar-conference-2009-autumn/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Subversion 1.4.x系でのCVE-2009-2411対応</title>
		<link>http://jfut.integ.jp/2009/08/11/subversion-1-4-x%e7%b3%bb%e3%81%a7%e3%81%aecve-2009-2411%e5%af%be%e5%bf%9c/</link>
		<comments>http://jfut.integ.jp/2009/08/11/subversion-1-4-x%e7%b3%bb%e3%81%a7%e3%81%aecve-2009-2411%e5%af%be%e5%bf%9c/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Seasar]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/08/subversion-1-4-x%e7%b3%bb%e3%81%a7%e3%81%aecve-2009-2411%e5%af%be%e5%bf%9c/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content15" class="fswiki_content">
				<p>1.5.x系か1.6.x系にあげることも考えましたが今回はとりあえずパッチで済ませました。パッチは以下のどっちでもOK。1箇所だけ中身違う箇所があるけどやってることは一緒でした。</p>
				<ul>
				<li> [<a href="https://www.redhat.com/archives/rhsa-announce/2009-August/msg00005.html">RHSA-2009:1203-01] Important: subversion security update</a> のSRPMの中の subversion-1.4.2-CVE-2009-2411.patch</li>
				<li> <a href="http://svn.haxx.se/dev/archive-2009-08/0110.shtml">Patch to 1.4.x branch for CVE-2009-2411</a> の添付ファイルのパッチ</li>
				</ul>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/08/11/subversion-1-4-x%e7%b3%bb%e3%81%a7%e3%81%aecve-2009-2411%e5%af%be%e5%bf%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FishEyeが重い (とりあえず解決)</title>
		<link>http://jfut.integ.jp/2009/08/04/fisheye%e3%81%8c%e9%87%8d%e3%81%84-%e3%81%a8%e3%82%8a%e3%81%82%e3%81%88%e3%81%9a%e8%a7%a3%e6%b1%ba/</link>
		<comments>http://jfut.integ.jp/2009/08/04/fisheye%e3%81%8c%e9%87%8d%e3%81%84-%e3%81%a8%e3%82%8a%e3%81%82%e3%81%88%e3%81%9a%e8%a7%a3%e6%b1%ba/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Seasar]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/08/fisheye%e3%81%8c%e9%87%8d%e3%81%84-%e3%81%a8%e3%82%8a%e3%81%82%e3%81%88%e3%81%9a%e8%a7%a3%e6%b1%ba/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content16" class="fswiki_content">
				<p>Atlassianのサポートの方から64-bit JVMは推奨していないと教えていただき、32-bitに変えてみたところ、多少重い時は相変わらずあるものの全くアクセス不能になることはなくなりました。</p>
				<p>ポインタとして示していただいた<a href="http://confluence.atlassian.com/display/FISHEYE/System+Requirements">FishEyeのSystem Requirements</a> にも下記のように急激にメモリを消費するってちゃんと明記されていました。</p>
				<blockquote><p>We strongly recommend the use of a 32-bit JDK/JRE rather than a 64-bit JDK/JRE. 64-bit JDK/JREs will consume the available RAM more rapidly, and this may result in poor performance.</p>
				</blockquote>
				<p>他のインストール方法や管理、パフォーマンスチューニングのドキュメントは読んでたけど、肝心のSystem Requirementsはスルーしてました。。</p>
				<p>32-bit JVMに変えたのでVMのパラメータも変更しました。</p>
				<pre>FISHEYE_OPTS=&quot;-Xms512m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=256m \
-XX:PermSize=128m -XX:MaxPermSize=128m&quot;
</pre>
				<ul>
				<li> <a href="http://jfut.integ.jp/category/seasar/feed//../20090801.html#p01">FishEyeが重い</a></li>
				<li> <a href="http://jfut.integ.jp/category/seasar/feed//../20090802.html#p01">FishEyeが重い (2)</a></li>
				</ul>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/08/04/fisheye%e3%81%8c%e9%87%8d%e3%81%84-%e3%81%a8%e3%82%8a%e3%81%82%e3%81%88%e3%81%9a%e8%a7%a3%e6%b1%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FishEyeが重い (2)</title>
		<link>http://jfut.integ.jp/2009/08/02/fisheye%e3%81%8c%e9%87%8d%e3%81%84-2/</link>
		<comments>http://jfut.integ.jp/2009/08/02/fisheye%e3%81%8c%e9%87%8d%e3%81%84-2/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 03:00:01 +0000</pubDate>
		<dc:creator>jfut</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Seasar]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://jfuttest1.integ.jp/2009/08/fisheye%e3%81%8c%e9%87%8d%e3%81%84-2/</guid>
		<description><![CDATA[				
				どうやらSVNへのアクセス中にSVNKitの例外が発生すると、その後ひどいことになるらしい。
				
				
				FishEyeのソースは見れないのでAtlassianにサポートをお願いしてみま [...]]]></description>
			<content:encoded><![CDATA[				<div id="fswiki_content19" class="fswiki_content">
				<p>どうやらSVNへのアクセス中にSVNKitの例外が発生すると、その後ひどいことになるらしい。</p>
				</div>
				<div id="attachment_731" class="wp-caption alignright" style="width: 465px"><img src="http://jfut.integ.jp/wp-content/uploads/2009/08/20090802_0.png" alt="JVM heap usage of FisgEye/Crucible" title="JVM  heap usage of FisgEye/Crucible" width="455" height="341" class="size-full wp-image-731" /><p class="wp-caption-text">JVM  heap usage of FisgEye/Crucible</p></div>
				<div id="fswiki_content20" class="fswiki_content">
				<p>FishEyeのソースは見れないのでAtlassianにサポートをお願いしてみました。</p>
				<p>2009-08-04追記: <a href="http://jfut.integ.jp/category/seasar/feed//../20090804.html#p01">とりあえず解決しました。</a></p>
				<ul>
				<li> <a href="http://jfut.integ.jp/category/seasar/feed//../20090801.html#p01">FishEyeが重い</a></li>
				<li> <a href="http://jfut.integ.jp/category/seasar/feed//../20090802.html#p01">FishEyeが重い (2)</a></li>
				<li> <a href="http://jfut.integ.jp/category/seasar/feed//../20090804.html#p01">FishEyeが重い (とりあえず解決)</a></li>
				</ul>
				</div>
]]></content:encoded>
			<wfw:commentRss>http://jfut.integ.jp/2009/08/02/fisheye%e3%81%8c%e9%87%8d%e3%81%84-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
