エンタープライズギークス (Enterprise Geeks)

企業システムの企画・開発に携わる技術者集団のブログです。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。

Java8超入門 - for文の代わりにStreamを使おう(3)

前回の記事では、Stream APIのfilterメソッドを使って、集合データから条件に合致する要素を抽出する方法を紹介した。 今回は集合データ内の要素を変換するmapメソッドを紹介する。 これまでと同様に、シンプルなPersonクラスを利用する。 public class Pers…

Spring特別勉強会レポート(後編)

前回は Pivotal社に所属するSpring コントリビュータの Josh Long 氏によるプライベートセッション「Bootiful Application」のうち、マイクロサービスと Spring Boot の内容を紹介しました。 今回は、後半部分である Spring Cloud についてのレポートです。 …

JavaEE7をはじめよう(17) - CDIのユニットテスト

CDIを使用したクラスのユニットテスト、すなわちJUnitなどのテストツールを使用した自動テストはどのように行うべきだろうか。 今回はユニットテストの方法について紹介する。 テスト対象のクラス 今回テストを行う対象は、前回の記事で紹介した、DAOを通じ…

Spring特別勉強会レポート(前編)

2015年9月2日、Spring FrameworkコントリビュータのJosh Long氏がウルシステムズを電撃訪問し、プライベートセッションを開催するというサプライズがありました。日本Springユーザー会のフォーラムに合わせて来日した折、過密なスケジュールのすきまを縫って…

JavaEE7をはじめよう(16) - CDI トランザクション

Java EE7から、CDI Beanに対する宣言的トランザクションが使用可能になった。 宣言的トランザクションの使用を宣言しておくと、メソッドの開始と同時に暗黙的にトランザクションを開始し、メソッドの終了時にトランザクションをコミットまたはロールバックで…

広島Javaユーザグループ「概念モデリング再入門 + DDD」勉強会

2015年8月3日に広島Javaユーザグループにて、弊社の河野 正幸が「概念モデリング再入門 + DDD」と題して講演を行った。 開催概要はこちらから、また当日の会場の様子は以下からどうぞ。 講演の内容は、概念モデルの作成手順と考え方に加えて、概念モデルをベ…

JavaEE7をはじめよう(15) - CDI 会話スコープ

前回までで、CDIの基本的な仕組みを紹介した。今回は、CDIのスコープの中でも特殊なスコープである、会話スコープ(@ConversationScoped) について解説する。 @RequestScoped, @SessionScopde, @ApplicationScoped はServletのスコープにもあるので、多くの方…

今だからこそ、省メモリープログラミング

富豪的プログラミングが当たり前となった昨今、メモリーを節約するプログラミング技術は話題にならなくなって久しい。 しかし、一方で省メモリーなプログラミング技法が生きるフィールドは広がりつつある。たとえば以下の様な状況だ。 巨大データを扱いたい…

JavaEE7をはじめよう(14) - Producerの効果的な利用方法

前回の記事では、インジェクションするクラスの候補が複数ある場合の様々な対処方法を紹介した。 今回は、Producerの効果的な利用方法を2つ紹介する。 リソースパラメータをProducerフィールドで一元管理する まずはProducerフィールドを使って、データソー…

JavaEE7をはじめよう(13) - インジェクション候補が複数ある場合の対処方法

前々回と前回の記事で、CDIの基本的な部分であるスコープとインジェクションについて解説した。 今回は、インジェクション候補のクラスが複数ある場合の様々な対処方法を紹介する。 実装や継承関係がある場合のスコープ指定 実装や継承関係がある場合は、実…

D3によるデータビジュアライゼーションの勉強会資料を公開

少し前の話になるが、2013年の9月にウルシステムズ社内でD3によるデータビジュアライゼーションの勉強会を開催した。せっかくなので、ここで資料を公開する。 D3を使うと、例えば以下のリンク先にあるように、ブラウザー内でインタラクティブに動作するグラ…

JavaEE7をはじめよう(12) - CDI Beanのインジェクション

前回は、CDIの定義方法を解説した。 今回は、CDI Beanをインジェクションする方法を紹介する。 インジェクションが可能なクラスの種類 インジェクションを行うには、@Injectアノテーションを使用する。 @Injectが使用可能なクラス、すなわちCDI Beanをプロパ…

JavaEE7をはじめよう(11) - CDI Beanの定義

前回の記事では、CDIの概要とインジェクションのサンプルを紹介した。 今回から2回に分けて、CDIの基本的な利用方法を紹介する。前半の今回は、CDI Beanの定義で指定するスコープについて解説する。 CDI Beanに指定できるクラス CDI Beanに指定できるクラス…

Java8超入門 - for文の代わりにStreamを使おう(2)

だいぶ間が空いてしまったが、Java8の超入門記事の第2回である。 前回の記事では、forループの代わりにStream APIのanyMatchメソッドを使って、コレクション全体に対する条件判定を行う方法を紹介した。 今回は、コレクションから条件に該当する要素を抽出す…

JavaEE7をはじめよう(10) - CDIの概要

今回から数回に分けてCDI(Contexts and Dependency Injection)を紹介する。 CDIは Java EE 6から追加されたDI(Dependency Injection、依存性注入)のための仕様である。 Java EE 7におけるCDIのバージョンは1.1であり、またJava EE 7から CDIはデフォルト…

