My JavaOne 2015 Session: CON3339

Screen Shot 2015-09-26 at 10.50.10 AM

Happy programming weekend! I’m going to have a speaking session in JavaOne 2015 on Oct 28, 11:30 AM, with my colleague Arshal as below. See you on SF.

Real-World Batch Processing with Java EE [CON3339]

Arshal Ameen, Team Manager, Rakuten, Inc.
Hirofumi Iwasaki, Group Manager, Rakuten, Inc.

Batch processing plays a key role in most organizations, mainly because it doesn’t need much human intervention. This session explores various ways in which batch processing can implemented with Java EE. It includes SWOT analysis of batch implementation with JSR 352 and embedded EJB containers. By the end of the session, the attendees should be able to understand when to use JSR 352 and when not to, the benefits of using an embedded EJB container for batch processing, and the best practices to follow when designing batch processes.

Conference Session
Wednesday, Oct 28, 11:30 a.m. | Parc 55—Cyril Magnin II/III

Apple IIGS (ROM 01) Battery Replacement (Easy Version)

The internal battery of my new Apple IIGS (ROM 01) was dead completely, so it cannot hold some setting value like date time, screen color, slot configuration, RS232C value, and so force.

I decided to replace to newer one. This article shows how to replace the internal battery of IIGS ROM 01, with almost easiest working.

Open up the IIGS, remove power unit (just unlock with one notch in front sidem and pull out the power line), you’ll see the big battery just half size of AA.

Unfortunately the ROM 01’s battery was fixed to main board and cannot replace easily. I planned to replace with new battery holder for replacing in the future.

Here’s a picture of dead battery. Fixed with solder to mainboard.


Cut out the lead line of the corner of “L” by nipper, leave the “I” line for attaching new battery holder. Don’t remove the whole lead line completely if you want to avoid hard work of solder operations (might be damaged to the main board).


The completely dead 1/2 AA size battery was made on March, 1987. Vintage one. It might almost same birthday as my IIGS itself.


I ordered new battry box with lead line, and new 1/2 AA battery for replacement. You can purchase them at some electric parts shop with cheaper, just 300JPY each (almost 3USD each).  You can also find them in ebay, but much higher price than parts shop.

If you live in Japan, you can find from here and here.


To avoid solder operation for avoding big damage to the IIGS main board, I replace the lead line of the new battery case to another capped line as below. Just a easy work with solder. Well done.


Just cap the new lead line to the left “I” line (from older battery) of the IIGS main board. Upside is plus, so place red line to here. The original place of the battery is little smaller than the battery case, so placed the new battery holder to the side of mainboard, with double-sided tape.


Re-attached power unit and connect the power line to mainboard. Completed.


Test power on, and set date time and screen color, and power down. After some second, power on again, and you’ll see the new setting screen color and date time already set.


If not, check the lead line of the battery holder. Good luck.

My First Apple II, Apple IIGS



Arrived my first Apple II, Apple IIGS ROM 01 version. Great 16-bit, good old Apple machine. Lovely big rainbow apple!!

I wanted to have my own Apple II for a long time, from my elementary school. But unfortunately, it was not common platform in Japana. I could not find any Apple II in my hometown.

After over 20 years, I decided to have my Apple IIgs as my first Apple II experience. Ordered and sent from the USA, but unfortunately some keytops were broken due to no aircap coverage. Oh, vintage GS Apple keyboard!

Fixed them with putty and glue, now the system works correctly on my desk. It contains GS AppleColor monitor, Apple Keyboard (made in Japan),  Apple Mouse (made in USA), and two Apple 3.5 Drives.

The internal battery was already dead so I’m going to replace it later. Post the replacement process soon. (Update: see here).

Seven Points for Applying Java EE 7 – Java Day Tokyo 2015

Last day I had a speaking session in “Java Day Tokyo 2015”. Here’s the session material for it.

