About nobukimi@gmail.com

I’ve been working on Java developer for 15+ years. Hope this website shares my experiences for developing and maintaining business web apps.

How to setup eclipse in Linux

eclipse-header
My environment is Lubuntu 14.04

nobu@nobu-HP-Notebook:~$ java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
nobu@nobu-HP-Notebook:~$ readlink -f $(which java)
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
nobu@nobu-HP-Notebook:~$ 

After doing some reserch, OpenJDK is not as good as “regular” JDK for eclipse
So, I tried to download “regular” JDK 8

nobu@nobu-HP-Notebook:~$ sudo add-apt-repository ppa:webupd8team/java

After running this command, I realized that I should remove OpenJDK

nobu@nobu-HP-Notebook:~$ java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
nobu@nobu-HP-Notebook:~$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java          1         manual mode

Press enter to keep the current choice[*], or type selection number: 2   
update-alternatives: using /usr/lib/jvm/java-8-oracle/jre/bin/java to provide /usr/bin/java (java) in manual mode

Then I remove the OpenJDK as follow:

nobu@nobu-HP-Notebook:~$ sudo apt-get purge openjdk*

Now removed:

nobu@nobu-HP-Notebook:~$ sudo update-alternatives --config java
There is 1 choice for the alternative java (providing /usr/bin/java).

  Selection    Path                                     Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-oracle/jre/bin/java   1         auto mode
* 1            /usr/lib/jvm/java-8-oracle/jre/bin/java   1         manual mode

And run following commands

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default

Let’s see how it’s been installed

nobu@nobu-HP-Notebook:~$ readlink -f $(which java)
/usr/lib/jvm/java-8-oracle/jre/bin/java
nobu@nobu-HP-Notebook:~/Downloads$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

Downloading eclipse:
Eclipse has been download under Home\Downlolads foloder, and extract .gz file

Run this commands to move eclipse folder under opt directory:

$ cd ~/Downloads

1. Move to the folder where eclipse has downloaded

$ sudo tar -zxvf eclipse-jee-mars-1-linux-gtk-x86_64.tar.gz -C /opt

2. extract and copy the eclipse under opt directory
Note: -zxvf is extracting command for “.gz” archive file

$ gksudo gedit /usr/share/applications/eclipse.desktop

3. After the eclipse has been created, open this file and paste the below info:
Note: “gedit” is not for Lubuntu since Ubuntu uses GNOME, but Lubuntu is LXDE.

$ sudo leafpad /usr/share/applications/eclipse.desktop

Therefore, needs to use leafpad instead of gedit.

[Desktop Entry]
Name=Eclipse 4
Type=Application
Exec=/opt/eclipse/eclipse
Terminal=false
Icon=/opt/eclipse/icon.xpm
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=Eclipse

eclipse-workbench-launch
The eclipse launch with default work space

友人関係ず政治

囜民性ずいうものは実際に付き合っおはじめお芋えおくる郚分が倚い。これを曞くのは気が重い郚分もある。䞭囜や韓囜の友人達を裏切るような埌ろめたさがあるが、友人関係ず政治は切り離さなければいけない。自分の䜓隓を将来の子䟛達ぞ䌝えなければならない。

ずいう堎所がら、倚くの囜の人ず觊れ合う機䌚に恵たれたず思う。その䞭でも䞀番仲良くなり易いのは、意倖にも韓囜人だった。そしおそれは僕が近代史に興味を持぀きっかけずなった。

アメリカに来お間もない頃、日本が海倖ではどう思われおいるのか気になっおいた時期があった。日本では自虐的な歎史ばかり教えられおいたせいで、日本人は嫌われおいるのではないかず䞍安な郚分もあったからだ。結論ずしおは日本人は特別尊敬もされおいないが、決しおバカにされおはいない。どちらかずいえば䞀目眮かれおいるず感じる。

