<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>JavaとSpring</title><link>http://blogs.wankuma.com/esten/category/2205.aspx</link><description>Javaとかその辺あたりのいろいろなるものをやってみんとす（グリーンミント）</description><managingEditor>片桐　継（Tugu Katagiri）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Javaを使っている時に、狭範囲内でランダムな整数をできるだけ平等に取りたい。</title><link>http://blogs.wankuma.com/esten/archive/2014/07/29/353192.aspx</link><pubDate>Tue, 29 Jul 2014 22:03:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/07/29/353192.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/353192.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/07/29/353192.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/353192.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/353192.aspx</trackback:ping><description>&lt;p&gt;ランダムな数字を取り出すのには、Randomクラスを使う。&lt;/p&gt; &lt;p&gt;&lt;a href="http://docs.oracle.com/javase/6/docs/api/java/util/Random.html"&gt;Random (Java Platform SE 6)&lt;br&gt;http://docs.oracle.com/javase/6/docs/api/java/util/Random.html&lt;/a&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;たとえば、サイコロのアプリケーションを考えた時、１～６の整数の間でランダムな数字を取り出したい、ってことがあると思う。&lt;/p&gt; &lt;p&gt;ふと思ったのだけれど、その時にRandomクラスをどう使えば、できるだけ結果が平等になるんだろうか。&lt;/p&gt; &lt;p&gt;500回振ったとして、アプリケーションの作り方は次の考え方があると思う。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;一回だけNewして、ランダム値を500回取る。  &lt;li&gt;500回Newして、ランダム値を取る。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;インスタンスの生成と破棄を考えたら、まぁ前者で作るんだけど、それでいいのかしらん？&lt;/p&gt; &lt;p&gt;と考え込んでしまったので、サンプルアプリを書いてみた。&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;/**&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt; * サイコロサンプルアプリ&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt; * @author esten&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt; *&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt; */&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RandomTests {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="rem"&gt;// ６面ダイスを count 回振ってみる&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; dice = 6;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; count = 500;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;/**&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="rem"&gt;     * 結果を画面に表示する&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="rem"&gt;     * @param rolled&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="rem"&gt;     */&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; print(&lt;span class="kwrd"&gt;int&lt;/span&gt;[] rolled){&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        final String formatString = &lt;span class="str"&gt;"dice %d = (%4d) %s \n"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        DecimalFormat df = &lt;span class="kwrd"&gt;new&lt;/span&gt; DecimalFormat(&lt;span class="str"&gt;"#0.00%"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0 ; i &amp;lt; dice ; i++){&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.printf(formatString, i, rolled[i], df.format((&lt;span class="kwrd"&gt;double&lt;/span&gt;) rolled[i] / count));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="rem"&gt;/**&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="rem"&gt;     * @param args&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="rem"&gt;     */&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; main(String[] args) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt;[] rolled = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[dice];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="rem"&gt;// ランダム一回パターン&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        Random rnd = &lt;span class="kwrd"&gt;new&lt;/span&gt; Random();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0 ; i &amp;lt; count ; i++){&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            rolled[rnd.nextInt(dice)] += 1;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.println(&lt;span class="str"&gt;"One New"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        print(rolled);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.println(&lt;span class="str"&gt;"---"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="rem"&gt;// ランダムnewパターン&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        rolled = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[dice];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0 ; i &amp;lt; count ; i++){&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            rnd = &lt;span class="kwrd"&gt;new&lt;/span&gt; Random();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            rolled[rnd.nextInt(dice)] += 1;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.println(&lt;span class="str"&gt;"New in loop"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        print(rolled);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.println(&lt;span class="str"&gt;"---"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;で、実行してみた結果。まぁ、何回かやってみるわけだけど。&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;One New
dice 0 = (  86) 17.20% 
dice 1 = (  86) 17.20% 
dice 2 = (  84) 16.80% 
dice 3 = (  83) 16.60% 
dice 4 = (  84) 16.80% 
dice 5 = (  77) 15.40% 
---
New &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; loop
dice 0 = (  77) 15.40% 
dice 1 = (  70) 14.00% 
dice 2 = (  91) 18.20% 
dice 3 = (  93) 18.60% 
dice 4 = (  88) 17.60% 
dice 5 = (  81) 16.20% 
---
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;うーん、差は大きなものではない感じ。どっちでもいいのかな？　サンプル回数を増やしてみよう。count = 50000で＾＾；&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;One New
dice 0 = (8380) 16.76% 
dice 1 = (8444) 16.89% 
dice 2 = (8222) 16.44% 
dice 3 = (8287) 16.57% 
dice 4 = (8282) 16.56% 
dice 5 = (8385) 16.77% 
---
New &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; loop
dice 0 = (8304) 16.61% 
dice 1 = (8309) 16.62% 
dice 2 = (8402) 16.80% 
dice 3 = (8391) 16.78% 
dice 4 = (8259) 16.52% 
dice 5 = (8335) 16.67% 
---
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あんまり差が出ない。でも、処理時間が後者だと目に見えて遅いのが判った。ってことは、前者の方法で良さげ。納得して使おう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/353192.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Androidアプリケーションでリソースを呼び出してみる</title><link>http://blogs.wankuma.com/esten/archive/2014/07/14/340897.aspx</link><pubDate>Mon, 14 Jul 2014 10:46:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/07/14/340897.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/340897.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/07/14/340897.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/340897.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/340897.aspx</trackback:ping><description>&lt;p&gt;作り始めて、意外と楽しくてメモが増えてるｗ&lt;/p&gt; &lt;p&gt;Androidアプリケーションを作るためのプロジェクトをEclipseで新規作成すると、一杯フォルダができる。&lt;/p&gt; &lt;p&gt;そして、このフォルダたち、それぞれ役割があって、きっと、それらの中でも良くお世話になるのが、resource関連だと思うの。&lt;/p&gt; &lt;p&gt;たとえば、サイコロアプリをつくりたいなーとか考えた時、画面やボタン、メッセージなんかは日本語かもしれないし、他の国の人が使えば、他の国の言葉の表示も必要になる。&lt;/p&gt; &lt;p&gt;そんな時、&lt;strong&gt;このリソースファイルに定義をまとめて作っておくことで、色々と作業が楽になるんだなってことが判ってきた。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;たとえば、/res/value フォルダのstrings.xml&lt;/p&gt; &lt;p&gt;今は日本語でつくってるけど、&lt;font color="#9b00d3"&gt;&lt;strong&gt;国際化対応では、このファイルをフォルダごと増殖させてフォルダ名に国コードを設定して中身を対応しておけば、あとはAndroidさんが使っている人のネイティヴ言語と比較して、使えそうなものをチョイスしてくれる仕掛けみたいね&lt;/strong&gt;&lt;/font&gt;。&lt;/p&gt; &lt;p&gt;とりあえず、日本語で今は作ってるけどｗ&lt;/p&gt; &lt;p&gt;で、話を戻して、そのstring.xmlに、ちょこっと登録。&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;string&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"app_name"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Simple Dice&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;string&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;&amp;lt;!-- ErrorMessage --&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;string&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"DRIE0001"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;日本語だよ&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;string&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #008000"&gt;&amp;lt;!-- Setting --&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"DSIZE_MAX"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;200&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;resources&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これだけで、ソースコードからはID：DRIE0001、ID：DSIZE_MAX のリソースとして中身が認識できるようになる。&lt;/p&gt;
&lt;p&gt;そこで、Contextオブジェクトを参照できるクラスで、取得用のメソッドを作っておいて、&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; String getResourceString(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; ID){
		&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; getContext().getString(ID);
	}

	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Integer getResourceInteger(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; ID){
		&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; getContext().getResources().getInteger(ID);
	}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;あとで、このメソッドにIDを渡してやれば、リソースファイルで定義した内容が取れる仕掛け。&lt;font color="#9b00d3"&gt;IDもR.stringクラスやR.integerクラスに登録された状態になっているのでインテリセンスにでてくるから探しに行かなくても大丈夫。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;ソースの中で定数定義やら、メッセージ定義やら、そういう固定リソースなものはファイルに出してしまおうね、って事がお作法。うん、覚えた。&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;後で国際化するにしても、メンテするにしても、リソースファイルの中で完結してくれるなら何よりだよね。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;おもしろいなー。こういう仕組み。&lt;/p&gt;
