ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

Java

Eclipseで始めるJakarta EE 10プログラミング超入門 ③ - JPAアプリケーションの作成

データベースにアクセスするアプリケーションを作るとき、どのような方法でデータベースアクセスを実装してますか?やっぱりMyBatis?まさかのJDBC? Jakarta EEではデータベースアクセスのフレームワークとしてJPA (Jakarta Persistence PI) というものが用…

Eclipseで始めるJakarta EE 10プログラミング超入門 ② - Servletアプリケーションの作成

Jakarta EEのアプリを作ったことがなくても、JavaでWebアプリを作ったことがあるなら「サーブレット」という言葉が聞いたことがあると思います。 「サーブレット」はJavaでWebアプリケーションを構築するうえで、基本的で低レベルな方式となります。 今回は…

Eclipseで始めるJakarta EE 10プログラミング超入門 ① - Gradleプロジェクトの作成

Jakarta EE (旧Java EE)でアプリを作ってみたいけど、Jakarta EEは難しそうだしなー。とりあえず簡単に始められるSpring Bootでいいか。 という方、多くないですか?そもそも、Spring Bootがあるから、Jakarta EEは興味ない!って人も多いと思います。 Jakar…

Jakarta EE (Java EE) Topics - @Inject or @EJB ?

Java EEではコンポーネントの管理に「CDI」と「EJB」があります。 どちらかで統一したいところですが、それぞれ役割が分かれていて、Backing Beanのような画面のコンポーネントは「CDI」、ビジネスロジックや永続化のコンポーネントは「EJB」と、使い分ける…

Jakarta EE (Java EE)のバージョン情報

2022/9に、5年ぶりのメジャーバージョンアップであるJakarta EE 10が発表されました。 いろいろと変更が入っていますが、注目すべき点としてはCDI 4.0で、Enterprise Bean (EJB) の代替手段がCDIに用意されたことです。これにより、今まではプレゼンテーショ…

よくあるDIの勘違い② - InjectしたBeanのフィールドに直接アクセスしてはいけない