JavaScriptでLispインタープリターを作ろう(8) ~ローカルスコープの導入~

前回の記事で関数を記述する機能が導入できた。しかしながら、現状のインタープリターにはローカルスコープが無く、変数が関数内に閉じていないために課題も残った。今回は、上記の課題を解決するためにローカルスコープを導入する。 ローカルスコープとは …

広島Javaユーザーグループ設立

2015年4月25日に広島Javaユーザグループ(広島JUG)が誕生した。 (広島JUG代表 上司さん) これまで広島にはJavaコミュニティが無く、「なぜ広島にはJavaユーザーグループが無いの?」と思っていた一人として、第1回立ち上げイベント「誕生」(https://hiros…

JavaEE7をはじめよう(9) - JPA TIPS

今回はJPAのまとめとして、JPAをより良く使う方法や知っておくとよいトピックについて述べる。 1. テーブル定義とエンティティクラス定義の整合性を保つ仕組み 以前の記事で紹介したように、JPAではスキーマジェネレーションを用いて、エンティティクラスか…

Raspberry pi の勉強会資料を公開

この3月にウルシステムズ社内にてRaspberry piの勉強会を開催した。せっかくなので、ここで公開する。 そもそも Raspberry pi に関心を持った理由は、自分の子ども達(5歳と0歳)に、より良いコンピューター体験をさせたいと思ったからである。 近年のGoogle…

JavaEE7をはじめよう(8) - JPAでのID定義

前回までJPAの使用方法を解説してきた。今回は、JPAを利用する上で、テーブルの主キーおよびエンティティのIDの設計で考慮しておくべき事柄を説明する。 複合主キーの定義方法 IDの定義方法を検討をするために、まずJPAでの複合主キーの定義方法を解説する。…

JavaScriptでLispインタープリターを作ろう(7) ~関数の導入~

前回の記事で、Lispインタープリターは「順次・反復・分岐」のすべての制御構文をサポート出来るようになった。今回は、いよいよ関数を記述する機能を導入する。 「仮引数」と「実引数」 関数を記述する機能を導入する前に、JavaScriptを例にして、関数につ…

JavaEE7をはじめよう(7) - Querydslとストアドプロシージャ

前回までの3回の記事で、JPAが提供する3つのクエリの定義方法を紹介した。 今回はJPAクエリの番外編として、Querydslとストアドプロシージャを紹介する。 Querydslの概要 Querydsl は様々なクエリを生成するためのDSLライクなAPIを提供するオープンソースのJ…

「グーグルの自動運転Carの技術要素」勉強会資料の公開

昨年夏に、ウルシステムズ社内にて「グーグルの自動運転Carの技術要素」勉強会を開催しました。これまでは資料を社内に閉じて来ましたが、せっかくなので開示することとします。 近年、「人工知能(AI)」は多くの分野で応用され、その成果を目にしたり利用し…

JavaEE7をはじめよう(6) - JPAクエリ(その3) Criteria API

前々回と前回の記事で、JPAが提供する3つのクエリの定義方法のうち、JPQLとNaitiveQueryについて解説した。 今回は、最後の1つであるCriteria APIについて解説する。 Criteria API Criteria API は、API呼び出しによってクエリオブジェクトを構築する方法で…

JavaScriptでLispインタープリターを作ろう(6) ~反復の導入~

前回の記事では変数を導入した。これで、反復処理を記述するための土台がひとまず整ったことになる。それでは早速、反復処理であるwhileを導入してみよう。 反復処理を行うwhile 反復処理は、インタープリターのevaluate関数に以下の記述を追加する事で導入…

JavaEE7をはじめよう(5) - JPAクエリ(その2) Native Query

前回の記事ではJPAのクエリの定義方法のうち、JPQLについて解説した。 今回はNative Queryについて解説する。 Native Queryとは Native Queryは直接SQLを実行する機能であり、JPQLではサポートされてないSQLやデータベース製品固有の方言などを実行すること…

JavaScriptでLispインタープリターを作ろう(5) ~変数の導入~

前回の記事では、Lispインタープリターに順次処理「do」を導入した。ここまでの説明で、「順次・反復・分岐」のうち、「順次」と「分岐」は既に導入できたので、残すは「反復」のみとなる。 しかし、反復を説明する前に説明しておくべき事がある。それは「変…

JavaEE7をはじめよう(4) - JPAクエリ(その1) JPQL

今回から3回に分けて、JPAでエンティティを検索する手段であるクエリを解説する。 JPA では javax.persistence.Query というオブジェクトで、問い合わせの内容を表す。 このQueryを作成する方法は以下の3種類がある。 JPQL (Java Persistence Query Language…

JAX-RSを利用して大量データを効率的に配信する方法

今回の記事では、JAX-RSを利用して大量データを効率的に配信する方法を紹介する。 JAX-RSはRESTアーキテクチャーに基づくWEBサービスの機能を提供するAPIであり、参照実装の1つとしてOracle社が提供するJerseyがある。 このJerseyを利用して、データベース等…

JavaScriptでLispインタープリターを作ろう(4) ~順次処理「do」の導入~

この連載の第3回では、条件分岐ifを導入した。これは、プログラムにおける基本3要素「順次・反復・分岐」のうち、「分岐」をサポートしたことと言える。しかし、「順次」や「反復」に関してはまだサポートしていないため、今回は「順次」を四則演算インター…