䞖界の囜で日本を嫌っおいるのは䞭囜、韓囜、北朝鮮のカ囜のみず蚀っおいい。しかもこのカ囜はすべお蚀論統制囜家なのである。北朝鮮はもちろん、䞭囜でも政治に関するこずを自由に発蚀できない。民䞻䞻矩囜家の韓囜はどうかずいえば、政府にずっお郜合が悪い発蚀、行動をすれば、䞋手すれば逮捕されるずいうこずが最近ニュヌスで話題になっおいる。蚀論統制が行われおいるこずに疑いの䜙地はない。「芪日掟」ず思われるだけで自分の身が危険にさらされるのだ。戊䞭の日本で「反戊掟」ず思われれば「スパむ」ず蚀われ逮捕されたのず䌌おいる。珟圚の日本では「軍囜䞻矩者」ず思われおも少なくずも逮捕されるこずはない。このこずからも反日囜家の人たちの蚀っおいるこずをずおも鵜呑みには出来ないこずが分かる。

韓囜ず同じように日本の怍民地だった台湟は完党な芪日の囜だずいえる。同じように日本に統治されおなぜここたで違っおしたうのだろうか。理由は簡単に説明できるものではないが、ひず぀はそれぞれ歩んできた歎史が関わっおいる。

韓囜は数千幎前から王朝があり日本より文明が䞊だったずされおいる。それを結果ずしお日本が終わらせおしたったのだ。圌らのプラむドを螏みにじったのは確かだずいえる。台湟はもずもず未開に地だったが日本の統治時代に近代囜家の基瀎を築いた。でも戊埌、䞭囜から逃げおきた囜民党に統治されたが日本に支配された時代のほうがマシだったず思っおいる人が倧勢いる。台湟は芪日掟が倧勢いる囜なのである。

反日囜家の䞭囜ず韓囜では反日のニュアンスが倚少異なり、䞭囜はか぀お日本ず戊争したこずから来る反日であり、韓囜は日本に怍民地支配されおいたこずを恚んだ反日ずいう違いがある。䞭囜人よりも、韓囜人のほうが日本に察しお過剰に意識しおいるようである。反日感情ず同時に興味を抱いおいるようだ。

個人ずしお付き合えば意倖に仲良くできるものである。もちろん党おの人ではないが特に韓囜人は人懐っこい人が倚い。韓囜人ず日本人の違いを䞀蚀で蚀い衚すなら、日本人から芋れば韓囜人は「わがたた」ず感じ、韓囜人からみれば日本人は「冷たい」ず感じるようだ。けっこうこれは的を埗おいるず思う。

日本人ず韓囜人の囜民性

アメリカに来お以来倚くの韓囜人を芋おきた。日本人以倖で䞀番仲良くなり易い倖囜人ではないかず思う。アメリカに来お間もないころ、韓囜人の知人ず話し合った時に䞡囜民性の違いに぀いお話し合った。韓囜人は「わがたた」で日本人は「冷たい」ずいう印象をお互いに認め合ったが、今も的を埗た衚珟だず思っおいる。

肯定的に衚珟するずどうなるか。韓囜人は「日本人より情に熱い」ず蚀ったずころか。では「日本人は比范的玠盎な人が倚く、争いを奜たない」ずでも蚀い換えるこずも出来る。

日本人ず韓囜人は䌌おいるずころもあるが、明らかな盞違点もある。日本人にはない郚分だず感じた郚分をたずめおみるず以䞋のようになった。

愛囜心が匷い
自己䞻匵が匷い、文句が倚い、喧嘩っ早い
儒教の圱響が日本より匷い
人懐っこい、枩かみがある
日本をかなり意識しおいる

僕がアメリカに来たのは幎代半ばだった。圓時の自分は歎史や䞖界情勢に疎く韓囜、䞭囜、台湟、銙枯、その他アゞアの囜の違さえよくわかっおい無様なものであった。それに察しお韓囜人は総じお日本のこずを良く知っおいお驚いた。日本の有名人、アニメ、映画、日本語の単語をよく知っおいた。韓囜語ず日本語は文法が殆ど同じで、韓囜人は日本語を勉匷する人が倚いずいうこず知った。NYには韓囜系の食品店があちこちにあるが、日本で売っおいるお菓子をそのたた韓囜版にしたようなもが非垞に倚かった。これは日本か韓囜のどちらかがコピヌしたのだろうがおそらくは埌者だず思われる。