Spring FrameworkでDIするBeanクラスや、Java EEのCDI Beanクラスにフィールドを定義して状態を持たせることがあります。 @RequestScope public class ReqScope { public String request = "Request-1"; public String getRequest() { return this.request; …

よくあるDIの勘違い① - 異なるスコープを持つBeanの親子関係

Spring FrameworkのDIや、Java EEのCDIの対象となるBeanには「スコープ」が定義されてます。 この「スコープ」の定義によって、Beanのライフサイクルが変わることは広く知られていると思います。 例えば、アプリケーションスコープのBeanは、アプリケーショ…

GitLabでCI/CD - Javaプロジェクトのビルドとテスト

みなさん、GitLabを使ってますか? GitLabは、クラウド、オンプレ、Dockerと様々な環境で利用できるGitのリポジトリマネージャーです。 オンプレで利用できることから、社内の開発プロジェクトで利用するケースも多いです。Dockerイメージを使って環境を構築…

Java Tips - メソッドの復帰値の型を総称型も含めて取得する

Javaでプログラム内からメソッドの情報を取得する場合、java.lang.reflect.Methodクラスを使用して取得することができます。 今回、以下のメソッドの復帰値の型を取得します。 public List<String> getStringList() { ・・・ } メソッドの復帰値の型を取得 java.lang</string>…

Lombok - アノテーション一覧

定型的で冗長なコードの実装を省くことができるLombok。 @Getterや@Setter、@Dataアノテーションぐらいしか使ったことがない人も多いと思いますが、これら以外にも便利なアノテーションが用意されています。 個々のアノテーションの詳細な説明は別記事で取り…

なぜequalsとhashCodeの両方をオーバーライドする必要があるのか

Javaで、データを格納するためのBeanクラスを作成したときに、ほとんどの場合、getter、setterも併せて実装します。 それとは別に、コンストラクタやequalsメソッド、hashCodeメソッドも実装するかもしれません。 今回は、このequalsメソッド、hashCodeメソ…

Java Tips - Map変換 Collectors.toMapでNullPointerException

みなさん、Stream API使ってますか? Java8で導入されたStream APIですが、メソッドが多くて、なかなかすべてを覚えられません。 今回は、Streamの結果をMapに変換する方法のお話です。 Collectors.toMap Stream APIでMap変換を実装しようとすると、最初に思…

Spring Tips - DI 依存性の注入のメリット

Spring Frameworkに限らず、Javaのフレームワークといえば、この「DI - 依存性の注入」というものが用意されていて、このDIを使用することが前提になっています。 このDI、みなさん理解していますか? フレームワークの作法だから、なんとなくDIを使ってる。…

Java Tips - Mapの初期化

java.util.Mapオブジェクトの初期化方法いろいろです。 putメソッドを使って初期化 基本ですね。初期化するエントリごとにMapインターフェースのputメソッドを使用して初期化します。 Map<String, String> fruits = new HashMap<>(); fruits.put("apple", "リンゴ"); fruits.</string,>…

Java Tips - Setの初期化

java.util.Setオブジェクトの初期化方法いろいろです。 addメソッドを使って初期化 基本ですね。初期化する要素ごとにSetインターフェースのaddメソッドを使用して初期化します。 Set<String> fruits = new HashSet<>(); fruits.add("apple"); fruits.add("orange");</string>…

Java Tips - Listの初期化

java.util.Listオブジェクトの初期化方法いろいろです。 addメソッドを使って初期化 基本ですね。初期化する要素ごとにListインターフェースのaddメソッドを使用して初期化します。 List<String> fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("oran</string>…

Java15の新機能・変更点

Java誕生から25周年を迎える、2020年9月15日にJava15がリリースされました。 forest.watch.impress.co.jp Java15の新機能・変更点について解説します。 339: Edwards-Curve Digital Signature Algorithm (EdDSA) 360: Sealed Classes (Preview) 371: Hidden …

Javaで文字コード変換時のUnsupportedEncodingExceptionを回避する

Javaで文字コードを変換するコードを書く Javaで文字コードを指定するケースって、あんまり遭遇しませんが、業務アプリを作ってると、たまーに文字コードを指定するケースに遭遇します。 例えば、文字列をUTF-8に変換するユーティリティ・メソッドを作成しま…

一時的にSpringSecurityによる認証を無効化したい

一時的にSpringSecurityによる認証を無効化したいときは、 スプリングブートアプリケーションのクラスに@SpringBootApplicationを付与する。 @SpringBootApplication(exclude = SecurityAutoConfiguration.class) // これ public class Application { public…

JDK9で追加されたofメソッドについて

java JDK8までは「Stream系APIの検証をしたく、仮のコレクションをいったん作成したい」 というとき、以下のように書いていました。 JDK8まで // [1]StringからStream Stream<String> streaml = Stream.of("A","B","C","D","E"); // [2]配列からStream Stream<String> stream</string></string>…

Lombokの使い方

SetterとGetterをソースに記述する手間を省略してくれるLombokライブラリの使い方について。 手順 「Lombok download」で検索するとトップに出てくるサイトでjarファイルをダウンロード。 「eclipse」フォルダ内にある、「plugins」フォルダの中にダウンロー…

ファクトリメソッドパターンとは

ファクトリメソッドパターンは、オブジェクトを取得するメソッドを実装するパターンです。利用側はオブジェクトの作成手順や作成されるオブジェクトの種類を意識せずにオブジェクトの取得を行えます。 また、 通常コンストラクタを呼び出し、オブジェクトを…

シングルトンパターンとは

Singletonパターンはクラスから一つしかオブジェクトが生成されないことを保証するパターンです。 SpringのControllerもSingletonパターンを実現しています。 Singletonではないクラスを書いた場合、たとえば1万人から要求があると、1万個のインスタンスを生…

Spring MVCでWebアプリを作ろう~Bean定義ファイルを読む~

前回STSを使ってSpringMVCでHelloWorldの表示までを行いました。 今回は自動で生成されたプロジェクトモジュールの中身について、理解したことをまとめていこうと思います。 お仕事で何回かSpringベースの開発に携わりましたが、基本的に技術リーダーの方が…

Spring MVCとMyBatisを連携させる~事前準備編~

DBアクセスするWebアプリを作りたいので、そのためのDBをPCにインストール&eclipseでアクセスできるようにしておきました。 事前準備項目 (1) MySQLのダウンロードとインストール (2) MySQLの初期設定と動作確認 (3) データベースの作成 作業内容 (1) MySQL…

Spring MVCとMyBatisを連携させる~設定編~

事前準備編で準備したMySQLのDBに、このSpringモジュールからアクセスするための設定を行います。 STSで自動生成された時はHomeController.javaしかなかったのですが、 今回はControllerパッケージと、Serviceパッケージ、Persistenceパッケージを作成して、…

UMLとJavaのコードをセットで覚える

勉強するたびに忘れてしまうUML。Java Goldの勉強をしていたらいい感じのJavaの実装とUML図が出てきたのでメモ。基本はこれ。 用語 解説 has-a 関係 全体を表現するクラスの属性に部分となるクラスが存在する、集約関係を表す。コンポジションは集約関係の一…

Spring MVCの概要を理解する

今回アプリを作るにあたってSpringの仕組み自体もきちんと理解しようと思い、 Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ作者:長谷川 裕一,大野 渉,土岐 孝平出版社/メーカー: 技術評論社発売日: 2012/11/02メディア: 大型本 Spring3…

オラクルの Java SE8 Silver を受験してきました

せんじつ会社命令でJava SE8 Silverを受験し、無事合格してきました。 得点率が87%だったので、全77問中11問くらい間違えた感じです。 けっこう間違えてますね・・・。 1年前にSE7 Silverを取得していたこともあって、 試験勉強としては前日に志賀澄人先生の…

SpringMVCでWebアプリ作ろう

オンサイト環境は最高だ。 お昼ご飯はおいしいし、毎日定時にあがれる。 おうちに着いてからも余力があるので、 平気で1-2時間はテレビを見たりマンガを読んだりしてから寝れる。 今日は、この余力を生産的な方向――Webアプリ制作に費やそうと決心した。 うち…