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という場所がら、多くの国の人と触れ合う機会に恵まれたと思う。その中でも一番仲良くなり易いのは、意外にも韓国人だった。そしてそれは僕が近代史に興味を持つきっかけとなった。

アメリカに来て間もない頃、日本が海外ではどう思われているのか気になっていた時期があった。日本では自虐的な歴史ばかり教えられていたせいで、日本人は嫌われているのではないかと不安な部分もあったからだ。結論としては日本人は特別尊敬もされていないが、決してバカにされてはいない。どちらかといえば一目置かれていると感じる。

世界の国で日本を嫌っているのは中国、韓国、北朝鮮の3カ国のみと言っていい。しかもこの3カ国はすべて言論統制国家なのである。北朝鮮はもちろん、中国でも政治に関することを自由に発言できない。民主主義国家の韓国はどうかといえば、政府にとって都合が悪い発言、行動をすれば、下手すれば逮捕されるということが最近ニュースで話題になっている。言論統制が行われていることに疑いの余地はない。「親日派」と思われるだけで自分の身が危険にさらされるのだ。戦中の日本で「反戦派」と思われれば「スパイ」と言われ逮捕されたのと似ている。現在の日本では「軍国主義者」と思われても少なくとも逮捕されることはない。このことからも反日国家の人たちの言っていることをとても鵜呑みには出来ないことが分かる。

韓国と同じように日本の植民地だった台湾は完全な親日の国だといえる。同じように日本に統治されてなぜここまで違ってしまうのだろうか。理由は簡単に説明できるものではないが、ひとつはそれぞれ歩んできた歴史が関わっている。

韓国は数千年前から王朝があり日本より文明が上だったとされている。それを結果として日本が終わらせてしまったのだ。彼らのプライドを踏みにじったのは確かだといえる。台湾はもともと未開に地だったが日本の統治時代に近代国家の基礎を築いた。でも戦後、中国から逃げてきた国民党に統治されたが日本に支配された時代のほうがマシだったと思っている人が大勢いる。台湾は親日派が大勢いる国なのである。

反日国家の中国と韓国では反日のニュアンスが多少異なり、中国はかつて日本と戦争したことから来る反日であり、韓国は日本に植民地支配されていたことを恨んだ反日という違いがある。中国人よりも、韓国人のほうが日本に対して過剰に意識しているようである。反日感情と同時に興味を抱いているようだ。

個人として付き合えば意外に仲良くできるものである。(もちろん全ての人ではないが)特に韓国人は人懐っこい人が多い。韓国人と日本人の違いを一言で言い表すなら、日本人から見れば韓国人は「わがまま」と感じ、韓国人からみれば日本人は「冷たい」と感じるようだ。けっこうこれは的を得ていると思う。

日本人と韓国人の国民性

アメリカに来て以来多くの韓国人を見てきた。日本人以外で一番仲良くなり易い外国人ではないかと思う。アメリカに来て間もないころ、韓国人の知人と話し合った時に両国民性の違いについて話し合った。韓国人は「わがまま」で日本人は「冷たい」という印象をお互いに認め合ったが、今も的を得た表現だと思っている。

肯定的に表現するとどうなるか。韓国人は「日本人より情に熱い」と言ったところか。では「日本人は比較的素直な人が多く、争いを好まない」とでも言い換えることも出来る。

日本人と韓国人は似ているところもあるが、明らかな相違点もある。日本人にはない部分だと感じた部分をまとめてみると以下のようになった。

1.愛国心が強い
2.自己主張が強い、文句が多い、喧嘩っ早い
3.儒教の影響が日本より強い
4.人懐っこい、温かみがある
5.日本をかなり意識している

僕がアメリカに来たのは90年代半ばだった。当時の自分は歴史や世界情勢に疎く韓国、中国、台湾、香港、その他アジアの国の違さえよくわかってい無様なものであった。それに対して韓国人は総じて日本のことを良く知っていて驚いた。日本の有名人、アニメ、映画、日本語の単語をよく知っていた。韓国語と日本語は文法が殆ど同じで、韓国人は日本語を勉強する人が多いということ知った。NYには韓国系の食品店があちこちにあるが、日本で売っているお菓子をそのまま韓国版にしたようなもが非常に多かった。これは日本か韓国のどちらかがコピーしたのだろうがおそらくは後者だと思われる。

これは当時韓国人留学生の知人から聞いた話であるが、韓国ではテレビ番組やアニメを日本のものをコピーしたものが多いが、原作者は通常韓国人の名前に置き換わっていて、日本の原作だということは隠す傾向があるという。最近ネットでよく目にする「韓国起源説」文化と重なる部分が見えなくもないが、これは日本の番組が法律で禁止されていたのも関係しているかもしれない。ただ、意外にも多くの韓国人はそれらを日本からコピーしたのだと知っているようだ。