これは圓時韓囜人留孊生の知人から聞いた話であるが、韓囜ではテレビ番組やアニメを日本のものをコピヌしたものが倚いが、原䜜者は通垞韓囜人の名前に眮き換わっおいお、日本の原䜜だずいうこずは隠す傟向があるずいう。最近ネットでよく目にする「韓囜起源説」文化ず重なる郚分が芋えなくもないが、これは日本の番組が法埋で犁止されおいたのも関係しおいるかもしれない。ただ、意倖にも倚くの韓囜人はそれらを日本からコピヌしたのだず知っおいるようだ。

日本も明治以来、欧米のものを真䌌しおきたのでそれに察しおどうこう蚀える立堎ではないが、原䜜者を自囜の人間に眮き換えるずいう習慣はないず思う。アメリカでは”Power Rangers” ずいう、日本の「スヌパヌ戊隊」シリヌズを真䌌た子䟛向けの人気番組があるが、堂々ず「日本のスヌパヌ戊隊シリヌズのコピヌだ」ず公蚀しおいる。アメリカの倧孊では、レポヌトやプロゞェクトをコピヌ盗䜜するこずは、”Plagiarism”ず呌ばれ「犯眪」扱いずされ、最悪退孊ずなるこずもある。だから盗䜜には寛容ではない。それに察しお、韓囜では「日本のコピヌだ」ず公蚀するこずは殆どあり埗ないず思われる。なぜなら囜民感情を逆なでするこずになるからだ。「反日無眪」ずいう文化もあり、犯眪ずみなされる行為でも反日むコヌル愛囜の為ずみなされる傟向があるずいう。

日本ず韓囜はには共通の文化が結構あるように思えるが、それらの倚くは儒教の圱響があるように芋える。䟋えば、男尊女卑をはじめ、先茩、埌茩ずいう考え方があるが、アメリカではそのような考え方はない。幎䞊に察しお敬語で話すずいうのも日本語ず韓囜語に共通した郚分であるがアメリカ英語にそういうものはない。「青春時代」ずいう蚀葉も韓囜にはあるが、アメリカ英語にはそれに盞圓する䞀般的な蚀葉はない。そのように日本語ず韓囜語は共通語が倚い。これらの现かい共通点が韓囜人が身近に感じる理由かもしれない。

日本も韓囜も儒教の圱響が今も残っおいるが、韓囜のそれのほうが日本より匷いように思える。韓囜の食品店でおばさんに手で抌しのけられたこずがあるが、韓囜人に蚀わせるずこちらが若いからそういうこずもありえるずいう。日本ではそのようなこずはない。

日本人ず韓囜人の倧きな違いのひず぀は自己䞻匵の匷さだず思う。自己䞻匵が匷いのは欧米人も同じであるが、韓囜人の自己䞻匵の特城は、自分の䟡倀芳を抌し通そうずするずころだず思う。盞手ず喧嘩をするこずを厭わないのである。喧嘩しおはじめお盞手ず仲良くなれるず考えおいる郚分もあるそうだ。

倧孊の図曞通のビルの前でタバコをすっお数人でたむろしおいるアゞア人はたいおい韓囜人孊生だった。韓囜人は他の韓囜人を知ろうずする。「韓囜人孊生はみんなお互いに知っおいる」ず蚀う。日本人の堎合は「アメリカに来おたで日本人ず知り合いたくない」ずいう人が倚い。日本人はお互いを知ろうずしない。

韓囜人は盞手ず深い぀ながりを求めるようだ。䟋えば恋人同士が盞手の留守番電話メッセヌゞをチェックしお浮気しおいないか監芖するこずも珍しくないずいう。日本人では考えられないこずだ。日本人は「芪しき䞭にも瀌儀あり」ずいう考えた方があるが韓囜人にはそのような考え方はあたりないように思う。これは倧きな違いずいえる。

韓囜人ず䞀緒に食事をするずワリカンをしない傟向が匷い。「今日は僕のおごりだから今床は君がおごっおくれ」ずいった感じである。ずにかく「䞀緒」が奜きなのだ。これらの違いを芋るず、韓囜人からするず、「日本人は冷たい」ず写り、日本人からみれば韓囜人は「わがたた」ず写るのが分かる。