&lt;h3&gt;以下、呟き。&lt;/h3&gt;
&lt;p&gt;リソース読み取ればいいって判ったけど、その取得元になるアプリケーションコンテキストの実体は、どこが保持しているんだろう？&lt;/p&gt;
&lt;p&gt;アプリケーション起動時、onCreateの段階でもうすでに実体が存在しているので、OSからアプリケーション起動時に、恐らくはシングルトンで作られて、後はそれを提供していく形になってるんじゃないかなぁと考えてる。まぁ、動かして、アドレス見ればわかることだけど、まだきちんと調べてないｗ&lt;/p&gt;
&lt;p&gt;とすると、後続？のクラスたちからコンテキスト使わせるには、そのアドレスを判るように提供する仕組みさえ作っておけば、どこからでもリソース取得できるようになる。具体的には、コンストラクタでコンテキストのアドレス渡してやれば良いってだけだけどね。&lt;/p&gt;
&lt;p&gt;ただ、そうすると、反・祖結合、というか、クラス同士の結びつきが相当ベタな形になっちゃうのが、感覚的にどうよ、とか思ったりする。&lt;/p&gt;
&lt;p&gt;できるだけ、クラス間って密接な関係取らない方がコード書く時考えること少なくて済むし、バグ探しやすくなるし、リファクタリングしやすくなるし。&lt;/p&gt;
&lt;p&gt;そんな風に考えた時、SpringFrameworkってほんと、良くできた仕組みだなぁって思った。&lt;/p&gt;
&lt;p&gt;うん、なんとなく、そんなことを思っただけ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/340897.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Androidアプリケーション開発にORMLiteを使う。</title><link>http://blogs.wankuma.com/esten/archive/2014/07/08/338936.aspx</link><pubDate>Tue, 08 Jul 2014 11:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/07/08/338936.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/338936.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/07/08/338936.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/338936.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/338936.aspx</trackback:ping><description>&lt;p&gt;というわけで、Androidアプリでデータベース機能を気軽に使うために？　ORMLiteを使ってみるｗ&lt;/p&gt;&lt;a href="http://ormlite.com/"&gt;OrmLite - Lightweight Object Relational Mapping (ORM) Java Package&lt;br&gt;http://ormlite.com/&lt;/a&gt;&lt;br&gt; &lt;p&gt;使い方は次のとおりで良いみたい。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;プロジェクトへライブラリ参照を組込み  &lt;li&gt;マッピングするテーブルクラスを作成  &lt;li&gt;リソースにConfigファイルを設定  &lt;li&gt;DatabaseOpenHelperクラス作成  &lt;li&gt;ORMLiteが提供するクラスを継承して、ServiceやActivityの処理クラスを作成&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;大まかにはこんな感じ。まぁ細かい事はまだまだこれからお勉強なので、今は、ほんの触りだけ。&lt;/p&gt; &lt;h2&gt;プロジェクトへライブラリを組込み&lt;/h2&gt; &lt;p&gt;Maven使っていれば簡単。&lt;/p&gt; &lt;p&gt;&lt;a href="http://mvnrepository.com/artifact/com.j256.ormlite/ormlite-android/4.48"&gt;Maven Repository: com.j256.ormlite ≫ ormlite-android ≫ 4.48&lt;br&gt;http://mvnrepository.com/artifact/com.j256.ormlite/ormlite-android/4.48&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;ここにリポジトリ定義があるので、pom.xmlへコピペして保存。その後でプロジェクト更新すれば組込み完了。&lt;/p&gt; &lt;p&gt;&lt;font color="#9bbb59"&gt;自力の人は、jarファイルをダウンロードして、各自、プロジェクトから参照。依存関係は都度、解決してやってくださいまし。&lt;/font&gt;&lt;/p&gt; &lt;h2&gt;マッピングするテーブルクラスを作成&lt;/h2&gt; &lt;p&gt;いつものORMマッピングクラスと一緒ｗ　使うアノテーションについては、ここにリファレンスが。&lt;/p&gt; &lt;p&gt;&lt;a href="http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Class-Setup"&gt;ORMLite Documentation: 2. How to Use&lt;br&gt;http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Class-Setup&lt;/a&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;シンプルな方法は、@DatabaseTableアノテーションでテーブル名を指定して、各マッピングフィールドに@DatabaseFieldアノテーションを追加していくこと。&lt;font color="#9b00d3"&gt;ID列の存在はORMするときにはお約束。作っておくと後々楽に対応できるので、持たせる方が吉。&lt;/font&gt;&lt;/p&gt; &lt;h2&gt;リソースにConfigファイル設定&lt;/h2&gt; &lt;p&gt;ORMLiteのConfigファイルはテキスト形式なんだけど、雛型を作るためのクラスが提供されてるの。&lt;/p&gt; &lt;p&gt;OrmLiteConfigUtil っていうんだけど、これをつかってConfigファイルをリソースフォルダに生成するとミスが無く簡単。&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: #008000"&gt;/**
** /res/raw/ormlite_config.txt Gen.
** !! /res/raw directory is exists before running !!
**/&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; DatabaseConfigUtil &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; OrmLiteConfigUtil {
  &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;final&lt;/span&gt; Class&amp;lt;?&amp;gt;[] classes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Class[] {
    &lt;span style="color: #008000"&gt;// Add your ORM-Mapping classes (ex.SimpleData.class)&lt;/span&gt;
    SimpleData.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;,
  };
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; main(String[] args) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; Exception {
    writeConfigFile("&lt;span style="color: #8b0000"&gt;ormlite_config.txt&lt;/span&gt;", classes);
  }
}&lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;p&gt;さくっとクラスを作成して、Javaアプリケーション起動すると作ってくれる。&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/AndroidORMlite_5BFC/image.png" width="594" height="85"&gt;&lt;/p&gt;
&lt;p&gt;そして、作成したテキストファイルに対してアクセスできるように、次のクラスにもgenフォルダ配下のRクラスにエントリーが出来てる。&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/AndroidORMlite_5BFC/image_3.png" width="203" height="263"&gt;&lt;/p&gt;
&lt;p&gt;これでConfigファイルの設定が完了。&lt;/p&gt;
&lt;h2&gt;DataBaseHelperクラスの作成&lt;/h2&gt;
&lt;p&gt;データベースへの接続とか、初回のテーブルオブジェクト生成とか、コードにするとメンドクサそうなデータベース関連の処理をまとめてやってくれるお助けクラスがAndroidアプリケーションには準備してある。それが SQLiteOpenHelperというクラス。このクラスをラップしたORMLiteSqlliteOpenHelperクラスっていうのがORMLiteから提供されているので、これを使うとデータベース周りのことをORMLiteにお任せできる仕組みになってるんだね。&lt;/p&gt;
&lt;p&gt;ここで、ORMLiteを使う最大のメリット？　といえると思うのだけれど、色々と毎回作るのが面倒くさいDaoクラス、DAOパターンを使うとなると必ずついて回るこのクラスをここで定義しておくと、わざわざクラスを定義する必要が無くなる！。&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;実はORMLiteはDAOクラスのひな型を中で持っていて、データベーステーブルクラスと紐づけさえしておけば、そのクラスのDAOとして機能するあるの。&lt;/font&gt;&lt;font color="#000000"&gt;つまり、&lt;/font&gt;FindAllとIDを条件とするSELECT、INSERT、UPDATE、DELETEの処理だけなら、わざわざ自分で作らなくても、ORMLiteのDAOクラスを使うことで書く手間もテストの手間も省ける寸法。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#9b00d3"&gt;たしかにねー。毎回、FindAllとFindByIdとsaveとupdateとdeleteのために書いて、テストして、じゃねぇ（遠い目&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;ソースは長いので、サンプルのURLで割愛しとくｗ&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/j256/ormlite-examples/blob/master/android/HelloAndroid/src/com/example/helloandroid/DatabaseHelper.java"&gt;ormlite-examples/android/HelloAndroid/src/com/example/helloandroid/DatabaseHelper.java at master ・ j256/ormlite-examples ・ GitHub&lt;br&gt;https://github.com/j256/ormlite-examples/blob/master/android/HelloAndroid/src/com/example/helloandroid/DatabaseHelper.java&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Helperクラスができてくれれば、後は、いつもと一緒？＜を&lt;/p&gt;
&lt;h2&gt;ORMLiteが提供するクラスを継承して、ServiceやActivityの処理クラスを作成&lt;/h2&gt;
&lt;p&gt;せっかく作ったHelperクラスを使用できるように、後はORMLiteXXXX系クラスを継承して、自分の欲しい処理クラスを書いて、動かしていくだけｗ&lt;/p&gt;
&lt;p&gt;後の詳しい事は、また触りながら色々と覚えていくことにしてみようｗ&lt;/p&gt;
&lt;p&gt;気持ち、ActivityはViewのつもり、でいるので、ModelとViewModelの層でのみHelperを参照するようにしたいなぁ、というのが本音。&lt;/p&gt;
&lt;p&gt;ORMLiteXXXクラスはActivityで継承して使うから、コンストラクタで渡していくしかないけど、なんとかなりそうな感じだし、この方針でやってみよう。&lt;/p&gt;
&lt;p&gt;SpringFrameworkを使うなら、HelperクラスをSingleで持っておいて、アプリケーションコンテキストにぶら下げてガンガン使っていけるんじゃないかなーとも思うんだけど、今回は使わなかったのでそのあたりはちょっと不格好というか不器用な作りになっちゃうけど、まぁいいやｗ&lt;/p&gt;
&lt;p&gt;今日はここまでｗ&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/338936.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【TDD Advent Celndar 2012】12日目：虫退治もTDD！＋オマケ話</title><link>http://blogs.wankuma.com/esten/archive/2012/12/12/307308.aspx</link><pubDate>Wed, 12 Dec 2012 17:05:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/12/307308.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/307308.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/12/307308.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/307308.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/307308.aspx</trackback:ping><description>&lt;p&gt;TDD Advent Celndar 2012　12日目の記事になります。&lt;/p&gt; &lt;p&gt;11日目は　&lt;a href="https://twitter.com/bash0C7"&gt;@bash0C7&lt;/a&gt;　さんの&lt;/p&gt; &lt;p&gt;&lt;a href="http://d.hatena.ne.jp/bash0C7/20121211/TddAdventJp"&gt;ハイプレッシャーを克服するためのテスト駆動開発の重要な「二歩目」#TddAdventJp - koeだめ&lt;/a&gt;&lt;/p&gt; &lt;p&gt;でした。　プ、プレッシャー……、読んでて、TDDとっかかりの頃の「どーすればいいんだ」的な気持ちを思い出しました。初心忘れずでいたいよね、ってことで、12日目、行きましょう。&lt;/p&gt; &lt;p&gt; &lt;hr&gt;  &lt;p&gt;TDDは新規開発だけの手法？&lt;/p&gt; &lt;p&gt;いえいえ、リファクタリングにも使えます。&lt;/p&gt; &lt;p&gt;それだけ？&lt;/p&gt; &lt;p&gt;いえいえ、&lt;font color="#9b00d3"&gt;私は、虫退治、ことバグ取り、でも有効な手段だと思っています。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;アプリケーション稼働後や総合テスト中にバグ発覚！こんなときだってTDDで退治しちゃえば良いんです。&lt;/p&gt; &lt;p&gt;てなお話を。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;手順は次の通り。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;バグが発生するまでに呼び出されていたクラスを列挙する。  &lt;li&gt;それらのクラス個々に対して「バグ発生時のデータと条件下で本来どうあるべきだったのか」テストを追加してレッドとなるテストがあることを確認する。  &lt;li&gt;追加した全てのテストがグリーンとなるまで修正作業を行う。  &lt;li&gt;既存すべてのテストがグリーンとなることを確認する。&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;ポイントは2。バグが発生するまでに、実行されていたクラスメソッドをさかのぼり、「このクラスメソッドではこんなデータや条件の場合に、こうあるべきだった」テストを追加していく下りです。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;つまり、&lt;strong&gt;テストコードでバグ発生当時を再現していく&lt;/strong&gt;、ってことですね。もしかしたら、その想定データや条件はすでにテストにあったりするかもしれません。そうしたら、ここはとりあえずテストコードを書く必要はないな、となるでしょう。&lt;font color="#a5a5a5"&gt;現場によっては、再現作業の中で、仕様に問題があることが判ったりして、きちっとテストコードを書いていると何かと助かることもあったりします。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;そして追加したテストの中に、レッドとなるテストが存在するはずです。&lt;/p&gt; &lt;p&gt;そのテストの対象メソッドにバグが隠れている可能性が高いわけですから、実装コードの修正箇所がしぼられてきます。&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0080"&gt;&lt;strong&gt;ここまでの間に、実装は全く手を付けないで、テストコードだけに着手する、これが大事です。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0080"&gt;&lt;strong&gt;実装コードに手を付けるのは、レッドとなるテストをすべて洗い出してから、にします。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;特定と修正個所が確定したら、ここから実装コードを修正して、グリーンになれば勝利……のはずですが、そのグリーン、追加したテストだけじゃ意味がない。つまり、4.が重要になります。&lt;/p&gt; &lt;p&gt;修正したことによって、既存の「こうなるべき」ところに影響が出ているかもしれません。&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;今回追加したテストも含め、既存のテスト全てがグリーンとなることを必ず確認することが大事です。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;つまり、&lt;font color="#004000"&gt;&lt;strong&gt;TDDは新規開発、リファクタリングにのみならず、バグと問題のあぶり出し、修正後の動作担保までとってくれる、現場には有難い手法でもある&lt;/strong&gt;&lt;/font&gt;のですね。&lt;/p&gt; &lt;p&gt; &lt;hr&gt;  &lt;p&gt;以下、オマケ話。&lt;/p&gt; &lt;p&gt;私は近年Javaでプログラミングすることが多いので、テストにJunitを使っています。&lt;/p&gt; &lt;p&gt;規模の大きなアプリケーションだと、たくさんのパッケージ、クラスになってきてそれらのテストも膨大です。一連のこの機能だけの結合テストをしたい、なんて時には全部流すと時間がもったいない。&lt;/p&gt; &lt;p&gt;そこでTestSuiteクラス、実行したいテストクラスだけをまとめておける機能が備わっているクラスを使って、テストアプリケーションを作って実行していくことで効率をあげています。&lt;/p&gt; &lt;p&gt;といっても、Mainメソッドの中に対象となるテストクラスの名前がずらーっと列挙されてて、最後に１行テスト実行メソッド書く、という構成の、作業のたびに作り直しのメンドクサイものでしたけれど。&lt;/p&gt; &lt;p&gt;ところが、Junit4では列挙しなくてはならなかったTestSuiteの対象クラスをアノテーションにまとめられるようになりました。アノテーションというのはオブジェクト定義の時に付与できるパラメータのようなものなのですが、これを使うことでMainメソッドの中のコードを触る必要がなくなります。&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;@RunWith(Suite.&lt;span class="kwrd"&gt;class&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;@SuiteClasses({ AxxxTest.&lt;span class="kwrd"&gt;class&lt;/span&gt;, BxxxTest.&lt;span class="kwrd"&gt;class&lt;/span&gt;, CxxxTest.&lt;span class="kwrd"&gt;class&lt;/span&gt;, DxxxTest.&lt;span class="kwrd"&gt;class&lt;/span&gt; })&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestSuiteRunner {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; main(String[] args) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        JUnitCore.main(AllTests.&lt;span class="kwrd"&gt;class&lt;/span&gt;.getName());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;サンプルの2行目の＠マークのある1行に、あちこちのパッケージに散らばってしまったテストクラスをまとめて、その行だけ履歴管理できれば良いのですから、とっても便利。&lt;/p&gt;
&lt;p&gt;というわけで、オマケでしたｖ&lt;/p&gt;
&lt;p&gt;次はposaunehmさんです。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/307308.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>先にお詫び</title><link>http://blogs.wankuma.com/esten/archive/2012/12/11/307158.aspx</link><pubDate>Tue, 11 Dec 2012 13:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/11/307158.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/307158.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/11/307158.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/307158.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/307158.aspx</trackback:ping><description>&lt;P&gt;最近、ちょっと病気がちで執筆がままならないのでorz&lt;/P&gt;
&lt;P&gt;AdventCalendarは元気になってからリベンジします。&lt;/P&gt;
&lt;P&gt;ごめんなさい。&lt;/P&gt;
&lt;P&gt;単発で参加している。TDD Advent calendar 2012 &lt;A href="http://atnd.org/events/33846"&gt;http://atnd.org/events/33846&lt;/A&gt;　の記事は何とかアップしておきまする。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/307158.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【ぼっち SpringSource Advent Calendar 5日目】簡単なJavaアプリケーションを作ってみる～コ-ディング～</title><link>http://blogs.wankuma.com/esten/archive/2012/12/06/306382.aspx</link><pubDate>Thu, 06 Dec 2012 11:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/06/306382.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/306382.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/06/306382.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/306382.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/306382.aspx</trackback:ping><description>&lt;p&gt;This is &lt;A href="http://blogs.wankuma.com/esten/category/2290.aspx"&gt;ぼっち SpringSource Advent Calendar 2012&lt;/a&gt; 5日目の記事。  &lt;h6&gt;SpringSourceって何？&lt;/h6&gt; &lt;p&gt;&lt;a href="http://www.springsource.org/"&gt;SpringSource.org |&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.springsource.org/"&gt;http://www.springsource.org/&lt;/a&gt; &lt;p&gt;会社の名前です。色々と開発用のツールなんかを提供してます。  &lt;p&gt;とある言語のコンパイラ、とかもあります。  &lt;p&gt;C#やVisualBasicとかやってると、出会う機会が少ないかもしれませんが、名前は何度か変わっているものの、老舗です。  &lt;p&gt;書こうと思うとネタがいくらでも出てくる、それくらい、製品を数多く持っています。  &lt;p&gt;前回は  &lt;p&gt;&lt;A href="http://blogs.wankuma.com/esten/archive/2012/12/04/306284.aspx"&gt;【ぼっち SpringSource Advent Calendar 4日目】簡単なJavaアプリケーションを作ってみる～設計～&lt;/a&gt; &lt;p&gt;というわけで、今日はSpringを使った簡単なJavaのアプリケーションのお話の続き  &lt;hr&gt;  &lt;h4&gt;ごめんなさい、間違い見つけたのでアップしなおしになっちゃいました。&lt;font color="#809ec2"&gt;でも、ぼっちだから良いよね&lt;/font&gt;&lt;/h4&gt; &lt;h4&gt;サンプルJavaアプリケーションを実装する。&lt;/h4&gt; &lt;p&gt;作るクラスはすでに決まってましたね。 &lt;ul&gt; &lt;li&gt;現在日付時刻を指定されたフォーマットで文字列にするメソッドをDateFormatterクラス  &lt;li&gt;JVMから実行するためのMainメソッドをもつDateDisplayerクラス &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;では、実装作業。 &lt;p&gt;まずは、DateFormatterクラスの作成。SpringFrameworkでアプリケーションを作成する時、アプリケーションコンテキストで呼び出すクラスは動作を抽象化してInterfaceを持たせることが多いです。 &lt;p&gt;Interfaceを作成して、&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ead44810-81a0-4b05-a3b6-e4b3849778a4" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package katagiri.sample.adventCalendar2012;

public interface DateFormatter {
	
	String getMessage();

}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Interfaceをもつクラスを作成。&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cc9784cf-9eb6-469a-a754-b32456236465" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package katagiri.sample.adventCalendar2012;

import java.util.Date;
import java.util.Locale;

public class DateFormatterImpl implements DateFormatter {
	
	private String formatString;
	private String header;
	private String footer;
	
	/**
	 * Get Formatting String
	 */
	
	public String getMessage() {
		
		org.springframework.format.datetime.DateFormatter myFormatter = new org.springframework.format.datetime.DateFormatter(getFormatString());
		
		StringBuilder sb = new StringBuilder();
		
		sb.append(getHeader());
		sb.append(myFormatter.print(new Date(), Locale.JAPAN));
		sb.append(getFooter());
		
		
		return sb.toString();	
	}

	public String getHeader() {
		return header;
	}

	public void setHeader(String header) {
		this.header = header;
	}

	public String getFooter() {
		return footer;
	}

	public void setFooter(String footer) {
		this.footer = footer;
	}

	public String getFormatString() {
		return formatString;
	}

	public void setFormatString(String formatString) {
		this.formatString = formatString;
	}

}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;アプリケーションコンテキスト定義XMLファイルの作成&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dfbb96fb-ef74-49fd-831a-0d65d2deff6d" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="xml"&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;

	&lt;description&gt;Samplecode for SpringSource AdventCalendar 2012.&lt;/description&gt;

	&lt;context:component-scan base-package="katagiri.sample.adventCalendar2012" /&gt;
	
	&lt;bean id="dateFormatter" class="katagiri.sample.adventCalendar2012.DateFormatterImpl"&gt;
		&lt;property name="formatString"  value="yy/MM/dd hh:mm:ss" /&gt;
		&lt;property name="header" value="" /&gt;
		&lt;property name="footer" value="" /&gt;
	&lt;/bean&gt;

&lt;/beans&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;DateDisplayerクラスの作成&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a7e91aaa-5b34-4d27-8071-d52b7923c167" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="java"&gt;package katagiri.sample.adventCalendar2012;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DateDisplayer {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		BeanFactory factory = new ClassPathXmlApplicationContext("appContext.xml");
		
		DateFormatter formatter = (DateFormatter) factory.getBean("dateFormatter");
		
		System.out.println(formatter.getMessage());
	}
	
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、実装終わり。
&lt;p&gt;動かすと、コンソールに日付時間が表示されます。
&lt;p&gt;続きは、また次回。


