Java メモ

## Javaについて
### Java
- Javaのプログラムは、OSやハードウェアに依存しないバイトコード(中間言語)と呼ばれる抽象的なコードで表現されています。
- [公式サイト](https://www.java.com/ja/)
- [GitHub](https://github.com/topics/java)

### Apache Tomcat
- Java Servletを動かすときに必要なソフト(サーブレットコンテナ)のひとつです。
- [公式サイト](https://tomcat.apache.org/)

### Apache Maven 
- Apache Mavenは、Java用プロジェクト管理ツールである。
- Javaプログラムをビルドするためのツールです。
- Apache Antに代わるものとして作られました。
- Apacheライセンスにて配布されているオープンソースソフトウェアです。 
- [公式サイト](https://maven.apache.org/)

### Gradle
- GradleはApache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システムです。
- プロジェクト設定の宣言にはApache Mavenが利用するXML形式ではなく、GroovyベースもしくはKotlin Scriptベースのドメイン固有言語 を採用しています。
- Android Studioでは、Gradleが使用されています。
- [公式サイト](https://gradle.org/)
	
### Apache Maven 
- Apache Mavenは、Javaプログラムをビルド するためのツールです。
- Apache Antに代わるものとして作られました。
- Apacheライセンスにて配布されているオープンソースソフトウェアです。 
- [公式サイト](https://maven.apache.org/)
	
### POM(プロジェクトオブモデル)
- POMは、Mavenで作成したプロジェクトのビルド内容を設定するファイルになります。
- [公式サイト](https://maven.apache.org/pom.html#POM_Reference)
	
### Apache Ant
- Apache Ant は、Java ライブラリおよびコマンドラインツールであり、ビルドファイルに記述されたプロセスを駆動することです。
- Apache Ant の主な用途は、Java アプリケーションのビルドです。
- Apache Ant は、Java アプリケーションをコンパイル、アセンブル、テストを実行できるようにする多数の組み込みタスクを提供します。
- Apache Ant は、C アプリケーションや C++ アプリケーションなど、Java 以外のアプリケーションを構築するために効果的に使用することもできます。
- [公式サイト](https://ant.apache.org/)

### JavaServlet 
- サーブレットは、サーバーマシン上で実行されるJavaアプリケーションプログラミングインターフェース(API)であり、クライアントによるリクエストをインターセプトし応答を生成/送信します。
- よく知られた例は、HttpServletやGETなどの一般的なHTTPメソッドを使用してHTTP要求をフックするメソッドを提供するPOSTです。
- 特定のHTTP URLパターンをリッスンするようにHttpServletsを設定できます。 
- [GitHub](https://github.megascus.dev/servlet-spec/docs/apidocs/)

### JSP(JavaServer Pages) 
- JavaServer Pages は、HTML内にJavaのコードを埋め込んでおき、Webサーバで動的にWebページを生成してクライアントに返す技術です。
- [公式サイト](https://docs.oracle.com/cd/F25597_01/document/products/wls/docs81/jsp/intro.html) 

### JUnit
- JUnitはJavaプログラム単体テスト用のフレームワークです。
- [公式サイト](https://junit.org/junit5/)

### Seasar
- SeasarはJava EEによる大規模開発を効率的に行なうためのフレームワークです。
- Seasar2は、従来より必要な設定ファイルを削減し依存性を分離して記述することで生産性の高いプログラム開発を可能にします。
- [公式サイト](https://www.seasar.org/)

## Javaフレームワークについて 
### Spring Framework
- Spring Frameworkは、JavaのWEBフレームワークでWEBアプリを作ることができます。
- [公式サイト](https://spring.pleiades.io/)

### Spring MVC
- Webアプリケーションを簡単に作成する機能を提供します。

### Spring Data
- データアクセスに関する機能提供します。

### Spring Batch
- バッチ処理機能を提供します。

### Spring Security
- 認証認可の機能を提供します。

### Spring Boot
- Spring Frameworkに含まれるフレームワークの一つで、Spring Frameworkの機能を使いやすくするため のフレームワークです。
- Spring Frameworkは各フレームワークを使用するにあたってXMLファイル等の用意が必要であり、様々なフレームワークを提供しているが故に環境設定が複雑になってしまうという問題がありました。
- これを解消するために作られたのがSpring Bootで、Spring Bootでは使いたい機能を選ぶだけで自動で初期設定を行ってくれます。

### DI(Dependency Injection) (依存性の注入)
- DIとは、あるオブジェクトや関数が依存する他のオブジェクトや関数を受け取るデザインパターンです。
- Spring FrameworkはDIを提供しており、オブジェクト間の依存関係を疎結合にすることができます。
- 依存関係を疎結合にすることで、コンポーネント（構成要素）の再利用性や保守性が向上しテストも実施しやすくなります。

### AOP（Aspect Oriented Programming）
- AOPとは、アプリケーション全体にまたがる機能をモジュール化しコードの再利用性や保守性を向上させるための手法です。
- AOPは、アプリケーションの機能を横断する共通処理を別のクラスに分離することができます。
- これにより、アプリケーション全体にまたがる共通処理を一箇所にまとめることができコードの重複を避けることができます。
- 具体的には、ログ出力やトランザクション管理などが挙げられます。

### Spring Initializr
- Spring Initializrは条件に合わせてSpring Bootプロジェクトの雛形を生成するWebサービスです。
- Web UIからプロジェクト設定や利用するSpring Projectを指定することで、簡単にSpring Bootプロジェクトの開発を始めることができます。
- [公式サイト](https://start.spring.io/)

### Thymeleaf
- Thymeleafは、Web と非Web環境の両方で機能するJava XML / XHTML / HTML5テンプレート エンジンです。 
- MVCベースの Webアプリケーションのビュー レイヤーで XHTML/HTML5 を提供するのに適しているが、オフライン環境でも任意の XML ファイルを処理できます。
- [公式サイト](https://www.thymeleaf.org/)

### Project Lombok
- Project Lombok は、エディターやビルド ツールに自動的にプラグインされ、Java にスパイスを加える Java ライブラリです。
- 別のゲッター メソッドやイコール メソッドを再度作成する必要はありません。
- アノテーション 1 つで、クラスにフル機能のビルダーが備わり、ログ変数の自動化などが可能になります。
- [公式サイト](https://projectlombok.org/)

### H2 Database
- H2 Databaseとは、Javaプラットフォーム上で動く、ACID関係データベースになります。
- オープンソースで、作者のThomas Muellerは昔、HSQLDBを開発していました。
- [公式サイト](https://www.h2database.com/html/main.html)

### MyBatis
- MyBatis はJavaならびに.NET Frameworkで利用可能な、XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークです。
- Apache License 2.0によるオープンソースソフトウェアとして提供されています。
- [公式サイト](https://blog.mybatis.org/)

### MyBatis-Spring
- MyBatis-Spring によって MyBatis と Spring をシームレスに連携させることができます。
- このライブラリを使えば、MyBatis のステートメントを Spring のトランザクション内で実行することもできます。
- Mapper や SqlSession の生成、他の Bean への注入、MyBatis の例外から Spring の DataAccessException への変換、さらには MyBatis や Spring, MyBatis-Spring に依存しないコードでアプリケーションを構築することも可能になります。
- [公式サイト](https://mybatis.org/spring/ja/index.html)

### Macchinetta(マキネッタ)
- Spring Frameworkを中心としたOSSスタックを用いてWebアプリケーションのサーバサイドの実装を行うためのフレームワークです。
- AWS等のクラウドプラットフォームを利用する際のスケーラビリティを考慮した実装については Cloud Extension に纏めています。
- [公式サイト](https://macchinetta.github.io/)
- [GitHub](https://github.com/Macchinetta)

### Macchinetta Server Framework
- Spring Frameworkベースのアプリケーションサーバフレームワークです。
- Spring Frameworkに人気の高いJavaライブラリを組み合わせています。
- [公式サイト](https://macchinetta.github.io/server.html)

### Macchinetta Batch Framework
- Spring Batchベースのフレームワークです。
- MyBatis 3、TERASOLUNA Batch 5系などを使い、スケジューラベースで処理を実施する仕組みになっています。
- [公式サイト](https://macchinetta.github.io/batch.html)

### Macchinetta Client Libraries
- JavaScript/CSSライブラリを組み合わせたフレームワークです。
- 基本的にBootstrap/jQueryをベースに、人気の高いライブラリを組み合わせるといった作りになっています。
- [公式サイト](https://macchinetta.github.io/client.html)

### Play Framework 
- Play framework は、ScalaとJava言語で書かれたオープンソースのWebアプリケーションフレームワークである。 
- MVCを採用しており、ホットリローディングやエラーのブラウザ上への表示の推奨により開発者の生産性を上げることを目的としている。 
- 動作が軽くメモリ使用量が少ないです。そのため、コンパイル時間が短くテスト時間を短縮できます。
- [公式サイト](https://www.playframework.com/documentation/ja/2.3.x/Home)

### Java Server Faces
- Java Server Facesとは、Webアプリケーションのユーザインタフェースを作成するためのアプリケーションフレームワークです。
- Java Server Facesに沿って開発したユーザインタフェースUIを開発環境で利用することでGUIによるWebアプリケーション開発が可能となります。
- クライアントで発生したイベントを受けて、サーバ側で処理を実行する「イベントモデル」を提供します。
- Java Server Facesのフレームワークを利用して独自のUIを開発することができます。
- [公式サイト](https://javaee.github.io/javaserverfaces-spec/)

### Apache Structs 
- Java Servlet や JSP の技術を用いてWebアプリケーションを構築する上で有用な、オープンソースフレームワークです。
- [公式サイト](https://struts.apache.org/)

### Spark Framework 
- Apache Sparkは、クラスターコンピューティング向けの分散処理フレームワークです。
- Sparkは2009年にカルフォルニア大学バークレー校のAMPLabで開発が開始され、現在はApacheソフトウェア財団のトッププロジェクトの1つとして管理/開発が継続されています。 
- Sparkの提供する簡素なAPIを使って柔軟な処理モデルを容易にプログラミング可能な大規模データに対して従来のMap,Reduceに比べ遥かに短い時間で処理が行えます。
- [公式サイト](http://sparkjava.com/)
- [公式ドキュメント](https://spark.apache.org/docs/latest/)