<?xml version="1.0" encoding="utf-8" ?>

<?xml-stylesheet href="/chopper12r/rssxsl" type="text/xsl" media="screen"?>

<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/chopper12r/rss">
	<title>チョッパーのほふく前進</title>
	<link>http://d.hatena.ne.jp/chopper12r/</link>
	<description>チョッパーのほふく前進</description>
	
	<dc:creator>chopper12r</dc:creator>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090426/1240757855"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090419"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090414"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090412"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090408/1239200542"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090331/1238508732"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/chopper12r/20090329/1238336743"/>
	</rdf:Seq>
	</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090426/1240757855">
	<title>ICEfacesでbeforePhaseが動作しない？ </title>
	<link>http://d.hatena.ne.jp/chopper12r/20090426/1240757855</link>
	<description> JSF1.2から&#60;f:view beforePhase=”#{hoge.hoge}”&#62;のようにPageごとに割り込みメソッドを指定できるらしいです。 Chapter 11 Using JavaServer Faces Technology in JSP Pages Visual Webを使いたくない（使えない）場合に便利そうな機能だと思いましたが、ICEFacesと</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>JSF1.2から&#60;f:view beforePhase="#{hoge.hoge}"&#62;のようにPageごとに割り込みメソッドを指定できるらしいです。</p>
			<p><a href="http://docs.sun.com/app/docs/doc/819-3669/bnaqz?l=ja&a=view" target="_blank">Chapter 11 Using JavaServer Faces Technology in JSP Pages</a></p>
			<p>Visual Webを使いたくない（使えない）場合に便利そうな機能だと思いましたが、ICEFacesと合わせると動かないんですよね。同じように悩んでいる人を発見するも、解決策を見つけることはできませんでした。</p>
			<p><a href="http://moon-whale.blogspot.com/2009/01/icefacesbeforephase.html" target="_blank">ICEfacesでbeforePhaseが動作しない？ </a></p>
			<p>試したコードはこんな感じです。</p>
<pre>
    &#38;lt;f:view beforePhase=&#34;#{Page1.hoge}&#34;&#38;gt;

    public void hoge(PhaseEvent pe){

    }
</pre>

			<p>すると、以下のエラーが吐かれます。</p>
<pre>
java.lang.IllegalArgumentException: argument type mismatch
        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.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
        at org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
        at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
        at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
        at com.icesoft.faces.webapp.parser.ELSetPropertiesRule.begin(ELSetPropertiesRule.java:130)
        at org.apache.commons.digester.Rule.begin(Rule.java:200)
        at org.apache.commons.digester.Digester.startElement(Digester.java:1273)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at org.apache.commons.digester.Digester.parse(Digester.java:1586)
        at com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:130)
        at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:464)
        at com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
        at org.icefaces.netbeans.rave.web.ui.appbase.faces.ViewHandlerImpl.renderView(ViewHandlerImpl.java:296)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
        at com.icesoft.faces.context.View$2$1.respond(View.java:47)
        at com.icesoft.faces.webapp.http.servlet.GlassFishAdaptingServlet$GlassFishRequestResponse.respondWith(GlassFishAdaptingServlet.java:159)
        at com.icesoft.faces.context.View$2.serve(View.java:72)
        at com.icesoft.faces.context.View.servePage(View.java:133)
        at com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:52)
        at com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
        at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:114)
        at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
        at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:160)
        at com.icesoft.faces.webapp.http.servlet.SessionDispatcher$1.service(SessionDispatcher.java:42)
        at com.icesoft.faces.webapp.http.servlet.GlassFishAdaptingServlet.service(GlassFishAdaptingServlet.java:60)
        at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:63)
        at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:62)
        at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
        at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:153)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
        at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
        at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

</pre>

			<p>GlassFishだとあまり情報がありませんが、Tomcatだともうちょっと情報があり、MethodのところにValueを突っ込んでるみたいなエラーが書かれています。</p>
			<p>何となく、com.icesoft.faces.webapp.parser.ELSetPropertiesRule.beginがイヤな感じなので、中を見てみます。</p>
<pre>
    public void begin(Attributes attributes) throws Exception {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HashMap values = new HashMap();
        Object top = digester.peek();

        for (int i = 0; i &#38;lt; attributes.getLength(); i++) {
            String name = attributes.getLocalName(i);
            if (&#34;&#34;.equals(name)) {
                name = attributes.getQName(i);
            }
            String value = attributes.getValue(i);

            //take a guess at the types of the JSF 1.2 tag members
            //we are probably better off doing this reflectively
            if (name != null) {
                values.put(name, value);
                if ((&#34;id&#34;.equals(name)) ||
                    (&#34;name&#34;.equals(name)) ||
                    (&#34;var&#34;.equals(name))) {
                    values.put(name, value);
                } else if (top instanceof UIComponentTag) {
                    //must be a JSF 1.1 tag
                    values.put(name, value);
                } else if (&#34;action&#34;.equals(name)) {
                    values.put(name,
                               getMethodExpression( facesContext, name, value,
                                                    null ));
                } else if (&#34;validator&#34;.equals(name)) {
                    values.put(name, 
                            getMethodExpression( facesContext, name, value,
                                    null ));
                } else if (&#34;actionListener&#34;.equals(name)) {
                    values.put(name,
                               getMethodExpression(facesContext, name, value,
                                                   ActionEvent.class));
                } else if (&#34;valueChangeListener&#34;.equals(name)) {
                    values.put(name,
                               getMethodExpression(facesContext, name, value,
                                                   ValueChangeEvent.class));
                } else {
                    values.put(name,
                               getValueExpression(facesContext, name, value));
                }
                if (top instanceof javax.faces.webapp.UIComponentELTag) {
                    //special case for 
                    //com.sun.faces.taglib.jsf_core.ParameterTag
                    //and potentially others
                    if (&#34;name&#34;.equals(name))  {
                        values.put(name,
                                   getValueExpression(facesContext, name, value));
                    } else if (&#34;locale&#34;.equals(name)) {
                        values.put(name,
                                   getValueExpression(facesContext, name, value));
                    } 
                } else {
                    //reflection based code as mentioned above.  More likely
                    //to be correct, but performance may not be as good,
                    //so only applying it in a specific case
                    if (&#34;name&#34;.equals(name))  {
                        Method setNameMethod = null;
                        try {
                            setNameMethod = top.getClass().getMethod(&#34;setName&#34;,
                                                                     new Class&#91;] { ValueExpression.class } );
                        } catch (Exception e)  { }
                        if (null != setNameMethod)  {
                            values.put(name,
                                       getValueExpression(facesContext, name, value));
                        }
                    }

                }

            }
        }


        BeanUtils.populate(top, values);
    }
</pre>

			<p>beforePhaseにはメソッドを指定するはずなのですが、このコードからはbeforePhaseの場合にはvalueが渡されているような雰囲気です。これが原因かどうかはもっと突っ込まないとわからないようです。ちょっと手に負えませんね。</p>
			<p>beforePhaseを使えばすぐわかるような現象だとは思うのですが、使っている人が少ないのでしょうか？</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-04-26T23:57:35+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090419">
	<title>ICEFacesでS2JDBCを使う</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090419</link>
	<description> いずれはICEFacesを業務系システムの開発に使いたいので、データベース周りの連携を試してみました。個人的にSQLを書くスタイルが好みなので、その系では一番使いやすいS2JDBCを試しました。 まずはICEFacesからSeasarのコンポーネントを呼べるようにします。連携用のツール</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>いずれはICEFacesを業務系システムの開発に使いたいので、データベース周りの連携を試してみました。個人的にSQLを書くスタイルが好みなので、その系では一番使いやすいS2JDBCを試しました。</p>
			<p>まずはICEFacesからSeasarのコンポーネントを呼べるようにします。連携用のツールはSeasarのプロダクト群を探してみても適当なものがなかったので、仕方がないので自作することにしました。この辺りはSpringの方が情報やツールが充実していますので、それを参考にしました。<a href="http://www.theserverside.com/tt/knowledgecenter-is/knowledgecenter-is.tss?l=ICEFacesandSpringJavaEE" target="_blank">ICEFaces and Spring 2.5 in Java EE</a></p>
			<p>org.springframework.web.jsf.DelegatingVariableResolverをコピーしてseasar用に書き換えます。</p>
<pre>
package web;

import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.VariableResolver;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class DelegatingVariableResolver extends VariableResolver {

	protected final Log logger = LogFactory.getLog(getClass());

	protected final VariableResolver originalVariableResolver;


	public DelegatingVariableResolver(VariableResolver originalVariableResolver) {
		this.originalVariableResolver = originalVariableResolver;
	}

	protected final VariableResolver getOriginalVariableResolver() {
		return this.originalVariableResolver;
	}


	public Object resolveVariable(FacesContext facesContext, String name) throws EvaluationException {
		Object value = resolveOriginal(facesContext, name);
		if (value != null) {
			return value;
		}
		Object bean = resolveSeasarBean(facesContext, name);
		if (bean != null) {
			return bean;
		}
		return null;
	}

	protected Object resolveOriginal(FacesContext facesContext, String name) {
		Object value = null;
        try{
            value = getOriginalVariableResolver().resolveVariable(facesContext, name);
        }catch(Exception e){
            e.printStackTrace();
        }
		if (value != null &#38;amp;&#38;amp; logger.isTraceEnabled()) {
			logger.trace(&#34;Successfully resolved variable &#39;&#34; + name + &#34;&#39; via original VariableResolver&#34;);
		}
		return value;
	}

	protected Object resolveSeasarBean(FacesContext facesContext, String name) {
        return SingletonS2ContainerFactory.getContainer().getComponent(name);
	}
}
</pre>

			<p>このクラスでやっていることは、ICEFacesがコンポーネントを探すときに、まずICEFacesで管理しているコンポーネントを探しに行き、そこで見つからなかった場合にSeasarに探しに行くようにしているだけです。</p>
			<p>これをfaces-config.xmlに追記します。</p>
<pre>
    &#38;lt;application&#38;gt;
        &#38;lt;view-handler&#38;gt;
            org.icefaces.netbeans.rave.web.ui.appbase.faces.ViewHandlerImpl
        &#38;lt;/view-handler&#38;gt;
        &#38;lt;variable-resolver&#38;gt;web.DelegatingVariableResolver&#38;lt;/variable-resolver&#38;gt;
    &#38;lt;/application&#38;gt;
</pre>

			<p>web.xmlにもSeasarの設定を追記します。</p>
<pre>
    &#38;lt;listener&#38;gt;
        &#38;lt;listener-class&#38;gt;org.seasar.framework.container.servlet.S2ContainerListener&#38;lt;/listener-class&#38;gt;
    &#38;lt;/listener&#38;gt;

    &#38;lt;filter&#38;gt;
        &#38;lt;filter-name&#38;gt;s2filter&#38;lt;/filter-name&#38;gt;
        &#38;lt;filter-class&#38;gt;org.seasar.framework.container.filter.S2ContainerFilter&#38;lt;/filter-class&#38;gt;
    &#38;lt;/filter&#38;gt;

    &#38;lt;filter-mapping&#38;gt;
        &#38;lt;filter-name&#38;gt;s2filter&#38;lt;/filter-name&#38;gt;
        &#38;lt;url-pattern&#38;gt;/&#38;#42;&#38;lt;/url-pattern&#38;gt;
    &#38;lt;/filter-mapping&#38;gt;
</pre>

			<p>app.diconはこんな感じです。</p>
<pre>
&#38;lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#38;gt;
&#38;lt;!DOCTYPE components PUBLIC &#34;-//SEASAR//DTD S2Container 2.4//EN&#34;
        &#34;http://www.seasar.org/dtd/components24.dtd&#34;&#38;gt;
&#38;lt;components&#38;gt;
    &#38;lt;include path=&#34;convention.dicon&#34;/&#38;gt;
    &#38;lt;include path=&#34;aop.dicon&#34;/&#38;gt;
    &#38;lt;include path=&#34;s2jdbc.dicon&#34;/&#38;gt;
    &#38;lt;component name=&#34;personDao&#34; class=&#34;dao.PersonDao&#34;/&#38;gt;
    &#38;lt;component name=&#34;Page1&#34; class=&#34;webapplication1.Page1&#34; instance=&#34;request&#34;/&#38;gt;
&#38;lt;/components&#38;gt;
</pre>

			<p>Page1コンポーネントはinstance="request"としています。（faces-config.xmlの設定と合わせた）</p>
			<p>先ほどのweb.xmlでs2filterの設定を追加したのは、Seasarでrequestスコープのコンポーネント管理をするためです。</p>
			<p>実は僕はここで大はまりしました。最初は、Page1の記述をfaces-config.xmlに、personDaoの記述をapp.diconにしていたのですが、それだと例外が発生します。どうやら、faces-config.xml内のコンポーネントはfaces-config.xml内のコンポーネントしかインジェクションできないようなのです。つまり、Seasarのコンポーネントを使いたい場合は、PageクラスからSeasarで管理しなければいけないのです。ここが分からなくて、夜中の3時まではまってしまいました。</p>
			<p>あと、NetBeansのプラグインの問題？で、勝手にfaces-config.xmlにPage1のエントリを作ってしまうのです。一度消したはずなのに、知らずに復活していました。インジェクションされないので？？としばらく悩みました。</p>
			<p>Page1クラスはこんな感じです。</p>
<pre>
package webapplication1;

import com.icesoft.faces.component.jsfcl.data.DefaultSelectedData;
import com.sun.rave.faces.data.DefaultSelectItemsArray;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import dao.PersonDao;
import entity.NewClass;
import javax.faces.FacesException;

public class Page1 extends AbstractPageBean {

　〜中略〜

    public Page1() {

    }

    public void init() {
        super.init();
        try {
            _init();
        } catch (Exception e) {
            log(&#34;Page1 Initialization Failure&#34;, e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
    }

    public void preprocess() {
        name = &#34;preprocess&#34;;
    }

    public void prerender() {
        name = &#34;prerender&#34;;
        name = personDao.getPerson().name;
    }

    public void destroy() {
    }

    protected PersonDao personDao;

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }

    protected String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
</pre>

			<p>jdbc.diconはこんな感じです。データベースはNetBeansに付属しているサービスのTravelを使いました。</p>
<pre>
&#38;lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#38;gt;
&#38;lt;!DOCTYPE components PUBLIC &#34;-//SEASAR//DTD S2Container 2.4//EN&#34;
	&#34;http://www.seasar.org/dtd/components24.dtd&#34;&#38;gt;
&#38;lt;components namespace=&#34;jdbc&#34;&#38;gt;
	&#38;lt;include path=&#34;jta.dicon&#34;/&#38;gt;
	&#38;lt;include path=&#34;jdbc-extension.dicon&#34;
		condition=&#34;@org.seasar.framework.util.ResourceUtil@isExist(&#39;convention.dicon&#39;)&#34;/&#38;gt;

	&#38;lt;component class=&#34;org.seasar.extension.jdbc.impl.BasicResultSetFactory&#34;/&#38;gt;
	&#38;lt;component class=&#34;org.seasar.extension.jdbc.impl.ConfigurableStatementFactory&#34;&#38;gt;
		&#38;lt;arg&#38;gt;
			&#38;lt;component class=&#34;org.seasar.extension.jdbc.impl.BasicStatementFactory&#34;/&#38;gt;
		&#38;lt;/arg&#38;gt;
		&#38;lt;property name=&#34;fetchSize&#34;&#38;gt;100&#38;lt;/property&#38;gt;
	&#38;lt;/component&#38;gt;

	&#38;lt;!-- for Derby --&#38;gt;
	&#38;lt;component name=&#34;xaDataSource&#34;
		class=&#34;org.seasar.extension.dbcp.impl.XADataSourceImpl&#34;&#38;gt;
		&#38;lt;property name=&#34;driverClassName&#34;&#38;gt;
			&#34;org.apache.derby.jdbc.EmbeddedDriver&#34;
		&#38;lt;/property&#38;gt;
		&#38;lt;property name=&#34;URL&#34;&#38;gt;
			&#34;jdbc:derby://localhost:1527/travel&#34;
		&#38;lt;/property&#38;gt;
		&#38;lt;property name=&#34;user&#34;&#38;gt;&#34;travel&#34;&#38;lt;/property&#38;gt;
		&#38;lt;property name=&#34;password&#34;&#38;gt;&#34;travel&#34;&#38;lt;/property&#38;gt;
	&#38;lt;/component&#38;gt;

	&#38;lt;component name=&#34;connectionPool&#34;
		class=&#34;org.seasar.extension.dbcp.impl.ConnectionPoolImpl&#34;&#38;gt;
		&#38;lt;property name=&#34;timeout&#34;&#38;gt;600&#38;lt;/property&#38;gt;
		&#38;lt;property name=&#34;maxPoolSize&#34;&#38;gt;10&#38;lt;/property&#38;gt;
		&#38;lt;property name=&#34;allowLocalTx&#34;&#38;gt;true&#38;lt;/property&#38;gt;
		&#38;lt;destroyMethod name=&#34;close&#34;/&#38;gt;
	&#38;lt;/component&#38;gt;

	&#38;lt;component name=&#34;dataSource&#34;
		class=&#34;org.seasar.extension.dbcp.impl.DataSourceImpl&#34;
	/&#38;gt;
&#38;lt;/components&#38;gt;
</pre>

			<p>とりあえず、これで動きました。ICEFacesとSeasarを連携させるもっといい方法を知っている方がいれば、教えてください。</p>
			<p>今回の件ではSpringに感謝感謝です。</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-04-19</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090414">
	<title>PanelTabSetとInputRichText</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090414</link>
	<description> ようやく動かせるようになってきたので、前から興味のあったコンポーネントを試してみます。 まずはPanelTabSetからで、そのままパレットからドロップします。デフォルトでいろいろなコンポーネントがついてきました。 &#38;lt;?xml version=&#34;1.0&#34; encoding=&#34;UT</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>ようやく動かせるようになってきたので、前から興味のあったコンポーネントを試してみます。</p>
			<p>まずはPanelTabSetからで、そのままパレットからドロップします。デフォルトでいろいろなコンポーネントがついてきました。</p>
<pre>
&#38;lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#38;gt;
&#38;lt;jsp:root version=&#34;2.1&#34; xmlns:f=&#34;http://java.sun.com/jsf/core&#34; xmlns:h=&#34;http://java.sun.com/jsf/html&#34; xmlns:ice=&#34;http://www.icesoft.com/icefaces/component&#34; xmlns:jsp=&#34;http://java.sun.com/JSP/Page&#34;&#38;gt;
    &#38;lt;jsp:directive.page contentType=&#34;text/html;charset=UTF-8&#34; pageEncoding=&#34;UTF-8&#34;/&#38;gt;
    &#38;lt;f:view&#38;gt;
        &#38;lt;html id=&#34;outputHtml1&#34;&#38;gt;
            &#38;lt;head id=&#34;outputHead1&#34;&#38;gt;
                &#38;lt;ice:outputStyle href=&#34;./resources/stylesheet.css&#34; id=&#34;outputStyle1&#34;/&#38;gt;
                &#38;lt;ice:outputStyle href=&#34;./xmlhttp/css/xp/xp.css&#34; id=&#34;outputStyle2&#34;/&#38;gt;
            &#38;lt;/head&#38;gt;
            &#38;lt;body id=&#34;outputBody1&#34; style=&#34;-rave-layout: grid&#34;&#38;gt;
                &#38;lt;ice:form id=&#34;form1&#34;&#38;gt;
                    &#38;lt;ice:panelTabSet height=&#34;264&#34; id=&#34;panelTabSet1&#34; selectedIndex=&#34;2&#34; style=&#34;position: absolute; left: 48px; top: 24px&#34; tabPlacement=&#34;Top&#34; width=&#34;504&#34;&#38;gt;
                        &#38;lt;ice:panelTab id=&#34;panelTab1&#34; label=&#34;panelTab1&#34;&#38;gt;
                            &#38;lt;ice:panelLayout id=&#34;panelLayout1&#34; style=&#34;position: inherit; width: 100%; height: 100%;&#34;&#38;gt;
                                &#38;lt;ice:selectOneRadio id=&#34;selectOneRadio1&#34; partialSubmit=&#34;true&#34;&#38;gt;
                                    &#38;lt;f:selectItems id=&#34;selectOneRadio1selectItems&#34; value=&#34;#{Page2.selectOneRadio1DefaultItems}&#34;/&#38;gt;
                                &#38;lt;/ice:selectOneRadio&#38;gt;
                            &#38;lt;/ice:panelLayout&#38;gt;
                        &#38;lt;/ice:panelTab&#38;gt;
                        &#38;lt;ice:panelTab id=&#34;panelTab2&#34; label=&#34;panelTab2&#34;&#38;gt;
                            &#38;lt;ice:panelLayout id=&#34;panelLayout2&#34; style=&#34;position: inherit; width: 100%; height: 100%;&#34;&#38;gt;
                                &#38;lt;ice:inputText id=&#34;inputText1&#34; value=&#34;inputText value&#34;/&#38;gt;
                            &#38;lt;/ice:panelLayout&#38;gt;
                        &#38;lt;/ice:panelTab&#38;gt;
                        &#38;lt;ice:panelTab id=&#34;panelTab3&#34; label=&#34;panelTab3&#34;&#38;gt;
                            &#38;lt;ice:panelLayout id=&#34;panelLayout3&#34; style=&#34;position: inherit; width: 100%; height: 100%;&#34;&#38;gt;
                                &#38;lt;ice:selectOneMenu id=&#34;selectOneMenu1&#34; partialSubmit=&#34;true&#34;&#38;gt;
                                    &#38;lt;f:selectItems id=&#34;selectOneMenu1selectItems&#34; value=&#34;#{Page2.selectOneMenu1DefaultItems}&#34;/&#38;gt;
                                &#38;lt;/ice:selectOneMenu&#38;gt;
                            &#38;lt;/ice:panelLayout&#38;gt;
                        &#38;lt;/ice:panelTab&#38;gt;
                    &#38;lt;/ice:panelTabSet&#38;gt;
                &#38;lt;/ice:form&#38;gt;
            &#38;lt;/body&#38;gt;
        &#38;lt;/html&#38;gt;
    &#38;lt;/f:view&#38;gt;
&#38;lt;/jsp:root&#38;gt;
</pre>

			<p>この状態のまま実行します。すると画面いっぱいにタブ画面が表示されます。PanelTabSet自体にはWidth設定はないようですね。</p>
			<p>そこでPanelLayoutをドロップし、その中にPanelTabSetをドロップするとWidth設定ができました。なるほど。</p>
			<p>でも、SelectOneRadioの縦位置が真ん中になっています。うーん、それぞれの位置関係がよく分からない。それぞれの領域の左上が原点ではないということか？要調査です。</p>
			<p><a href="http://f.hatena.ne.jp/chopper12r/20090414231358" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/c/chopper12r/20090414/20090414231358.gif" alt="f:id:chopper12r:20090414231358g:image" title="f:id:chopper12r:20090414231358g:image" class="hatena-fotolife"></a></p>
			<p>InputRichTextはツールバーがごちゃごちゃしているのでカスタマイズしたいと思い、ICEFaces.orgのInputRichTextの解説を見ながら試してみました。</p>
<pre>
 The following steps are involved in creating the custom toolbar:

   1. Create a config file under the webapp, defining the custom toolbar(e.g.) js/config.js
      FCKConfig.ToolbarSets&#91;&#34;MyToolbar&#34;] = &#91;&#91;&#39;Bold&#39;,&#39;Italic&#39;, &#39;Underline&#39;], &#91;&#39;Save&#39;]] ;
   2. Set the &#34;toolbar&#34; attribute on the inputRichText component to define the custom toolbar name and set the &#34;customConfigPath&#34; attribute to reference the custom config.js.(e.g.)
      &#38;lt;ice:inputRichText toolbar=&#34;MyToolbar&#34; customConfigPath=&#34;js/config.js&#34;/&#38;gt;
</pre>

			<p>結果はちゃんと動きませんでした。MyToolbarがありませんとエラーがでています。</p>
			<p>デザイナ画面でもToolbarは選択制になっていて、他に選ぶ余地がなさそうです。・・・・訳が分からない。</p>
			<p>NetBeansとの統合環境はICEFaces.orgから最新をダウンロードしてきています。NetBeansのデフォルトのデザイナでも同じ現象なので、何かうまくいかない理由があるのでしょうね・・・とほほな感じです。</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-04-14</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090412">
	<title>昨日の間違い</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090412</link>
	<description> Webアプリケーションのフレームワークの選択を間違っていました。 ここでは、「Visual Web ICEFaces」を選択しなくてはいけなかったのです。 ここのチュートリアルを参考にしました。 http://www.netbeans.org/kb/articles/icefaces-netbeans-crud-apps.html とりあえず編集</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>Webアプリケーションのフレームワークの選択を間違っていました。</p>
			<p><a href="http://f.hatena.ne.jp/chopper12r/20090412225616" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/c/chopper12r/20090412/20090412225616.jpg" alt="f:id:chopper12r:20090412225616j:image" title="f:id:chopper12r:20090412225616j:image" class="hatena-fotolife"></a></p>
			<p>ここでは、「Visual Web ICEFaces」を選択しなくてはいけなかったのです。</p>
			<p>ここのチュートリアルを参考にしました。</p>
			<p><a href="http://www.netbeans.org/kb/articles/icefaces-netbeans-crud-apps.html" target="_blank">http://www.netbeans.org/kb/articles/icefaces-netbeans-crud-apps.html</a></p>
			<p>とりあえず編集もできるようになり、動作確認もできました。いやー、よかったです。でも、ここの「ICEFaces」って何なんでしょうか？まだ謎は解けていませんが、とりあえずよしとします。</p>
			<p>今までStruts＋素のJSPで開発することが多かったので、このリッチな画面が簡単に作成できてしまうのは感動です。</p>
			<p>次はラベルの国際化対応の調査とPanelTabSetの使い方に挑戦するつもりです。</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-04-12</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090408/1239200542">
	<title>T2のサンプルをさわり始めました</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090408/1239200542</link>
	<description> 久しぶりにNetBeansを立ち上げ、以前セッティングしたT2のサンプルを動かしてみます。 とりあえず動くことが確認できたので、足し算のサンプルを3個の数字を足すようにしてみました。GlassFishV2を動かしたままでjsp、page、serviceをそれぞれ変更してコンパイルします。ホ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>久しぶりにNetBeansを立ち上げ、以前セッティングしたT2のサンプルを動かしてみます。</p>
			<p>とりあえず動くことが確認できたので、足し算のサンプルを3個の数字を足すようにしてみました。GlassFishV2を動かしたままでjsp、page、serviceをそれぞれ変更してコンパイルします。ホットデプロイできているかな？と見てみると、どうやら3つ目の引数は無視されている様子。変更した部分が反映されていません。うーん、何か設定が必要なのかしら・・よくわからないのでとりあえず放置します。とにかく、慣れないうちは何をするにも時間がかかります。ここは辛抱です。</p>
			<p>で、サンプルの中身も見てみます。予備知識０の状態で見ているので、わからないことだらけです。pageクラスの中を見てみると、jspからのパラメータは@RequestParametersアノテーションによりString型のMapでインジェクトされています。この辺りはStrutsのActionFormとは違う感覚ですね。よりマニュアル感覚が強い（PHP的？）気がします。おそらく、初心者とエキスパートの両極に受ける作りではないでしょうか？</p>
			<p>@ActionParamは少しわかりにくいですね。AddPageクラスのimgTestとかhogeメソッドが何のために必要なのかが直観的ではない気がします。</p>
			<p>頭の中が疑問符だらけでまたもやくじけそうになっていますが、もう少しさわってみようと思います。</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-04-08T23:22:22+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090331/1238508732">
	<title>localhostじゃだめらしい？</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090331/1238508732</link>
	<description> 先日の続きで、コンパイルが通ったので実行してみました（shinさんshot6さん、ありがとうございました）。しかし、実行しても何も起きません。？？？GlassFishも起動していないような・・・。プロジェクトのプロパティをみるとサーバーが指定されていません。これかと思い、</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>先日の続きで、コンパイルが通ったので実行してみました（shinさんshot6さん、ありがとうございました）。しかし、実行しても何も起きません。？？？GlassFishも起動していないような・・・。プロジェクトのプロパティをみるとサーバーが指定されていません。これかと思い、GlassFishv2を選択し、再度実行！今度はちゃんとサーバーの起動をしています。</p>
			<p>そのうちブラウザが立ち上がって、さぁきた！と思ったら、今度はページ読み込みエラーが・・。</p>
			<p>URLには「<a href="http://www.localhost.com:17800/t2-guice-0.5.1-ga/" target="_blank">http://www.localhost.com:17800/t2-guice-0.5.1-ga/</a>」と表示されています。</p>
			<p>試しに「<a href="http://localhost:17800/t2-guice-0.5.1-ga/" target="_blank">http://localhost:17800/t2-guice-0.5.1-ga/</a>」とやってもダメ。</p>
			<p>最後に「<a href="http://127.0.0.1:17800/t2-guice-0.5.1-ga/" target="_blank">http://127.0.0.1:17800/t2-guice-0.5.1-ga/</a>」とやると動きました。</p>
			<p>どーゆーこと？</p>
			<p>いろいろ調べると、原因はhostsファイルに</p>
			<p>::1 localhost</p>
			<p>と記述されていたことらしいです。::1という表記はipv6用のものらしく、FireFoxはそれを名前解決できないのでwww.localhost.comに変換して再検索したらしいのです。（らしいだらけですが・・）その1行を削除するとちゃんとlocalhostで動くようになりました。</p>
			<p>なんか、いろいろ罠が多いですね・・・自分が引っ掛かりまくっているだけかもしれませんが、最初からくじけそうになりました。でもNetBeansは比較的設定項目が少ないので、設定を探すときはそれほど苦労しなくて済みました。その点はEclipseよりいいのかもしれません。</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-03-31T23:12:12+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/chopper12r/20090329/1238336743">
	<title>NetBeans6.5+T2 + Guice + JPAサンプルリリースが構築できない？</title>
	<link>http://d.hatena.ne.jp/chopper12r/20090329/1238336743</link>
	<description> 仕事ではEclipseを使っているので、自宅では何か違うものをと思い、NetBeans6.5を入れてみました。インストール、アップデートも簡単にできました。 何か簡単にサンプルプログラムを動かしたかったので、「T2 + Guice + JPAサンプルリリース」を入れてみました。Mavenが必要</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>仕事ではEclipseを使っているので、自宅では何か違うものをと思い、NetBeans6.5を入れてみました。インストール、アップデートも簡単にできました。</p>
			<p>何か簡単にサンプルプログラムを動かしたかったので、「T2 + Guice + JPAサンプルリリース」を入れてみました。Mavenが必要らしいので事前にプラグインをチェックしておきます。</p>
			<p><a href="http://d.hatena.ne.jp/shot6/20090327#1238120432" target="_blank">http://d.hatena.ne.jp/shot6/20090327#1238120432</a></p>
			<p>ダウンロードしたファイルを解凍して「プロジェクトを開く」だけでＯＫ。さっそく構築してみます。すると何やらエラーが出ているような・・・</p>
			<p>NetBeansは初めてで何もわからないまま使っているので設定がおかしいのかな？でも、他のライブラリはダウンロードされているし・・・うーん、よく分からない。ま、いいか。今日はここまでにしよう。</p>
			<p>ちなみにこんなエラーでした。</p>
			<p>WARNING: You are running embedded Maven builds, some build may fail due to incompatibilities with latest Maven release.</p>
			<p>         To set Maven instance to use for building, click here.</p>
			<p>Scanning for projects...</p>
			<p>[#process-resources]</p>
			<p>[resources:resources]</p>
			<p>Using default encoding to copy filtered resources.</p>
			<p>[#compile]</p>
			<p>[ERROR]Transitive dependency resolution for scope: compile has failed for your project.</p>
			<p>[ERROR]Error message: Missing:</p>
			<p>[ERROR]----------</p>
			<p>[ERROR]1) com.google.code.guice:guice-servlet:jar:1.0</p>
			<p>[ERROR]  Try downloading the file manually from the project website.</p>
			<p>[ERROR]  Then, install it using the command: </p>
			<p>[ERROR]      mvn install:install-file -DgroupId=com.google.code.guice -DartifactId=guice-servlet -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file</p>
			<p>[ERROR]  Alternatively, if you host your own repository you can deploy the file there: </p>
			<p>[ERROR]      mvn deploy:deploy-file -DgroupId=com.google.code.guice -DartifactId=guice-servlet -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]</p>
			<p>[ERROR]  Path to dependency: </p>
			<p>[ERROR]          1) org.t2framework.samples:t2-guice:war:0.5.1-ga</p>
			<p>[ERROR]          2) com.google.code.guice:guice-servlet:jar:1.0</p>
			<p>[ERROR]----------</p>
			<p>[ERROR]1 required artifact is missing.</p>
			<p>[ERROR]for artifact: </p>
			<p>[ERROR]  org.t2framework.samples:t2-guice:war:0.5.1-ga</p>
			<p>[ERROR]from the specified remote repositories:</p>
			<p>[ERROR]  maven-snapshot.t2framework.org (<a href="http://maven.t2framework.org/maven2-snapshot" target="_blank">http://maven.t2framework.org/maven2-snapshot</a>),</p>
			<p>[ERROR]  central (<a href="http://repo1.maven.org/maven2" target="_blank">http://repo1.maven.org/maven2</a>),</p>
			<p>[ERROR]  local (file:m2repo),</p>
			<p>[ERROR]  maven.t2framework.org (<a href="http://maven.t2framework.org/maven2" target="_blank">http://maven.t2framework.org/maven2</a>)</p>
			<p>[ERROR]Group-Id: org.t2framework.samples</p>
			<p>[ERROR]Artifact-Id: t2-guice</p>
			<p>[ERROR]Version: 0.5.1-ga</p>
			<p>[ERROR]From file: C:\XXXXXXX\NetBeansProjects\t2-guice\pom.xml</p>
			<p>------------------------------------------------------------------------</p>
			<p>For more information, run with the -e flag</p>
			<p>------------------------------------------------------------------------</p>
			<p>BUILD FAILED</p>
			<p>------------------------------------------------------------------------</p>
			<p>Total time: 2 seconds</p>
			<p>Finished at: Sun Mar 29 23:00:33 JST 2009</p>
			<p>Final Memory: 103M/283M</p>
			<p>------------------------------------------------------------------------</p>
		</div>
]]></content:encoded>

	<dc:creator>chopper12r</dc:creator>
	<dc:date>2009-03-29T23:25:43+09:00</dc:date>
</item>
</rdf:RDF>
