ブログトップ 記事一覧 ログイン 無料ブログ開設

水まんじゅう

 

2016-08-16

Class#forNameはファイルシステムが大文字小文字の区別をしない場合にNoClassDefFoundErrorを投げることがある

タイトルのとおり。
通常、Class#forNameでクラスが見つからない場合はClassNotFoundExceptionが発生するが、
Windows上では以下のJUnitのテストコードのような挙動を示す。

package test;

import org.junit.Test;

public class TestMain {

  @Test
  public void test1() throws ClassNotFoundException {
    Class.forName("test.TestMain");// このクラスを呼び出す
  }

  @Test
  public void test2() throws ClassNotFoundException {
    Class.forName("java.lang.Thread");// rt.jarに入っているクラスを呼び出す
  }

  @Test(expected = ClassNotFoundException.class)
  public void test3() throws ClassNotFoundException {
    Class.forName("java.lang.thread");// rt.jarに入ってるクラスの大文字小文字の間違い
  }

  @Test(expected = NoClassDefFoundError.class)
  public void test4() throws ClassNotFoundException {
    Class.forName("test.testmain");// このクラスの大文字小文字の間違い
  }

}

まーじーかー・・・・・・
JVMバグじゃないの?

Java 1.8.0_92

2016-08-03

パーフェクトJava EEを読み始めた(パラ見した感想)

ポケモンに飽きてきたので

さて、こそこそっとパーフェクトJava EEを読み始めてみました。
とはいってもまだ1章のみ。

以前からパーフェクトJava EEが発売されるという話は聞いていて、JPAの章についてはレビューにも参加しているので、
JPAの章については安心してみてください的な感じはあります。*1

そのうち全部読むのですが、1章と全体をパラ見した感想としては、
この本のターゲットはこうですと記載されているものと、実際に読める人間には随分と隔たりがありそうだなぁという印象でした。

JSPどこいった

この本ではJSPについての説明はありません。ただ、JSPを使った説明はたくさんあります。
そのため、JSPを理解していることが前提となっており、少なくとも、これからJava EEを始めたい人が読むべき本ではないのではないかなぁと思いました。

そういえば、パーフェクトJavaのおまけにJava EEのボーナスPDFがあったなぁと思って、そちらも見直してみましたが、
そちらでもJSPの説明はなく。
http://gihyo.jp/book/2014/978-4-7741-6685-8/support

まあ、厳しいねぇ。

よくよく見てみると、第1章については上のPDFの内容を抜粋した形式となっており、さすがにちょっとさぼりすぎなのではーという印象を受けました。
一度校了をした文章を構成しなおしたからか?確認が甘かったのか、mavenダウンロードサイトの説明はあるのに、GlassFishダウンロードサイトの説明はなく、これ1冊でJava EEを始められるのか?というのは本当に疑問。
GlassFishって何よで終わる気がする。

例えば、NetBeansであればGlassFishバンドルしたインストーラーがあるので、そういったものを使用してここら辺の説明がなくても大丈夫にする方法もあるけれども、今回はそういった方法も取られておらず、asadminというのがあるよとだけ書かれており、結構きつい。

Java EE 7徹底入門ではNetBeansを使用する方法でちゃんと書かれていたので、あちらはあちらで各章の内容がちぐはぐということもあるのですが、少なくともこの本が対象としている読者層にとってはJava EE 7徹底入門のほうが良い本ではないかなぁと思いました。

しかし、巷のJava EEというか、Servlet/JSP入門書のほとんどはTomcatを前提としているので、本当はそういった本の次として置きたいのだろうけれども、どうしたもんかねぇ。

*1:さすが槙さん

2016-06-27

Java Day Kumamotoやってきた #JDK

ということで、紆余曲折ありながらも、Java Day Kumamotoという名前でカンファレンスを開催してきました。




なんと、36名登録してくれて、そのうち36名が全員来るという快挙。*1
東京じゃあ考えられない出席率。すばらしい。

大雨だし絶対参加者半分もいないんだろうなぁとか思って椅子も全員分を用意しておらず追加で用意しなければいけなかったのですが、うれしい悲鳴という感じ。

また、登壇者の方々も手弁当で来てくださってくれて本当にありがたい。

好評だったらまたやりたいですね。

あと、LTやりました。
資料は以下。

*1:キャンセルは2名ありました

2016-06-14

Java 8から増えてたExplicit receiver parameters

Java 8からこういう書き方が出来るようになっていたようです。(初めて知った)

public class Main {

    public String getString(Main this) { // thisで自分自身が引数になっている
        return this.toString();
    }
    
    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.getString()); //呼び出すときは何も書かなくてもよい
    }
}

何がうれしいかというと、自分自身を呼び出すときにアノテーションがつけれるようになる。(そして処理が出来るようになる)
なんか、おおっ!という感じ。

呼び出すときに何も書かなくてよいというのがものすごくJavaっぽくないので驚きました。

http://blog.joda.org/2015/12/explicit-receiver-parameters.html

なお、これを使うとPMD5.4.1より前は死ぬ。
https://sourceforge.net/p/pmd/bugs/1455/


2016/06/15(追記)
コメントで何に使うのかさっぱりわからんという意見が多発していますが、それに対する回答としては



という感じで、Type Annotationを使用する場合に使用することがある。基本的には使用するケースはない。
となります。
ということで、基本的にあまりうれしくないという結論に。

便利(なのかもしれない)と思ってしまった人は勉強が足りないぞっ☆彡

2016-06-13

基礎からのWebアプリケーション開発入門がなかなかよさそう。

もらったわけではないですが、買ったので。



これはServlet APIを動かす側、つまり、Servletコンテナを実装してみようという本です。
JavaでWebアプリケーションを実装していると、TomcatGlassFish等、すでにあるリッチなAPIを使用した開発のみを行いますが、
HTTPをラップしているだけなので、HTTPを知らないとよく判らない不具合にあたることがあります。

java.lang.IllegalStateException: レスポンスをコミットした後でセッションを作成できません

というメッセージとかよく見たことがあるのではないでしょうか?

このエラー自体はServletコンテナがresponseのヘッダーに書き込むべきセッションが存在するという情報を、すでにresponseのヘッダーを書き出した後だと書けないことによって生じるエラーです。

HTTPがどういったものかを知っていれば、ああ、なるほど、と思うのですが、HTTPがどういったものかを知らない人は何のことかさっぱり判らないと思います。

そういった人にとってすごい良い本です。
HTTPがどういった形で通信されているかからMIME encodingの仕様まできちんと実装してくれているので、普段あまり目にすることがないHTTPの生の通信を意識する機会を与えてくれます。

このような本のため、Webアプリを作りたいだけという人には向かないのですが、JSFやSpring等の勉強はすでに行っており、その先をきちんと理解したい人にはお勧めです。

名前的にとりあえずJavaウェブアプリケーションを作ってみたいみたいな人を狩ることになってしまっているので、それは残念。