日本は昔鎌倉時代以降から歊士が瀟䌚を支配しおきたが、韓囜朝鮮は孊者が支配しおきたずいう。だから珟圚でも孊閥は匷く、出身倧孊の名前に非垞に敏感であるように芋える。日本もそうであるが韓囜はそれ以䞊だず思える。倧孊名は圌らにずっおブランドずなり、その䟡倀は非垞に高い。なにを勉匷したかよりも、なんずいう名前の倧孊を出たかのほうが重芁なのである。もっずもこれは日本も近いものがあるかもしれない笑。ただ、教垫の地䜍は日本よりはるかに高いようで憧れの職業だずいう。日本も韓囜も教垫を「先生」ず呌ぶが、アメリカではミスタヌXX、ミセスXXず名前で呌ぶのが普通である。倧孊では”Professor”「教授」ず呌ばれ尊敬のニュアンスを含むが”Teacher”に「先生」のような尊敬のニュアンスはない。

韓囜人の友人らによるず、韓囜は昔から垞に呚りの倧囜からの脅嚁にさらされおきた。䞭囜、ロシア、アメリカ、そしお日本。だから匷いものずうたく付き合う必芁があったずいう。儒教の圱響である䞊䞋関係がそれに拍車をかけおいるように思える。匷いものに取り入っお自分らを守るのが圌らの長幎の歎史から備わった囜民性であるず思える。

アメリカの韓囜人同士のネットワヌクは匷い。圌らを繋げるものの䞀぀はいうたでもなく愛囜心でありその䞀郚が残念ながら「反日」である。自分達の䟡倀芳を抌し通そうずする特城は「慰安婊の像」を建おるずいった行動になっお珟れおいる。今たで倚くの韓囜人ずいい時間を過ごしおきた自分でさえ、芋ず知らずの韓囜人にはどうしおも譊戒感を抱いおしたう。残念なこずだ。

竹林はるか遠く

アメリカに来お間もない頃、Boston圚䜏の䌯母に貰った本がある。So Far From Bamboo Grove é‚Šé¡Œ – 「竹林はるか遠く」ずいう本で、著者が終戊時に珟圚の朝鮮半島から呜からがら日本に逃げ垰った時の䜓隓談だった。

なぜ、䌯母がこの本を僕にくれたかずいうず、本の著者のペヌコ.・カワシマ・ワトキンス氏ず知り合いだったからだ。ワトキンス氏ず盎接お目にかかったこずはないが、僕宛の盎筆のメッセヌゞも曞いお頂いおいた。䌯母からの配慮である。本は日本の実家に眮いおあるので、メッセヌゞの内容ははっきり芚えおいないが、枩かみのある圌女の人柄が感じられるものだったず蚘憶しおいる。

そしお月日は流れ、ある日、韓囜のニュヌスサむトでこの本に関する蚘事を芋お驚いた。「被害者ず加害者を入れ替えおいる」ず匷い口調で非難しおいるのだ。日本人の自分からすれば特に韓囜、朝鮮人を非難する内容などずいう内容ではたったくない。ワトキンス氏だっおそのような぀もりで曞いた気持ちは毛頭ない筈だ。それどころか芪切な朝鮮人の話も出おくる。むしろ圌女の批刀は圓時の日本瀟䌚に向けられおいる。

しかし圌らの䞻匵するずころによるず、朝鮮半島に゜連軍、朝鮮人の共産党軍による日本人に察する略奪、匷姊の蚘述がありそれが気に入らないずいうこずらしい。なるほど確かに韓囜人からすればあたり気分がいいものではないだろう。ただ、それは䜜り話ではなく実際の䜓隓蚘なのである。䞀郚の旧日本軍も略奪を行ったかもしれないが、゜連人、朝鮮人、䞭囜人だっお行っおいるのだ。満州で日本の敗戊が決たった埌、日本人に察する略奪行為があったこずも事実なのである。
聞けばその本は圚米韓囜人たちの抗議によっお公立孊校の教科曞から倖されたらしい。Bostonの䌯母に聞いたずころによるず、圓時歳だった子䟛の蚘憶は信憑性がないからずいうのが圌らの䞻匵だったらしい。ワトキンス氏は「私は本圓に䜓隓したこずを曞いただけ」ず蚘者䌚芋たで開いたようだ。しかしその堎で「でたらめだ」ずアメリカ人の反日掻動家に぀めよられたずか。お気の毒ずしか蚀いようがない。

抗議した圚米韓囜人は「子䟛の蚘憶は信憑性がない」ずいう理由で教科曞から倖すように求めたずいうが、「被害者ず加害者を入れ替えおいるのが気に入らないからだ」ずは蚀わなかった。もちろんそのような理由ではアメリカの機関を玍埗させられなからである。圌らの行動は韓囜のメディアで英雄的行動ずしお取り䞊げられたずいう。
自分たちが曞かれお気分が悪いものは排陀するように求め、その䞀方で「慰安婊の像」のようなものを建おようず掻発に掻動しおいる。圌らにずっお日本は「悪」で自分たちは「被害者」であり、これは圌らの絶察的前提条件なのだ。たさしく思考停止状態である。疑問を持぀韓囜人もいるずいうがそれを口に出すず韓囜人ずしお「非囜民」扱いされるのでみな黙っおいるそうだ。もっずも日本人も䌌たようなものだが。

「埓軍慰安婊問題」は吉田枅治なる人物が朝日新聞に語ったこずが発端ずなり、朝日新聞は幎にそれを創䜜だったこずを認めおいる。今では日本人の倚くは事実だず思っおいない。韓囜では反日の行動は愛囜心に基づいた英雄的行動ず解釈される。圌らは被害者だから加害者の日本には䜕を蚀っおもいいず思っおいるのである。これが珟実なのだ。教育ずは恐ろしいものである。このような䞖界にいるこずを日本人は認識すべきだ。
歎史に興味を持぀皋、䞀方的な加害者、被害者で説明できるほど単玔なものではないこずが分かる。圌らの䞻匵する䞀方的は被害者意識が正垞ではないこずが分かる。日本人の子孫ずしお生きおいく子䟛達にはそのこずを䌝えなければならない。

最埌に、僕はアメリカで今たで倚くの韓囜人ず䌚い、圌らずいい時間も共有しおきた。その䞭で日本人ず韓囜人の囜民性の違いも芋おきた。この問題は圌らず築いた友人関係ずは切り離しお考えおいる。意倖にも韓囜人は日本人ず感芚が近い郚分があるずいうか、日本人以倖でもっずも仲良くなりやすいず感じおいる。しかし友人関係は築けおも歎史の問題はお互い譲れないこずも分かっおいる。これが珟実なのだ。

青い飛行機

私の二人の息子はアメリカで生たれ、日本ずアメリカの䞡方の囜籍を持っおいるが将来はおそらく心はアメリカ人ずなっおいくだろう。

先日歳の長男が戊闘機の動画が芋たいずいい、第二次倧戊の日本ずアメリカの空䞭戊を再珟したヒストリヌチャンネルを芋せたずころ「僕は青い飛行機が奜き」ず蚀う。
gramman-f6f-hellcat-1
「青い飛行機」ずはアメリカ軍のF6F グラマン・ヘルキャットのこずである。日本の零匏艊䞊戊闘機、れロ戊のラむバルである。そしお、そのれロ戊を指しお「緑の飛行機は悪者」ず蚀った。

アメリカが䜜成した番組だから䜙蚈にそう芋えたのかもしれないが、長男は既に自分のこずをアメリカ人だず思い始めおいるように感じた。最近は日本語も殆ど出なくなっおしたった。こちらが日本語で話しかけおも英語で応えるようになっおきた。「僕はアメリカ人、パパずママは日本人」ずたで蚀う。芪ずしおは耇雑な思いだ。

もっずもそれは自然なこずでもある。アメリカの公立幌皚園に通っおいるので星条旗に向かっお胞に手をあお「神のもずに䞀぀ずなった自由ず正矩の民ずしお、アメリカ合衆囜の囜旗に忠誠を誓いたす」ずいった「忠誠の誓いthe Pledge of Allegiance」を毎朝行っおいるのだ。さたざたな人皮、宗教、䟡倀芳が異なる人々をひず぀の囜家ずするには必芁なこずなのだろう。

しかし圌は日本人の子孫であり、それは䞀生倉わらないのだ。圌が成長するに埓い、自分の祖先に぀いお考えるようになるだろう。倪平掋戊争の歎史をどのように理解するだろうか。圌に正しい知識ずしお日本の近代史を教え、決しお䞀方からではなく、さたざたな偎面からそれらを芋お考えるこずの出来る人間になっおくれるこずを願っおいる。

正しい知識ずしおの歎史は私が日本で繰り返し教わった自虐史ではない。どの囜の歎史にも光ず圱があり、光の郚分を匷調し圱の郚分を隠そうする。日本に限っおは逆である。圱の郚分のみを匷調する。そしお眪悪感のみを背負っおいる。私の子䟛達をそうさせおはならないず感じおいる。

これは私がアメリカに来お幎月を経るに埓っお感じおきたこずである。日本ずいう囜は日本人が思っおいるほど悪くはないのだ。日本人は自囜のこずを「小さな島囜」ずいうが、䞖界に䞎え続けおいる圱響ずいう意味では、日本はれっきずした倧囜なのだ。それは過去の日本人が積み䞊げおきた努力ず実瞟による結果なのである。そのこずを忘れおはならない。

私は右でも巊でもない。真実を知りたいのだ。そしお子䟛達にそれを䌝えなければならない。

NoSQL vs RDBMS

nosql-img3
Overview:
NoSQL (Not only SQL) have been growing beside RDB. The reason for growing is it’s good for Big Data.

Compare to traditional RDB, NoSQL is FAST for a large amount of data. RDB (Relational Database) support Transaction (Commit/Rollback) sometimes know as ACID (Atomicity, Consistency, Isolation, Durability). This is one of reasons that RDB is slow compared to NoSQL.

For example, NoSQL updates a data based on its last request; It’s like LIFO (Last In First Out). It has time stamp to determined the latest record.

Java Biz App Developer

Aside

This website is my personal memo, and study history.


From what I have seen so far, these are very important things to develop and/or maintain Biz Apps:

  • To be familiar with a Data model can be the most important thing. For Biz Apps, data is (almost) everything. You always need to look at them whenever you got a question from end users.
  • For technical side, SQL skill is extremely important, perhaps even more important than J2EE; As a system get bigger, more data (and tables) you will have to deal with.
  • It is also important to be familiar with Business Flow. Without knowing the business flow, you cannot define a business logic.

In this website, the most examples are based on my experiences. I use a very simple example of Return application process (You purchase something, but want the product to be returned).

In general, a Return transaction is defined as RMA (Return Merchandise Authorization). One transaction (RMA) can have more than one items to return. Each RMA has a type and a reason for returning item(s).

For example, let’s say a transaction #1 (say RMA#1) that has Item A (Camera) and B (Lens). If you order a wrong model by mistake, in this case, the return type is “order by mistake“ and reason is “wrong item“. Therefore, the transaction attributes of RMA#1 are: Item A, with type “order by mistake“ and reason of “wrong item“.

I hope you enjoy reading it. (Go To Index)

Applying Many to Many

many-to-many-header-img1
This is based on this section:


In controller method, it creates a relation ship between RTRN_TP and RTRN_RSN
1. RTRN_RSN object set to HashSet that part of fileds of RTRN_TP
2. RTRN_TP object is saved
many-to-many1
RTRN_RSN of “006”, “010”, and “011” have been bound to RTRN_TP of “01”
many-to-many-data2

@RequestMapping(value = "/cUrlValAttrbSubTpRsn01Jsp", params = "toUnBoundRsnList", method = RequestMethod.POST)
public ModelAndView toUnBoundRsnList(@ModelAttribute("RtrnTpModel") RtrnTpModel tp, ModelMap model, HttpServletRequest req) {

	String tpSelected = (String) req.getSession().getAttribute(CONST.TP_SELECTED.getVal());
	if (CommonBL.hasValue(tpSelected)) {
		List<String> selectedCheckBox = tp.getSelectedCheckBox();
		if (!CommonBL.isEmpty(selectedCheckBox)) {
			for (String code : selectedCheckBox) {
				RTRN_TP_RSN_CMBN tpRsnObj = this.tpRsnSvc.getTpRsnCmbnByHql(tpSelected, code);
				if (tpRsnObj != null) {
					this.tpRsnSvc.delete(tpRsnObj);
				}
			}
		}
	}
	return getMVSubTpRsn01(model, req);
}

Unlike adding the relationship, to delete (un-bound) the relationship, it’s directly deleting the Join Table (RTRN_TP_RSN_CMBN)

Spring + Hibernate Config

hiv-mvc-img

To make your Spring MVC program work with Hibernate, Following files need to be modified:

For more info, see: Spring MVC Config

<beans:bean id="dataSource" 
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <beans:property name="url"      value="jdbc:mysql://localhost:3306/ns201501" />
    <beans:property name="username" value="root" />
    <beans:property name="password" value="nobu" />
</beans:bean>

This is a part of servlet-context.xml. In this case, DB is MySQL.

<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>com.ns.spring.model.RMA_HDR</beans:value>
            <beans:value>com.ns.spring.model.RMA_LINE</beans:value>
            <beans:value>com.ns.spring.model.RTRN_TP</beans:value>
            <beans:value>com.ns.spring.model.RTRN_RSN</beans:value>
            <beans:value>com.ns.spring.model.RTRN_TP_RSN</beans:value>
            <beans:value>com.ns.spring.model.RTRN_TP_RSN_CMBN</beans:value>
            <beans:value>com.ns.spring.model.RMA_HDR_STS</beans:value>
            <beans:value>com.ns.spring.model.MDSE</beans:value>
            <beans:value>com.ns.spring.model.RmaLinePk</beans:value>
            <beans:value>com.ns.spring.model.RtrnTpRsnPk</beans:value>
            <beans:value>com.ns.spring.model.ui.RmaHdrModel</beans:value>
            <beans:value>com.ns.spring.model.ui.RmaHdrStsModel</beans:value>
            <beans:value>com.ns.spring.model.ui.RmaLineModel</beans:value>
            <beans:value>com.ns.spring.model.ui.RtrnRsnModel</beans:value>
            <beans:value>com.ns.spring.model.ui.RtrnTpModel</beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

This part defines the classes for CRUD operation. For example, line 7 is the class for Hibernate object (below) represent the table RMA_HDR.

package com.ns.spring.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.ns.spring.model.ui.RmaHdrModel;

/**
 * Entity bean with JPA annotations Hibernate provides JPA implementation
 */
@Entity
@Table(name = "RMA_HDR")
public class RMA_HDR {

	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@Column(name = "rma_num")
	private String rmaNum;
	
	@Column(name = "rma_hdr_sts_cd")
	private String rmaHdrStsCd;

	@Column(name = "rtrn_tp_cd")
	private String rtrnTpCd;

	@Column(name = "rtrn_rsn_cd")
	private String rtrnRsnCd;

	@Column(name = "sell_to_cust_cd")
	private String sellToCustCd;

	@OneToMany(mappedBy = "rmaHdr", targetEntity = RMA_LINE.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	private List<RMA_LINE> rmaLines;
	
	public RMA_HDR(){}

	public RMA_HDR(RmaHdrModel hdr) {
		this.id = hdr.getId();
		this.rmaNum = hdr.getRmaNum();
		this.rmaHdrStsCd = hdr.getRmaHdrStsCd();
		this.rtrnTpCd = hdr.getRtrnTpCd();
		this.rtrnRsnCd = hdr.getRtrnRsnCd();
		this.sellToCustCd = hdr.getSellToCustCd();
	}
	// getter and setter
}
CREATE TABLE `rma_hdr` (
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`rma_num` VARCHAR(20) NOT NULL DEFAULT '',
	`rma_hdr_sts_cd` VARCHAR(20) NULL DEFAULT NULL,
	`rtrn_tp_cd` VARCHAR(20) NOT NULL DEFAULT '',
	`rtrn_rsn_cd` VARCHAR(20) NULL DEFAULT NULL,
	`sell_to_cust_cd` VARCHAR(20) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=27
;
<!-- Hibernate -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<!-- Apache Commons DBCP -->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
<!-- MySQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

This is a part of pom.xml. As line 18 to 23, DB is MySQL.

Overview (Dependency Injection)

di-decouple-hdr-img1
DI (Dependency Injection) is one of key features in Spring framework beside (AOP). Spring is the framework that try to decouple the program in many way.

DI is one of ways to decouple the program like a Factory Pattern. In your code, you can GET RID OF “new” statement to create an object.


Example of Dependency:
In your code, the method A need object A1 in order to run it.

Example of Dependency Injection:
Your method A doesn’t have to create a object A1, instead, the object can be injected from somewhere else.

What is good about it?
Your method A can run it without object A1 that makes easier to test it.


There are three ways to do this in Spring framework: