Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

プレゼン、ボランティアコーチします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチします!資料レビューや録画リハへアドバイスします。Twitter@jyukutyoまでメンションでもDMでも。

私はデブサミやJJUG CCCなど200人規模で登壇経験ありです。海外での登壇も短いながらあり。デブサミ2017では公募スピーカー1位でした!

java

indyとASMを使ってコードを難読化できるんだって

そういえばJavaOne 2015で「Protecting Java Bytecode from Hackers with the InvokeDynamic Instruction 」というセッションに出ておもしろかったことを思い出しました。 そこでデモ用のものが紹介されていたので、今更ながら試してみました。 github.com …

Spring MVCでConversion失敗をまとめて処理したいときは@ModelAttributeを使うしかないのかな?

Spring MVCでこういうコントローラメソッドがあるとする。 @RequestMapping(path = "hoge") public String index(@RequestParam @DateTimeFormat(pattern="yyyyMMdd") Date start, @RequestParam @DateTimeFormat(pattern="yyyyMMdd") Date end) { return "h…

Bean ValidationでSpring Expression Languageを使って相関バリデーションする

このエントリで実装を見ていたとき、思いついた。 jyukutyo.hatenablog.com Spring Expression Language(SpEL)でもバリデーションできそうだな〜と。Spring、Hibernate Validatorの利用が前提になってしまうけど。 @SpringELAssertアノテーションというの…

Bean Validation(Hibernate Validator)で相関バリデーションを使う

ここでは相関バリデーションを、「2つの値の関係性をバリデーションする」とする。 たとえば、日付で開始日と終了日があって開始日 < 終了日とならなくてはならない、など。 Bean Validation 1.1の仕様には、相関バリデーションはなさそう。ただ、Hibernate …

ScalaのSpring MVCコントローラに@AutowiredでInjectする

これの続き。 jyukutyo.hatenablog.com 素直に@Autowiredアノテーションつけるだけでできた。 package hoge import org.springframework.beans.factory.annotation.Autowired import org.springframework.context.ApplicationContext import org.springframe…

Spring MVCのコントローラをScalaで書く

やろうとした理由は…単なる思いつき。 調べたらいろいろな方が試されてました。手順をまとめておく。 既存のアプリケーションがMavenなので、Mavenで管理する方針で。scala-maven-pluginなるものがあるので、これを使う。 <pluginManagement> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven</artifactid></plugin></plugins></pluginmanagement>…

マイクロソフトのクラウドでのJava EE、そしてJavaエヴァンジェリストへのインタビュー...マイクロソフトのね。 #てらだよしおがんばれ

こちらのブログエントリの翻訳です。 Java EE in Microsoft's Cloud or Interview With Java Evangelist ...At Microsoft : Adam Bien's Weblog 著者のAdamさんおよびインタビューされている日本マイクロソフトの寺田佳央@yoshioteradaさんに翻訳許可をいた…

Groovyでのinvokedynamic

Twitterでのやり取りでGroovyのinvokedynamicの話題が出たので、まず簡単に試してみました。 まず以下のHelloWorld.groovyを作ります。 println 'Hello, world!' 普通にコンパイルする。 $ groovy -v Groovy Version: 2.4.0 JVM: 1.8.0_65 Vendor: Oracle Co…

SpringでBean ValidationのMethod Validationを使う

公式リファレンスにはこうあった。 Spring-driven Method Validation The method validation feature supported by Bean Validation 1.1, and as a custom extension also by Hibernate Validator 4.3, can be integrated into a Spring context through a M…

関ジャバを初めてマイクロソフト様にて開催しました

僕が運営メンバーをしている関西Javaエンジニアの会(関ジャバ)ですが、 1/22(金)にマイクロソフト 関西支社にてMicrosoft Azure + Javaにフォーカスしたイベントを開催しました。 直前に連絡をいただいたのですが、なんとピザとビール、ソフトドリンクま…

JDK 9ではJavadocに検索ボックスができる

JEP 225: Javadoc Search いるよね〜。みんなブラウザの拡張機能とか入れてたはず。 生成してみた。 $ java -version java version "9-ea" Java(TM) SE Runtime Environment (build 9-ea+99-2015-12-23-184955.javare.4146.nc) Java HotSpot(TM) 64-Bit Serv…

JDK 9ではちょっとしたコレクションはファクトリメソッドで作れる

JEP 269: Convenience Factory Methods for Collections コレクションへの便利なファクトリメソッドを追加します、と。 上記のページにはJavaでのコレクション生成についてのJDK 9以前の書き方がいろいろありました。 一番ベーシックなやつ。 Set<String> set = new </string>…

JDK9では文字列の連結にinvokedynamicが使われることになりそうだ

JEPにあり、JDK9のターゲットになっている。 JEP 280: Indify String Concatenation Change the static String-concatenation bytecode sequence generated by javac to use invokedynamic calls to JDK library functions. This will enable future optimiz…

Uber JARとは

とある資料を読ませていただいていて、「Uber JAR」なる単語が。 java -jar hoge.jarでアプリケーションを起動するタイプのものを指すのは理解できたのですが、 Uberって?っと思い検索してみました。 stackoverflow.com Über is the German word for above …

クラスファイルはすべからくjavapしよう

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } javac HelloWorld.javaしてクラスファイルを生成します。さっそくjavap HelloWorldしましょう。javapコマンドはOpenJDK系(OpenJDKやHotSpot、…

try-with-resources 文のclose順序

超いまさらですが、JDK7で導入されたtry-with-resources文のclose順序です。 public class TryWithResources { public static void main(String[] args) { try (Resource r1 = new Resource("Resouce 1"); Resource r2 = new Resource("Resouce 2");) { // …

JPAでエンティティ以外のクラスにクエリの結果をマッピングする in Hibernate

JPAでそもそもそういう使い方するなよってことかもしれませんが。 ネイティブクエリを発行してその結果をエンティティ以外のクラスのインスタンスにマッピングしたいことがあるとします。 JPAの実装にHibernateを使っているときは、以下のコードで実現できま…

TomcatとGlassFishで動作が違った

ServletContext#getRealPath(String)がTomcat 6,8ではnullではなかったけれど、GlassFish 4ではnullを返しました。 This method returns null if the servlet container cannot translate the virtual path to a real path for any reason (such as when the…

Java Magazine Vol.21を読んでJava 20周年記念のステッカー(非売品)をもらおう!

Java Magazine Vol.20 「パフォーマンス特集」/Java Day Tokyo 動画・資料公開ほか【Java Developer Newsletter Japan】 Java Magazine Vol.21を読んでいただいたご感想をお寄せ下さい。 お寄せいただいた方には、Java 20周年記念のステッカー(非売品)を3枚セ…

JDK1.6だと出るけど1.7だと出ないエラー

Jenkinsのサーバを移行したところ、古いプロジェクトのユニットテスト実行時に出るようになった。 java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b at javax.crypto.Cipher.getInstance(DashoA13*..) SunJCE_bはjce.jar…

Jenkinsが死亡しました

死亡なんて出るんですね。ジョブ実行中にJENKINS_HOMEを削除したらこうなりました。死亡したらリンクをクリックして再度利用できるようにしないと、何も実行できないスレッドとなります。

Codehausはサービス終了しています

GroovyとかMaven関連でホスティングしていたCodehausですが、サービス終了していたんですね。 All Codehaus services have now been terminated. With increasing diversity in opensource hosting platforms like Github and Bitbucket - who are meeting t…

JavaのリリースにはCPUとPSUの2種類があります

Java™ SE Development Kit 8, Update 51 (JDK 8u51)がリリースされましたね。 僕もダウンロードしました。 さて、このJDK 8u51は「CPU」なリリースです。 実は、JavaのUpdateには2種類あります。1つは「CPU」、もう1つは「PSU」です。 CPUは「Critical Patch…

OracleでSJISのデータベースの文字列カラムにUnicodeの絵文字をJavaで格納するには

SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET' -- JA16SJISTILDE SJISのデータベースの文字列カラムにUnicodeの絵文字を格納するには、NVARCHAR2型のカラムを使います。次にJavaではシステムプロパティに-Doracle.jdbc.d…

初OSS(MogileFS Javaクライアント)へのプルリクエストがマージされました

少し前の話になりますが、初めてのOSSへのプルリクエストがマージされました。 MogileFSのJavaクライアント「moji」です。 出したリクエストはこちらです。 fix ConcurrentModificationException in fm.last.moji.tracker.pool.MultiHostTrackerPool.getAddr…

Javaの良質なコンテンツを読みつつ英語に慣れよう!

Oracleが2ヶ月に1度、発行しているJava Magazineというデジタル発行物があります。 http://www.oracle.com/technetwork/java/javamagazine/index.html 記事は非常に良質で、SEの言語仕様やEEのパフォーマンス、ラズパイをJavaでやろうといった内容からJava開…

Java 8ではTLS 1.2がデフォルトですよ~

詳細はこちらで紹介されています。 Oracle Blogs 日本語のまとめ: [Java, Security] Java 8 will use TLS 1.2 as default ですが、どうしてもサーバがTLS 1.2に対応していない場合もありますよね。 そのときはシステムプロパティにて使用するTLSのバージョン…

関ジャバはJCPメンバーになりました!(+ JCP参加申込方法)

Congratulations! This e-mail message is to officially recognize that KanJava is now a JCP Member. ということで、関ジャバはJCPのメンバーとなりました! JCPは「Java Community Process」の頭文字をとったもので、JCPのメンバーになることで、Javaの…

JUGとは何か

java.netのこちらのページに詳しい記述があります。 https://www.java.net/jugs/java-user-groups 引用します。 Java User Groups (JUGs) are volunteer organizations that strive to distribute Java-related knowledge around the world. They provide a …

JITWatchでJITコンパイルを見よう!

この記事は JVM Advent Calendar 4日目 の記事です。 JVM Advent Calendar 2014 - Qiita JVM Advent Calendar 2014 - Qiita JITWatchについて JVMなみなさんは、JITコンパイルをご存知だと思います。 JITWatchは、アプリケーションにおけるJITコンパイルにつ…