&lt;img src ="http://blogs.wankuma.com/esten/aggbug/306382.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【ぼっち SpringSource Advent Calendar 4日目】簡単なJavaアプリケーションを作ってみる～設計～</title><link>http://blogs.wankuma.com/esten/archive/2012/12/04/306284.aspx</link><pubDate>Tue, 04 Dec 2012 22:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/04/306284.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/306284.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/04/306284.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/306284.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/306284.aspx</trackback:ping><description>&lt;p&gt;This is &lt;a href="http://blogs.wankuma.com/esten/category/2290.aspx"&gt;ぼっち SpringSource Advent Calendar 2012&lt;/a&gt; 4日目の記事。&lt;/p&gt; &lt;h2&gt;SpringSourceって何？&lt;/h2&gt; &lt;p&gt;&lt;a href="http://www.springsource.org/"&gt;SpringSource.org |&lt;/a&gt; &lt;br&gt;&lt;a href="http://www.springsource.org/"&gt;http://www.springsource.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;会社の名前です。色々と開発用のツールなんかを提供してます。&lt;/p&gt; &lt;p&gt;とある言語のコンパイラ、とかもあります。&lt;/p&gt; &lt;p&gt;C#やVisualBasicとかやってると、出会う機会が少ないかもしれませんが、名前は何度か変わっているものの、老舗です。&lt;/p&gt; &lt;p&gt;書こうと思うとネタがいくらでも出てくる、それくらい、製品を数多く持っています。&lt;/p&gt; &lt;p&gt;前回は&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.wankuma.com/esten/archive/2012/12/03/306237.aspx"&gt;【ぼっち SpringSource Advent Calendar 3日目】簡単なJavaアプリケーションを作ってみる&lt;/a&gt;&lt;/p&gt; &lt;p&gt;というわけで、今日はSpringを使った簡単なJavaのアプリケーションのお話の続き。&lt;/p&gt; &lt;hr&gt;  &lt;h2&gt;サンプルJavaアプリケーションのクラス設計をする&lt;/h2&gt; &lt;p&gt;まず最初の一歩、簡単なJavaアプリケーション作成！、とはいうものの、焦らず、&lt;font color="#ff0000"&gt;まずはクラス設計をしましょう&lt;/font&gt;。&lt;/p&gt; &lt;p&gt;今回は、次の点を考慮して作るつもりです。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;コンソールに現在日付時刻を表示する。  &lt;li&gt;表示する際のフォーマットは稼働後に変更できるようにする。 &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;ということは、クラスは次の２つを用意すれば良いと考えられます。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;現在日付時刻を指定されたフォーマットで文字列にするメソッドをDateFormatterクラス  &lt;ul&gt; &lt;li&gt;プロパティに日付時刻をフォーマットするための書式を持つ &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;JVMから実行するためのMainメソッドをもつDateDisplayerクラス  &lt;ul&gt; &lt;li&gt;仕事として、1.のクラスから受け取った文字列をコンソールに表示する。 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;それぞれのクラスの役割と、プロパティ、メソッドについてこの段階で大まかに整理しておきましょう。&lt;/p&gt; &lt;p&gt;今回は省いていますが、細かなチェック仕様や条件についても同時にまとめられれば尚良いですね。&lt;/p&gt; &lt;p&gt;TDDの手法で行う場合には、特にそこは重要になります。&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;このフェーズはJava言語に限らず、全てのアプリケーション開発においてとても大切な作業です。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;私の経験上、これでいいやでなんとなくでまとめて進めると、だいたいその後で手戻りに時間がかかってしまうことになってます。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;作業順番は&lt;/p&gt; &lt;ol&gt; &lt;li&gt;DateFormatterクラスの作成  &lt;li&gt;アプリケーションコンテキスト定義XMLファイルの作成  &lt;li&gt;DateDisplayerクラスの作成 &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;実行時に呼ばれる順番の下から上がっていく感じでしょうか。&lt;/p&gt; &lt;p&gt;作るものが決まれば、あとは実装にむけて作業を進めます。&lt;/p&gt; &lt;p&gt;続きはまた次回。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/306284.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【Spring Advent Calendar 2012】3日目：AbstractRoutingDataSourceを使った接続先動的切替の実装</title><link>http://blogs.wankuma.com/esten/archive/2012/12/03/306239.aspx</link><pubDate>Mon, 03 Dec 2012 19:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/03/306239.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/306239.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/03/306239.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/306239.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/306239.aspx</trackback:ping><description>&lt;p&gt;「ぼっち SpringSource Advent Calendar 2012」開催中ですが、&lt;/p&gt; &lt;p&gt;こちらはそのあとで見つけて、勢いで参加したｗ　&lt;a href="http://atnd.org/events/34294"&gt;Spring Advent Calendar 2012&lt;/a&gt;　3日目の記事になります。&lt;/p&gt; &lt;p&gt;2日目は@mike_neckさんの&lt;/p&gt; &lt;p&gt;&lt;a href="http://mikeneck.blogspot.jp/2012/12/spring-roo.html"&gt;mike、mikeなるままに…: 今更Spring Rooを紹介しる&lt;/a&gt;&lt;br&gt;&lt;a href="http://mikeneck.blogspot.jp/2012/12/spring-roo.html"&gt;http://mikeneck.blogspot.jp/2012/12/spring-roo.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;でした。おー、Rooですね！CUIのみでプログラミングレスなところがレトロで新しいよねｖ　ってことで、3日目、行きましょう。&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;Springでデータベース接続と処理を行う時、LocalSessionFactoryBeanという接着剤の役割クラスを使うことで簡単便利になりました。今回は、そこから呼ばれるDataSourceクラスをちょっと変わった基底DataSouceクラスに変更して、動的に接続先を切り替える実装について書いてみようと思います。&lt;/p&gt; &lt;p&gt;主人公となるクラスはAbstractRoutingDataSourceです。&lt;/p&gt; &lt;p&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.html"&gt;AbstractRoutingDataSource(JavaDoc)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;使い方の簡単なイメージはこんな感じ。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;AbstractRoutingDataSourceを継承した新しいクラスAを作成する  &lt;li&gt;AのプロパティTargetDataSourcesを切替える対象となるDatasouceのリストで初期化する  &lt;li&gt;AをSessionFactoryに組み込む&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;これだけ？はい、&lt;font color="#ff0000"&gt;追加で必要な事はこれだけ&lt;/font&gt;ですｗ。&lt;/p&gt; &lt;p&gt;実際に、&lt;font color="#9b00d3"&gt;&lt;strong&gt;すでに稼働している月次データベースアプリケーションに対して、1月～12月の月ごとにあるデータベース(テーブルは既存と全て同じものをもつ12個の新規データベース)に自動で接続先を切り替えてアクセスするように変更する、&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;という要件をサンプルケースとしてみます。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;作成するポイントは次のとおり。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;月ごとに接続する先を自動で振り分ける処理を作る。  &lt;li&gt;作成したクラスと接続先の設定をアプリケーションコンテキストに記述する。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;まずはAbstractRoutingDataSourceを継承したMyRoutingDataSourceクラスを作成。&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;import java.util.Calendar;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;import sun.util.calendar.LocalGregorianCalendar.Date;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyRoutingDataSource extends AbstractRoutingDataSource {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    @Override&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; Object determineCurrentLookupKey() {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        Calendar nowDate = Calendar.getInstance();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; String.format(&lt;span class="str"&gt;"db_%03d"&lt;/span&gt;, nowDate.get(Calendar.MINUTE));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }    &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;determineCurrentLookupKeyメソッドでSessionFactoryに接続先を決定させるKeyをreturnする処理を実装します。SessionFactoryはそのKeyを基にTargetDataSourcesのリストからDataSourceを取得します。&lt;/p&gt;
&lt;p&gt;次に、作成したクラスを既存のコンテキストに組み込み、接続先データソースのリストをTargetDataSourcesに設定します。&lt;font color="#809ec2"&gt;(&lt;/font&gt;&lt;font color="#646b86"&gt;注：サンプルでは細かな設定部分を省略しています。)&lt;/font&gt;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- db_001からdb_012までのDatasourceを作成。細かな設定は省略 --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="db_001"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="org.springframework.jdbc.datasource.DriverManagerDataSource"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="url"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="jdbc:hsqldb:hsql://192.168.30.5:9001/jan"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="db_002"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="org.springframework.jdbc.datasource.DriverManagerDataSource"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="url"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="jdbc:postgresql://192.168.30.78:5432/feb"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- 同じように003～012まで作成 --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- 同じようにデータベース名をキーとしたマップで初期化する --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="dataSource"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="katagiri.sample.advent2012.MyRoutingDataSource"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="targetDataSources"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;map&lt;/span&gt; &lt;span class="attr"&gt;key-type&lt;/span&gt;&lt;span class="kwrd"&gt;="blog.datasource.CustomerType"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="db_001"&lt;/span&gt; &lt;span class="attr"&gt;value-ref&lt;/span&gt;&lt;span class="kwrd"&gt;="db_001"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="db_002"&lt;/span&gt; &lt;span class="attr"&gt;value-ref&lt;/span&gt;&lt;span class="kwrd"&gt;="db_002"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="db_003"&lt;/span&gt; &lt;span class="attr"&gt;value-ref&lt;/span&gt;&lt;span class="kwrd"&gt;="db_003"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- 同じように003～012まで作成 --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;map&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="defaultTargetDataSource"&lt;/span&gt; &lt;span class="attr"&gt;ref&lt;/span&gt;&lt;span class="kwrd"&gt;="db_001"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bean&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- SessionFactoryは既存のものをそのままなので詳細は省略 --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;!-- DAOは既存のものをそのままなので省略 --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;これで実装作業が終わりました。&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;本来なら大量コーディングが予想されただろう実装が、「こんなこともあろうかと」基底クラスがあってそれを継承するだけ、コンテキストに設定を加えていくだけ、と、とても少ない作業で出来てしまいました。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;まさに&lt;font color="#008000" size="4"&gt;&lt;strong&gt;SpringFramework有難う！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;次はJSUGでご活躍されている@tikeda123さんの記事になります。&lt;font color="#809ec2"&gt;こちらも要ちぇきら♪&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/306239.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【ぼっち SpringSource Advent Calendar 3日目】簡単なJavaアプリケーションを作ってみる</title><link>http://blogs.wankuma.com/esten/archive/2012/12/03/306237.aspx</link><pubDate>Mon, 03 Dec 2012 19:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/03/306237.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/306237.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/03/306237.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/306237.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/306237.aspx</trackback:ping><description>&lt;p&gt;This is &lt;a href="http://blogs.wankuma.com/esten/category/2290.aspx"&gt;ぼっち SpringSource Advent Calendar 2012&lt;/a&gt; 2日目の記事。&lt;/p&gt; &lt;h2&gt;SpringSourceって何？&lt;/h2&gt; &lt;p&gt;&lt;a href="http://www.springsource.org/"&gt;SpringSource.org |&lt;/a&gt; &lt;br&gt;&lt;a href="http://www.springsource.org/"&gt;http://www.springsource.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;会社の名前です。色々と開発用のツールなんかを提供してます。&lt;/p&gt; &lt;p&gt;とある言語のコンパイラ、とかもあります。&lt;/p&gt; &lt;p&gt;C#やVisualBasicとかやってると、出会う機会が少ないかもしれませんが、名前は何度か変わっているものの、老舗です。&lt;/p&gt; &lt;p&gt;書こうと思うとネタがいくらでも出てくる、それくらい、製品を数多く持っています。&lt;/p&gt; &lt;p&gt;前回は&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.wankuma.com/esten/archive/2012/12/02/306144.aspx"&gt;【ぼっち SpringSource Advent Calendar 2日目】Springに触れる前に必要なこと&lt;/a&gt;&lt;/p&gt; &lt;p&gt;というわけで、今日はSpringを使った簡単なJavaのアプリケーションのお話。&lt;/p&gt; &lt;hr&gt;  &lt;h2&gt;どのファイルを作ればいいの？&lt;/h2&gt; &lt;p&gt;簡単なJavaアプリケーションを作るのに必要なファイルは次のもの。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;アプリケーションコンテキストを構成するためのXMLファイル  &lt;li&gt;Javaオブジェクトの元となるクラスファイル  &lt;li&gt;Javaアプリケーションを起動するMainクラスファイル &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;というわけで、とりあえず、コンソールに今日の日付を表示するアプリケーションを作ってみることにします。&lt;/p&gt; &lt;p&gt;続きはまた次回。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/306237.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>【ぼっち SpringSource Advent Calendar 2日目】Springに触れる前に必要なこと</title><link>http://blogs.wankuma.com/esten/archive/2012/12/02/306144.aspx</link><pubDate>Sun, 02 Dec 2012 13:49:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2012/12/02/306144.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/306144.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2012/12/02/306144.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/306144.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/306144.aspx</trackback:ping><description>&lt;p&gt;This is ぼっち SpringSource Advent Calendar 2012 2日目の記事。&lt;/p&gt; &lt;h2&gt;SpringSourceって何？&lt;/h2&gt; &lt;p&gt;&lt;a href="http://www.springsource.org/"&gt;SpringSource.org |&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.springsource.org/"&gt;http://www.springsource.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;会社の名前です。色々と開発用のツールなんかを提供してます。&lt;/p&gt; &lt;p&gt;とある言語のコンパイラ、とかもあります。&lt;/p&gt; &lt;p&gt;C#やVisualBasicとかやってると、出会う機会が少ないかもしれませんが、名前は何度か変わっているものの、老舗です。&lt;/p&gt; &lt;p&gt;書こうと思うとネタがいくらでも出てくる、それくらい、製品を数多く持っています。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;というわけで、今日はSpringを使うために必要なお話。&lt;/p&gt; &lt;hr&gt;  &lt;h2&gt;Springってどんなの？&lt;/h2&gt; &lt;p&gt;Springで作ったJavaアプリケーションは簡単にイメージすると、こんな感じ。&lt;font color="#9b00d3"&gt;あくまでも、イメージね。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://esten.cside.com/wankuma/img/SpringSource--Advent-Calender-1SpringSou_DE/image_3.png" width="454" height="283"&gt;&lt;/p&gt; &lt;p&gt;シンプルなアプリケーションを作る場合だと、私たちが作る部分はこのうち、色のついているところ。&lt;/p&gt; &lt;p&gt;SpringFrameworkが間に入って色々な仕事をしてくれます。&lt;/p&gt; &lt;p&gt;&lt;font color="#9bbb59"&gt;あ、ちなみにJVMはJVM(Java仮想マシン)のことで、これのおかげで、私たちの作ったアプリケーションはWindowsでもLinuxでも動きます。なので、これ以降のお話も、WindowsPCやLinuxPCやMacとか、気にしないで進めますね。&lt;/font&gt;&lt;/p&gt; &lt;p&gt; &lt;hr&gt; &lt;h2&gt;SpringFrameworkアプリケーションを作ってみる。&lt;/h2&gt; &lt;p&gt;というわけで、よく判らないけど、そういう時はとりあえず、いじってみよう。&lt;/p&gt; &lt;p&gt;開発環境は、Eclipseを使うことが多いのだけれど、SpringSourceからは自社製品を使ってもらいやすいように、カスタマイズした&lt;strong&gt;SpringToolsSuite&lt;/strong&gt;というのが作られてます。なので、せっかくだからそれを使ってみることにします。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;JDKをダウンロードとしてセットアップする。最新のJDKで大丈夫。&lt;br&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;Java SE Downloads&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;  &lt;li&gt;STSをダウンロードしてセットアップする。ダウンロードとインストールは、私の過去のエントリを参考に。&lt;br&gt;&lt;a href="http://blogs.wankuma.com/esten/archive/2012/09/03/288756.aspx"&gt;springSourceToolSuiteをセットアップする&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.wankuma.com/esten/archive/2012/09/03/288756.aspx"&gt;http://blogs.wankuma.com/esten/archive/2012/09/03/288756.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;セットアップがすんだら、さっそく新規プロジェクトを作ってみる。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;メニューのファイル＞新規＞プロジェクトを選択。  &lt;li&gt;たくさん出てくるので、springを入力してフィルタリングすると、&lt;br&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://esten.cside.com/wankuma/img/SpringSource--Advent-Calender-1SpringSou_DE/image_4.png" width="535" height="279"&gt;  &lt;li&gt;目的の「springプロジェクト」を選択。それ以外は今のところはちょっと忘れておくｗ  &lt;li&gt;プロジェクト作成ダイアログで名前を入力して、完了。&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;できたてのプロジェクトはまだからっぽ。&lt;/p&gt; &lt;p&gt;なので、ここに、さっきの図の中の色のついている部分を作って、Javaアプリケーションにしてみることにしてみます。&lt;/p&gt; &lt;p&gt;続きはまた次回。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/306144.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>