This materials shows how to start your project with EE 7. There are many check points for starting the design of systems, and this describe some important points for it.

It seems that the Java EE engineers are increasing rapidly around the world, from the success of Java EE 6.

After six years passed from the EE 6 release, some Japanese company planned to update their older Struts-based older J2EE systems to the latest, with the EOL situation of them.

I wanted to say “start right now, with EE 7”, but there’s huge technical changes between J2EE-era and today. Start from here, with joyful EE programming.

最速でJava EE 7 Webアプリを作る – 2014 Java EE Advent Calendar

Will be translated in English soon. Sorry for inconvenience.

この記事は2014 Java EE Advent Calendarの12月24日分になります。キリスト教徒ではないのですがメリークリスマス。

今年はJava EEに関する大きな発表が無かったのでネタ的に困る訳なのですが、個人的な「温故知新」ブームに乗っかり、こんなのをやってみることにします。

Slide1はい、超スタンダードなJava EEの使い方です。勿論、Java EE 7で。残念ながら商用サーバーのEE 7対応はまだですが、来年は対応するという話を聞きますので、今のうちに慣れておきましょうということで。

ただ作るだけでは面白くないので、できるだけ最速でイチから手順を追って作っていくことにします。勿論NetBeansの自動生成機能を駆使します。また、お仕事でもそのまま使えるようなコードで、という制約付きです。Java EEはめんどくさい、という意見を聞きますが、そんなことないよ、という事を証明するべく、こんな挑戦を敢えてクリスマスイブにやってみるわけです。暇人と呼ばないで(笑) ※ほんとは正直忙しすぎて死にそうです


今回の環境です。本番でもそこそこ使えるようなものを選んでみました。OSは何でもOKですね。わたしは普段使いのOS X Yosemiteを・・・と書いていたのですが、前の記事の通り個人PCをWindowsに戻してしまったので、途中まで出来ていたものをWindows 8.1 64-bitで再度やり直しました。Realforce 87Uが快適すぎるので助かりました。


  • JDK: JDK 8 の最新版 (この記事では JDK 8u25)
  • IDE: NetBeans 8 の最新版 (この記事ではNetBeans 8.0.2)
  • App Server: GlassFish 4 の最新版 (この記事では GlassFish 4.1)
  • Database: MySQL 5.6 の最新版 + MySQL Workbench の最新版 (この記事では MySQL 5.6.22)

1. データベース

まともな企業システムをターゲットにしているので、データベースがあって然るべきでしょう。DB処理はJava EEの華です。ここをすっとばしたJEEの説明が多い気がするので、ここに改めてまとめておきます。


1-1. データベースの準備

こういうのは依存関係の深い場所から作っていくのが正しい在り方です。ですのでまず、データベースからですね。Oracle Databaseが所謂スタンダードかなと思いますが、フリーのXEがOS X用に出ていないので、ここでは涙を呑んでMySQLをインストールします。インストーラーを落としてぽいっと入れれば終わりです。

CUIで諸々やるのは面倒なので、MySQL Workbenchも入れてしまいましょう。Windows版だとDeveloper Defaultを選べばいいです。以下Windows版をメインに書きますので、OS XとかLinuxの方はユーザーアカウント等はインストール後にMySQL Workbench等で個別に設定する必要があります。






あとはデフォルト値でホイホイ進めれば、最後にMySQL Workbenchが起動します。rootの接続が出来ているので、これをクリックしましょう。


最初にスキーマを作ります。「Create New Schema」を選択します(+の付いたデータベースアイコン)。名前は「advent」でいいですかね。CollationはServer Defaultで良いかと思います。


「Users and Privileges」で「advent」を選択し、(開発用途なので)全権を「Select “ALL”」で選んでおきましょう。終わったらApply。※当然ですが本番運用でこんな事はしないで下さい。


これでadventユーザーがadventスキーマを使えるようになりました。これでこのMySQL Workbenchの役目は終わりです。これ以降はNetBeansで作業することにします。そっちが楽です。

 1-2. スキーマの作成

さてNetBeansを起動して、Serversタブを開いて、今回作ったスキーマを接続しましょう。右クリックして「Register MySQL Server」を選択して登録しましょう。接続情報は上の通りですね。分からない方は以下を参考に。




では今回のテーブルを作りましょう。「Advent」スキーマをを開いて、Tablesで右クリックして「Create Table」。以下のような感じで。ぶっちゃけここはお任せなので、めんどくさい人は1カラムでもいいでしょう。


  • Customer
  • ————-
  • Name VARCHAR(100) NOT NULL
  • PostalCode VARCAR(10) NOT NULL
  • Address VARCHAR(200) NOT NULL
  • Phone VARCHAR(30) NOT NULL
  • Note VARCHAR(1000)


  1. 2. サーバーサイドを作成する

さて、ようやくJava EEです。以下の大半の処理はデータベースを以下に効率的に処理するかという観点になってます。これはCOBOLシステムに代表される「コンテナー管理型システム」の現代版としてJava EEが元々設計されていることに由来します。超高額で場所を取るホストシステムが不要であり、家のPCで気軽に無料でプログラミングできるJava EEがある現代は恵まれた世界だなと思います。

今回作成するパッケージはは3つ。CRUDを行うDAOと、ビジネスロジックを記述するLogic、および、データベースの写像としてのEntityです。LogicとDAOをごっちゃにして作る人がいますがやめたほうがいいでしょう。自動生成がメインであり、JPQLやCriteria Queryの記述がメインのDAOはあくまでDAOとして分けておかないと、数年後に破綻する羽目に陥る気がします。


なお、以下NetBeansを使っていますが、一点だけお勧めの設定変更があります。デフォルト設定ではフォントがMonospacedになっていて非常に見辛いので、Courier NewやConsolaなど英字等幅フォントにに変更すると非常に見やすくなります。Tool > Options > Fonts & Colorsからどうぞ。

2-1. サーバーサイドプロジェクトを作成する

NetBeansからプロジェクトの作成で、Maven > Web Application を選択します。ちなみにJava EE 6からWARにEJBを入れられるようになったので、今回もそれを活用します。必ずMavenのプロジェクトを選択して下さい。ここで間違って後で地獄を見る系の人が多いです。もうNetBeansのオリジナルプロジェクトファイルは廃止していいんじゃないかなと思うのですが・・・




Application ServerにGlassFish Serverを、Java EE Versionには「Java EE Web」を選択します。ちなみにこれはWebプロファイルであり、Fullプロファイルをここで選択できないのはNetBeansのバグですね。


ここで 一旦Finishして、生成されたプロジェクトファイルを手作業で修正します。プロジェクトのProject Files > pom.xmlを開き、「javaee-web-api」を「javaee-api」に変更して保存し、プロジェクトをビルドすれば完了です。





2-2. 自動生成でJPA系クラスを作成する

DB接続系の処理ですが、Java EEだとJPA一択です。元ネタのHibernateと一緒なので、大体誰でも理解できると思いますが、要は「テーブルの1行=Javaクラスの1インスタンス」で処理するだけの単純明快な標準フレームワークです、と書けばいいでしょうか。


プロジェクトで「New > Other」から、「Persistence > Entity Classes from Database」を選択し、MySQLの接続を選択して、JNDIデータソース名「jdbc/advent」を指定して、上で作成した「Customer」テーブルを選択します。あとはデフォルト値で進めれば・・・






はい、DB接続設定が含まれたpersistence.xmlと、「Customer」テーブルに対応付いた「Customer」クラスが作成されます。簡単ですね。これぞJava EE。このクラスだけではデータベースにCRUDできませんので、次にDAOを作成します。これをEJBで作るのがポイントです。ここで間違える人が多いですが、選択肢はこれしか無いと思った方が良いのではないでしょうか。

「New > Other」から「Enterprise JavaBeans > Session Beans For Entity Classes」を選択します。


Entity Classesに上で作成したEntityが出てくるので、選択します。




完了するとEntity Managerを内包した「」という名前のEJBが自動生成されます。これを使ってCRUDするわけです。なお、このEJBは「AbstractFacade」という名前のスーパークラスを継承しており、そこにCRUDの実装がありますので、基本処理を変更したい場合はここをいじります。ただ、二つ目以降のDAOを作成した場合、同じようにこのスーパークラスを継承するように自動生成されるので、注意が必要です。




2-3. ビジネスロジックを作成する


ビジネスロジックは自動生成なんかできないので、普通に作成します。「New > Other」から「Enterprise JavaBeans」、名前に「CustomerLogic」、パッケージを「advent.logic」にして生成。








  1. 3. Web画面作成

最後に画面側です。バックエンドを呼び出す画面についても省エネ爆速で作りましょう。作るファイルは三つ。FaceletとBacking Beanは二つでひとつのセットです。あとは完了画面だけ作ります。最低限動く事を確認するだけの構成にします。


3-1. JSFを使うためのプロジェクト設定

NetBeansでMaven WARプロジェクトを作った場合、初期設定でJSFが有効になってません。これでは困るのでちょいと設定します。プロジェクトを右クリックしてFrameworksからJavaServer Facesを選択します。


また、JSFの画面ファイルであるXHTMLが簡単に起動するように、URL Patternも「*.xhtml」に変更しておいて下さい。じゃないと全てのリクエストに対して/faces/とかつけなければならず、実態のファイルの配置とずれてしまうという困ったことがおきます。




3-2. Backng Beanの作成

そろそろこれまで作ってきたものを一度動かしてみたい気になりますが、最速を目指すこの投稿ではスキップして、一気にBacking Beanを作ります。ASP.NETのコードビハインドみたいなやつです。画面と一対一で原則作ります。

普通にクラスを新規作成します。アノテーションで@Namedと、@ViewScopedをつけて下さい。要注意なのは、「import javax.faces.view.ViewScoped;」側を使って下さい、ということです。同じ名前のがjavax.faces.beanにもありますが、こちらを使うと動きません(こちらはJava EE 6以前(JSF 2.1以前)用)。


残りはEntityに定義したものをそのままフィールドに定義してしまいましょう。あとはGetterおよびSetterを作る必要がありますが、そんなものはNetBeansに作らせましょう。右クリックして「Insert Codes…」で「Getter and Setter」ですね。日本語版だと妙な名前になってた気がしますが、こういうプログラミング系は英語版を使うと変な所で悩まなくとも済みます。



注意点としては、CustomerID列についてはデータベース側で自動採番されるのですが、EntityのBean Validationの関係上、NULLが許容されないため、とりあえずLong.MIN_VALUEを入れておきました。0でも何でもいいんですが、INSERT時に正しい値に置換されますので気にしないで下さい。


ちなみにここでの考慮点としては、「EntityをそのままBacking Beanのフィールドに設定した方が早いのでは?」というFAQがあります。が、分けた方が良いでしょう。画面で入力する値は本質的に全て文字列ですが、DB設定の型は様々です。入力値のチェックも考慮した場合、すべてString型で定義したBacking Beanと、本質的な正しさを追求すべきEntityは分けた方が良いでしょう。

3-3. Faceletの準備



なんというか、丸ごとふるくさい構成になってますので、HTML5にちょいと書き換えて、不要なタグを削り、JSF 2.2で必要となるネームスペースを追加します。こんな感じです。「xmlns:jsf」というのを追加する必要があります。URLそのものはNetBeansが自動補完してくれます。これが無いとJSFの特殊タグが使えないのです。要注意。これもNetBeans側のテンプレートを更新して欲しい気がしてます。自分でContributeしろと云われそうですが。




では最後にBacking Beanと結合していきます。当たり前ですがFaceletでもコード補完が動きますので、ホイホイやっていきましょう。


完成版はこんな感じです。JSF 2.2からはHTML Friendly Tagsといって、ふつうのHTMLに対してjsf:valueやjsf:actionを追加で入れていく感じになっています。これならば誰でもできますね。昔のh:inputTextとかを忘れて思い出せずイライラするといった非生産的な状況とはおさらばです。











データベースの中身を見てみましょう。正常に登録されてるかな・・・? Servicesタブからcustomerテーブルを開いて、View Data…です。




はい、これでおしまいです。完了。この記事はスクリーンショット等を取りつつ書きつつやったので2時間ちょい程度かかりましたが、そんなことをしなければここまで最速で10分から30分くらいでしょうか。データベースの設定を一度やっておけば、あとは上記2.以降をやればいいので、10分くらいでできるかな。Java EEも簡単になりましたね。初代J2EE 1.2時代のめんどくささと比較しても、雲泥の差です。最初からこうあってほしかった(笑)。

Java EEのこの安定感は素晴らしいですね。繰り返しになりますが、上記の作業手順や生成方法、生成されたファイル群は、本物のお仕事でもそのまま使えるものです。今回は画面遷移や入力値チェック等は省きましたが、その辺は別記事等でフォローしたいなぁと思っています。


次回の2014 Java EE Advent CalendarはArshal Ameenさんの記事になります。最終回ですね。

Renewed My PC for 2015


Recently I used with Apple Macintosh, with OS X. And I decided to move from OS X to other OS again. There were many reason for moving, but most biggest reason was for liberty of my computing environment.

Actually OS X is the better environment for both daily usage and programming, but not for gaming and some free usage with many external devices. I love the Mac Pro Xeon tower type, with some external slots and free of expanding, but nowadays it renewed with trash-typed closed platform.

I decided to design my next PC with latest parts, with Intel devil’s canion and Nvidia GeForce GTX 970, and some excellent parts for my 2015 style as below.

  • Case: Antec P100
  • Motherboard: ASUS Z97-K
  • CPU: Intel Core i7 4790K 4GHz
  • CPU Fan: SCYTHE Kotetsu
  • RAM: CFD 16GB (8GB x2)
  • Video:  ASUS Strix GTX970
  • Power Supply: Seasonic SS-660XP2
  • SSD: Crucial MX100 256GB
  • HDD: Hitatchi 2TB
  • Keyboard: Topre Realforce 87U SE170S
  • Mouse: Logitech G302
  • OS: Windows 8.1 64-bit, Oracle Linux 7 64-bit
  • Monitor: Iiyama Pro Lite XB2374HDS 23-inch

Unfortunately the PC parts prices are now increasing due to decrease Japanese Yen JPY rate compare with USD, so decided to get within November. Saved over 10,000 JPY by early purchasing before increasing prices.

Thanks for the silent type PC case and video card, I got a exteremely silent PC in normal desktop usage. I cannot hear any noise except for the HDD very small clicking sounds. With some latest 3-D gaming, the video card’s fans are start turning with very small noise.

Additionally the new keyboard Realforce special silent model (SE170S) is good for my typing speed and noiseless confortable desktop works. I think this keyboard is the best PC keyboard in the world so far. I want the its PS/2 version for true n-key rollover, but current USB version is almost enough for my normal desktop computing.

The new PC is connecting with my old Victor amplifier and small Tannoy speakers, and listening HD audio with ALAC format. Thanks for the silent environment, this PC is also good for the audio listening.

I satisfied with this new PC for multiple usage, especially for my home programming usage, and now I’m trying latest 3-D heavy PC games which I cannot tried in my old MacBook Air.


My Interview of Nikkei Computer Aug 7th, 2014

Nikkei Computer 2014-08-07

Today one of the most largest share of the Japan computer magazine “Nikkei Computer” Aug 7th, 2014 issue was published. Main theme of this issue is the EOL of each libraries and software.

This first special pages are edited by my interview, which was held on July. The discussion point is the Struts 1 EOL issue, which was  almost same theme as the my session of Java Day Tokyo 2014.

If you can see this issue, please check it. Unfortunately, this articles are written in Japanese only. Of course, the “Nikkei Computer” magazine is also for Japan only 🙁

My JavaOne 2014 and Oracle OpenWorld 2014 Sessions

Happily announced that my call for proposal for JavaOne 2014 and Oracle OpenWorld 2014 were approved successfully. Now I’m one of a session speaker of them. Amazing.

Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [CON2789]

Case Study of Financial Web System Development and Operations with Oracle WebLogic 12c [CON2820]

My first time attendance for JavaOne conference was 2000. 14 years ago. Very huge conference, over 30000 people attended, held in Moscone north and south completely. The key note speech was held in all connected Moscone center south rooms. The surprise guest speaker was Steve Jobs, with performing not released Mac OS X 10.0 development version with J2SE 1.2 Swing application. I was so exited about the brilliant future of the Java programming language and enterprise usage.

At that time I learned many of the J2EE 1.2, which was renewed from Project JPE at the end of 1999. I’d already worked with BEA WebLogic 3.0 – 5.1 in Japan, and realized that the differences between the J2EE specs and the implementations. And one of my dream was to have a session as a speaker for J2EE technical information sharing here.

Now my dream come true.

In this sessions I’m going to share the details of my designed Java EE 6 applied financial enterprise systems in Rakuten in Japan. Java EE has huge potentials for the mission critical enterprise systems, and you can learn how to use the EE specs and WebLogic for it.

Now I’m happily making the slides for speaking right there. Come and join us. Happy programming.

How to Move from J2EE from Java EE in Java Day Tokyo 2014

Last day I joined in Java Day Tokyo 2014 as a speaker and had this conference session “How to Move from J2EE from Java EE” as below. Uploaded in SlideShare.

The background of these slides and my presentation theme was for the poor enterprise systems which is not improved and keep going with J2EE 1.4 and many non-standard open source frameworks.

The big picture of Java EE – formerly J2EE is the standardization of the enterprise development API for any application servers, and the theme was not changed since the born of Java (2) platform, enterprise edition (J2EE). I strongly agreed these movement at the start of J2EE, and not changed in this time.

Many enterprise engineers still don’t know the latest version of JEE, due to the limitations of each company’s original standards – many standards are still based in J2EE 1.4. And the older standards applied systems are now turning into the “too old to migrate” systems.

As a fan of Java EE specifications, I want to share how to migrate to latest Java EE 7 standards from older ones. I hope these slides are for your system improvements and Java EE applied system increasing.

Happy Java 8 Release

As you might know, the Java 8 was released yesterday, and I tried to use both my OS X and Windows environment with new NetBeans 8 and GlassFish 4.

Including many useful improvement in 8, the new edition of the common platform is the best one ever. And please be careful that any new software has some of uncertain bugs. If you plan to apply 8 to your production environment in the future, be careful to new information of bugs or vulnerabilities of this new island.

If you are a good Java operator, please make sure that the Java VM environment was completely changed and some well known JVM booting options was deleted and you must learn a lot of new philosophy of imported new VM functions from JRockit from BEA WebLogic (by Intel formerly).

If you are a nice programmer or software architect, please be careful of your favored libraries or app servers compatibilities of 8. Especially almost all commercial licenced app servers, including WebLogic, WebSphere, JBoss or like that, the requirement JDK might be still with 7u51, and please avoid the force applying 8 to them in your production environment. It might stak in booting time or now working correctly. Ask to the support when you can apply 8 to your platform.

Anyway, the new major version platform release is really special for us and welcome to our new future platform. And I want thanks so much for all guys related to new JDK releasing. Congratulations!