日本も明治以来、欧米のものを真似してきたのでそれに対してどうこう言える立場ではないが、原作者を自国の人間に置き換えるという習慣はないと思う。アメリカでは”Power Rangers” という、日本の「スーパー戦隊」シリーズを真似た子供向けの人気番組があるが、堂々と「日本のスーパー戦隊シリーズのコピーだ」と公言している。アメリカの大学では、レポートやプロジェクトをコピー(盗作)することは、”Plagiarism”と呼ばれ「犯罪」扱いとされ、最悪退学となることもある。だから盗作には寛容ではない。それに対して、韓国では「日本のコピーだ」と公言することは殆どあり得ないと思われる。なぜなら国民感情を逆なですることになるからだ。「反日無罪」という文化もあり、犯罪とみなされる行為でも反日イコール愛国の為とみなされる傾向があるという。

日本と韓国はには共通の文化が結構あるように思えるが、それらの多くは儒教の影響があるように見える。例えば、男尊女卑をはじめ、先輩、後輩という考え方があるが、アメリカではそのような考え方はない。年上に対して敬語で話すというのも日本語と韓国語に共通した部分であるがアメリカ英語にそういうものはない。「青春時代」という言葉も韓国にはあるが、アメリカ英語にはそれに相当する一般的な言葉はない。そのように日本語と韓国語は共通語が多い。これらの細かい共通点が韓国人が身近に感じる理由かもしれない。

日本も韓国も儒教の影響が今も残っているが、韓国のそれのほうが日本より強いように思える。韓国の食品店でおばさんに手で押しのけられたことがあるが、韓国人に言わせるとこちらが若いからそういうこともありえるという。日本ではそのようなことはない。

日本人と韓国人の大きな違いのひとつは自己主張の強さだと思う。自己主張が強いのは欧米人も同じであるが、韓国人の自己主張の特徴は、自分の価値観を押し通そうとするところだと思う。相手と喧嘩をすることを厭わないのである。喧嘩してはじめて相手と仲良くなれると考えている部分もあるそうだ。

大学の図書館のビルの前でタバコをすって数人でたむろしているアジア人はたいてい韓国人学生だった。韓国人は他の韓国人を知ろうとする。「韓国人学生はみんなお互いに知っている」と言う。日本人の場合は「アメリカに来てまで日本人と知り合いたくない」という人が多い。日本人はお互いを知ろうとしない。

韓国人は相手と深いつながりを求めるようだ。例えば恋人同士が相手の留守番電話メッセージをチェックして浮気していないか監視することも珍しくないという。日本人では考えられないことだ。日本人は「親しき中にも礼儀あり」という考えた方があるが韓国人にはそのような考え方はあまりないように思う。これは大きな違いといえる。

韓国人と一緒に食事をするとワリカンをしない傾向が強い。「今日は僕のおごりだから今度は君がおごってくれ」といった感じである。とにかく「一緒」が好きなのだ。これらの違いを見ると、韓国人からすると、「日本人は冷たい」と写り、日本人からみれば韓国人は「わがまま」と写るのが分かる。

日本は昔(鎌倉時代以降)から武士が社会を支配してきたが、韓国(朝鮮)は学者が支配してきたという。だから現在でも学閥は強く、出身大学の名前に非常に敏感であるように見える。日本もそうであるが韓国はそれ以上だと思える。大学名は彼らにとってブランドとなり、その価値は非常に高い。なにを勉強したかよりも、なんという名前の大学を出たかのほうが重要なのである。もっともこれは日本も近いものがあるかもしれない(笑)。ただ、教師の地位は日本よりはるかに高いようで憧れの職業だという。日本も韓国も教師を「先生」と呼ぶが、アメリカではミスターXX、ミセスXXと名前で呼ぶのが普通である。大学では”Professor”「教授」と呼ばれ尊敬のニュアンスを含むが”Teacher”に「先生」のような尊敬のニュアンスはない。

韓国人の友人らによると、韓国は昔から常に周りの大国からの脅威にさらされてきた。中国、ロシア、アメリカ、そして日本。だから強いものとうまく付き合う必要があったという。儒教の影響である上下関係がそれに拍車をかけているように思える。強いものに取り入って自分らを守るのが彼らの長年の歴史から備わった国民性であると思える。

