2014年4月28日月曜日

Hibernate Session スコープ戦略 3/3 (FMP設定編)

 Flow Managed Persistence (FMP) の設定方法の説明です。
 この戦略は Spring Web Flow (SWF)を利用します。 FMP を使う場合は、 OSIV の設定は不要です。 設定方法は、 SWF の Listener を設定している xml ファイルに、以下を記述すれば良いです。 JPA の場合は、以下のように記述を追加します。
<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry">
    <webflow:flow-execution-listeners>
        <webflow:listener ref="jpaFlowExecutionListener" />
    </webflow:flow-execution-listeners>
</webflow:flow-executor>
 
<bean id="jpaFlowExecutionListener" 
      class="org.springframework.webflow.persistence.JpaFlowExecutionListener">
    <constructor-arg ref="entityManagerFactory" />
    <constructor-arg ref="transactionManager" />
</bean>
JPA を使わず Hibernate のみの場合は、以下のように記述を追加します。
<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry">
    <webflow:flow-execution-listeners>
        <webflow:listener ref="hibernateFlowExecutionListener" />
    </webflow:flow-execution-listeners>
</webflow:flow-executor>
 
<bean id="hibernateFlowExecutionListener" 
      class="org.springframework.webflow.persistence.HibernateFlowExecutionListener">
    <constructor-arg ref="sessionFactory" />
    <constructor-arg ref="transactionManager" />
</bean>
あとは、各々のスコープを利用するフローの xml に、
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/webflow
                          http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

    <persistence-context />
    
    ....
    
</flow>
のように、そのフローのスコープ内で Hibernate の Session が生きていることを設定します。 そして、スコープの終わりには、
<end-state id="bookingConfirmed" commit="true" />

のように記述することで、トランザクションのコミットと同時に Session を閉じるようにします。
 以上で、 FMP の設定は終わりです。

 まとめ
 SWF の FMP を使うことで、手動で Hibernate  と同期すること、つまり分離(detach)と付加(attach)を操作することなく、そのフロースコープを定義することで自動で同期してくれます。 References
Open Session in View by Hibernate Community https://community.jboss.org/wiki/OpenSessionInView
Spring Web Flow 2 でのフロー・マネージド・パーシスタンス by IBM
OSIV by Spring Forum
OSIVF vs OSIVI
Session Strategy by Hibernate Reference

Hibernate Session スコープ戦略 2/3 (OSIV設定編)

意外と見られていたので、放置しておいてた Hibernnate の記事を追記していきます。
別のサイトに書いて置いたものをここに持ってきただけですけどね。

OSIV と FMP の設定方法について説明していきます。 OSIV, FMP どちらも Spring の設定方法自体は簡単です。 Open Session In View (OSIV) の設定方法 まず Open Session In View (OSIV) ですが、 Spring には 2つの解決方法があります。
  1. OpenSessionInViewFilter
  2. OpenSessionInViewInterceptor
OpenSessionInViewInterceptor は Spring MVC を利用する場合に使えるクラスです。 よって、 Spring Web Flow を使うときは、 1. OpenSessionInViewFilter になります。 その設定方法ですが、 JPA を利用する場合は、以下のような設定を web.xml に記述するだけです。
<filter>
    <filter-name>oemivFilter</filter-name>
    <filter-class>
        org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    </filter-class>
    <init-param>
        <param-name>entityManagerFactoryBeanName</param-name>
        <param-value>reportsEntityManagerFactory</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>oemivFilter</filter-name>
    <!-- ↓このパターンは利用する画面のURLに合わせてください -->
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<>タグ記号の変換ってめんどくさい...。 JPA なしの Hibernate だけで利用する場合は、以下のような設定を web.xml に記述します。 Filter クラスが変わるだけですね。
<filter>
    <filter-name>oemivFilter</filter-name>
    <filter-class>
        org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    </filter-class>
    <init-param>
        <param-name>entityManagerFactoryBeanName</param-name>
        <param-value>reportsEntityManagerFactory</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>oemivFilter</filter-name>
    <!-- ↓このパターンは利用する画面のURLに合わせてください -->
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
これらの説明はなぜか Reference には書いておらず JavaDoc にしか記述がありません。 FMP 戦略にするなら、この設定は不要です。 これで、 OSIV の設定は終わりで、自動にビューレンダリングまで Session を開いてくれます。

T.B.C.

2014年4月7日月曜日

Windows Azure の読み方、発音

Windows Azure の Azure はどう発音するのでしょうか。日本マイクロソフトは、 TV コマーシャル でも「アジュール」と呼んでいるみたいですね。
しかし英語は、
American English /ˈæʒər/
British English /ˈæʒə(r)/ or /ˈæzjʊə(r)/
と読み、「アジャ」に近いです。
Azure を連呼しているビデオを観てみましょう。


因みにそもそも azure とは
青い空 an azure sky
というように使われる、空の青さのことです。クラウドですからね。
「アジュール」のような発音するのは、フランス語ですね。
 /a.zyʁ/ m



これでも「アズール」に近いですね。
さてなぜ「アジュール」と呼ぶことにしたのか。謎ですね。

2014年4月6日日曜日

git svn コマンド 状態遷移図

 既に Subversion を使っていて、または開発者が Git を使ったことがないなどの理由で、未だ Subversion を使っていることがあると思います。
 その場合は、自分の環境だけでも Git を利用することができます。その Git 環境から Subversion repository へコミットして連携します。これにより、他の人は Subversion を使いながら自分は Git を利用できるという兎に角 better な状況を得ることができます。
 さて Git + Subversion では、Git の git svn コマンドを使うことになります。
 その使い方と状態遷移について、 Git ならあると思いますが、 git svn では中々見つからないので、作ってみました。以下の図なります。


">..."はコマンドです。
線は Subversion repository へのコミットの流れ
線は Subversion repository からの更新の流れ
です。
 Hackneyed な Subversion に苛々している方々、または現状の環境で Git に挑戦しようとする方々、お役に立てたでしょうか。

Scala on VSCode

Scala on VSCode ===================== Docker を利用した VSCode remote development 上で Scala 開発をする方法 Links ========== ## Scala on VSCode remote...