Kotlinでサーバサイドをやりたいと常々思っているのだけれど、全然Javaのサーバサイドの知識がないので勉強しています、最近。独習Java サーバサイド編をKindleで買って読んでいるところをツイートしていたら、情報が古すぎるという指摘もありましたが…。
TomcatはとりあえずJavaEEの機能を活かせないということだったので、GlassFishをインストールしてみました。
GlassFishをインストールした後、CodezineのGlassFishからアプローチするJava入門の記事をやりながら、GlassFishについて勉強していました(記事自体はやや古いけれど大丈夫そうな感じ)。ただ、自分はIntelliJ IDEA Ultimateを持っているので、IntelliJを使って作業しています。
コンソールからGlassFishを起動した場合は普通に動いていたのですが、なぜかIntelliJからGlassFishを起動しようとしたら動かない…。エラーでこけてしまいます。コンソールで起動しておいたらIntelliJから繋がるけれど、終了したのちに再度IntelliJからGlassFishを起動できない。おかしいなーと思っていたところ、エラーメッセージが????????だらけの中にASCIIという文字があったので、文字コードに問題があるのかなと思いました。
IntelliJのGlassFishのVM optionsに
-Dfile.encoding=UTF-8
を書いたら、動くようになりました。
それにしてもこれを毎回書くのか?と思っていたら、
@patorash 最近はどうなってるかわかりませんが、ちょっと前はMacでJava使うならUTF-8の設定しとけって話はありましたね。"Mac Java encoding UTF-8" あたりで検索するとなんかひっかかります。Macでしたよね?
— Ken (@teaplanet) 2013, 12月 27
という助言を頂きました。そんな話があったのか…。
ぐぐったところ、まさにその問題をとりあげている記事を発見。
Javaの文字コードはデフォルトだとSJISらしいです(なぜ…)。起動時にJavaの文字コードをUTF-8に変更してやる処理を加えたらええんじゃ!ということだったので、やってみました。
sudo vi /etc/launchd.conf
で、このファイルに以下を追加。
setenv JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8
この後、マシンを再起動すればOK(ログアウトでもいいかも)。
java -hで確認して、文字コードが変わっている事を確認できればOK。
その後、IntelliJ IDEA上から、VM optionsのパラメータを削除してからGlassFishを起動したら、ちゃんと起動しました。
文字コードはやっぱりUTF-8がいいですね!!