アメリカの韓国人同士のネットワークは強い。彼らを繋げるものの一つはいうまでもなく愛国心でありその一部が残念ながら「反日」である。自分達の価値観を押し通そうとする特徴は「慰安婦の像」を建てるといった行動になって現れている。今まで多くの韓国人といい時間を過ごしてきた自分でさえ、見ず知らずの韓国人にはどうしても警戒感を抱いてしまう。残念なことだ。

竹林はるか遠く

アメリカに来て間もない頃、Boston在住の伯母に貰った本がある。So Far From Bamboo Grove 邦題 – 「竹林はるか遠く」という本で、著者が終戦時に現在の朝鮮半島から命からがら日本に逃げ帰った時の体験談だった。

なぜ、伯母がこの本を僕にくれたかというと、本の著者のヨーコ.・カワシマ・ワトキンス氏と知り合いだったからだ。ワトキンス氏と直接お目にかかったことはないが、僕宛の直筆のメッセージも書いて頂いていた。伯母からの配慮である。本は日本の実家に置いてあるので、メッセージの内容ははっきり覚えていないが、温かみのある彼女の人柄が感じられるものだったと記憶している。

そして月日は流れ、ある日、韓国のニュースサイトでこの本に関する記事を見て驚いた。「被害者と加害者を入れ替えている」と強い口調で非難しているのだ。日本人の自分からすれば特に韓国、朝鮮人を非難する内容などという内容ではまったくない。ワトキンス氏だってそのようなつもりで書いた気持ちは毛頭ない筈だ。それどころか親切な朝鮮人の話も出てくる。むしろ彼女の批判は当時の日本社会に向けられている。

しかし彼らの主張するところによると、朝鮮半島にソ連軍、朝鮮人の共産党軍による日本人に対する略奪、強姦の記述がありそれが気に入らないということらしい。なるほど確かに韓国人からすればあまり気分がいいものではないだろう。ただ、それは作り話ではなく実際の体験記なのである。一部の旧日本軍も略奪を行ったかもしれないが、ソ連人、朝鮮人、中国人だって行っているのだ。満州で日本の敗戦が決まった後、日本人に対する略奪行為があったことも事実なのである。
聞けばその本は在米韓国人たちの抗議によって公立学校の教科書から外されたらしい。Bostonの伯母に聞いたところによると、当時11歳だった子供の記憶は信憑性がないからというのが彼らの主張だったらしい。ワトキンス氏は「私は本当に体験したことを書いただけ」と記者会見まで開いたようだ。しかしその場で「でたらめだ」とアメリカ人の反日活動家につめよられたとか。お気の毒としか言いようがない。

抗議した在米韓国人は「子供の記憶は信憑性がない」という理由で教科書から外すように求めたというが、「被害者と加害者を入れ替えているのが気に入らないからだ」とは言わなかった。もちろんそのような理由ではアメリカの機関を納得させられなからである。彼らの行動は韓国のメディアで英雄的行動として取り上げられたという。
自分たちが書かれて気分が悪いものは排除するように求め、その一方で「慰安婦の像」のようなものを建てようと活発に活動している。彼らにとって日本は「悪」で自分たちは「被害者」であり、これは彼らの絶対的前提条件なのだ。まさしく思考停止状態である。疑問を持つ韓国人もいるというがそれを口に出すと韓国人として「非国民」扱いされるのでみな黙っているそうだ。もっとも日本人も似たようなものだが。

「従軍慰安婦問題」は吉田清治なる人物が朝日新聞に語ったことが発端となり、朝日新聞は2014年にそれを創作だったことを認めている。今では日本人の多くは事実だと思っていない。韓国では反日の行動は愛国心に基づいた英雄的行動と解釈される。彼らは被害者だから加害者の日本には何を言ってもいいと思っているのである。これが現実なのだ。教育とは恐ろしいものである。このような世界にいることを日本人は認識すべきだ。
歴史に興味を持つ程、一方的な加害者、被害者で説明できるほど単純なものではないことが分かる。彼らの主張する一方的は被害者意識が正常ではないことが分かる。日本人の子孫として生きていく子供達にはそのことを伝えなければならない。

最後に、僕はアメリカで今まで多くの韓国人と会い、彼らといい時間も共有してきた。その中で日本人と韓国人の国民性の違いも見てきた。この問題は彼らと築いた友人関係とは切り離して考えている。意外にも韓国人は日本人と感覚が近い部分があるというか、日本人以外でもっとも仲良くなりやすいと感じている。しかし友人関係は築けても歴史の問題はお互い譲れないことも分かっている。これが現実なのだ。

青い飛行機

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

先日5歳の長男が戦闘機の動画が見たいといい、第二次大戦の日本とアメリカの空中戦を再現したヒストリーチャンネルを見せたところ「僕は青い飛行機が好き」と言う。
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 OFnew” 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: