どうもえいやです。今回の技術ブログを担当します。 前回はGebの話をしました。皆もうブラウザテストは自動化出来たかな。 今回は、前回と変わって当社のWebアプリケーションのバックエンド開発言語となっているJavaの話です。 ラムダ式使ってる? Java8がリリースされてずいぶんと経ちますが、皆さんの現場ではJava8の力はちゃんと発揮されているでしょうか。 先日、同僚が出かけたJavaのイベントでは、講演者が参加者に向けて、「Lambda式を使っている人は手を上げてみてください」と求めて見たところ、ほとんど手が上がらなかったそうです。 当社では、エンジニアは全員Scalaが書けるということになっていますので、Javaの案件でも特に違和感(Scalaのそれに比べ、少し(?)不便なのは置いといて)なく使えているんですがねぇ。。。 とまれ、Java8では、それまでのJava7から、言語仕様の面な
JPOUG Tech Talk Night #2 で話した内容に飲み会で質問された内容を加えています。
JPAだけで完結するのはさすがにムリがあったのでこういうタイトルにした。が、JPAプロバイダ固有のAPIのレベルではフェッチサイズを変更する効果を確認できた。 JDBCのsetFetchSize変更時の動きをstatspackで見てみる - kagamihogeの日記ではJDBCを直接使用していたが、このエントリではJPAプロバイダ(EclipseLink, Hibernate)固有のAPIを使用して100万行取得するコードの速度を、フェッチサイズ変更無しと100の時とでどのくらい速度差が生じるかを確認する。 環境 DB CentOS-6.4-x86_64 Oracle Database Express Edition 11g Release 2 Java Java SE Development Kit 7u45 Eclipse Kepler(4.3.1) SR1 IDE for Java
Hibernate を使ってデータベースに100,000行を挿入する愚直な方法は、このようなものです: Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); } tx.commit(); session.close();これは50,000番目の行のあたりで OutOfMemoryException で失敗するでしょう。 Hibernate がセッションレベルキャッシュで、新しく挿入されたすべての Customer インスタンスをキャッシュするからです。 この章では、こ
元々はC#、最近はNode.jsがコーディングの主流だったのですが、仕事で久々にJavaを使うことになりました。Javaは10年以上前にJava AppletからJNIでPCの周辺機器を操作するようなものを作って以来です。ServletとかTomcatとかStrutsとかとは無縁に生きてきました。 というわけで、久々にJavaを使って見たら、Spring 3.0~ にRestTemplateとかいう余りに素敵なクラスがあって驚いて鼻血が出たので、驚きを記事にしてみました。 RestTemplate RestTemplateの何がすごいかというと、Rest APIを呼び出すのに1行だけで済んでしまうという点です。これまでなら、HttpConnectionをOpenして、そこからBufferedWriterで書き出して、ResponseをBufferedReaderで読み込んで、みたいなことを
Spring Boot 1.4からRestTemplateのBuilderクラス(org.springframework.boot.web.client.RestTemplateBuilder)が追加され、自動コンフィギュレーションされます。RestTemplateBuilderを利用すると、共通的なコンフィギュレーションを適用しつつ、個別のカスタマイズも簡単に適用することができるようになります。 Note: RestTemplateって何もの? RestTemplateは、Spring Frameworkが提供しているHTTPクライアントクラスです。デフォルトではJava標準のHttpURLConnectionが使われますが、Apache HttpClient、Netty 4、OkHTTP 2/3を利用してHTTP通信することもできます。 RestTemplateについては、TERASO
PostgreSQL に対し、 JPA のエンティティからテーブルを自動生成して ID 列を自動採番する方法を試してみました。 今回は Spring Boot 1.3.0 を使っています。 JPA 実装は Hibernate 4.3.11.Final のようです*1。 JPA のエンティティがこんな感じ。 @Entity @Table(name = "account") public class Account { @Id @SequenceGenerator(name = "account_id_gen", sequenceName = "account_id_seq") @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "account_id_gen") private Long id; @Column(nu
システムによって全テーブルに共通したカラムが存在することがあると思います。 (楽観ロック用のバージョニングカラムや登録日、更新日、登録者名、更新者名など) JPAのEntityクラスを作成するときに全Entityに同じ変数を作るのはイヤだったので、上位クラスを作ってまとめられないかな、と思って調べてみたらその方法がありました。 上位クラスに@Entityではなく@MappedSuperclassアノテーションをつけるだけです。 これだけで、上位クラスを継承したEntityクラスで共通カラムを使用することができました。 package jp.co.test.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.M
業務アプリケーションを作っていると、監査証跡ということで、作成者、作成日時、更新者、更新日時を保存するということがあると思います。Spring Dataのアノテーションを使うと、自動でセットしてくれるので、アプリケーションで決まりきったコードを書かなくて済むということみたいです。 Task.java(モデルクラス) package sample.model; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastMod
@Entityアノテーションと@Idアノテーション @Tableアノテーション @GeneratedValueアノテーション @Columnアノテーション @Transientアノテーション @MappedSuperclassアノテーション 次回は @Entityアノテーションと@Idアノテーション まずは、これが無いと始りません。@Entityは該当のクラスがエンティティであることを指定し、@Idはプライマリキーとなるプロパティかフィールドを指定します。 @Entity public class Customer { @Id private Long id; private String firstname; private String lastname; // ・・ } @Idは以下の様に指定することもできます。というかこっちの方が一般的か? @Id public Long getI
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く