J2EE/Jakarta EE面接対策:必須40問&回答(2026年版)

J2EE/Jakarta EEの面接準備ですか?この包括的ガイドでは、アーキテクチャ、コンポーネント、パターン、実践的トラブルシューティングにわたる40の核心技術質問に加え、戦略的模範回答付きの10の行動/シナリオ質問をカバー。モダンなJakarta EE文脈にアップデートしつつ、古典的J2EE基礎も維持しています。
👉 無料PDFダウンロード: J2EE面接質問&回答集
コアアーキテクチャとプラットフォーム基礎
1. J2EEアーキテクチャとコア特性
J2EEは、プレゼンテーション、ビジネスロジック、データ層を分離するマルチティア分散モデルを定義し、拡張性と保守性を実現。コンテナ管理サービス(セキュリティ、トランザクション、並行制御)を備えた標準化ランタイムを提供し、コンポーネント再利用とモジュールデプロイを可能にします。
| 層 | 技術 | 責務 |
|---|---|---|
| プレゼンテーション | Servlets、JSP、JSF | UI処理 |
| ビジネス | EJB(Session、Message-Driven) | ビジネスロジック |
| 統合 | JCA | 外部システム(ERP、メインフレーム) |
| データ | JDBC、JPA/ORM | データベースアクセス |
例: 銀行ポータル:Servletでダッシュボード、EJBでトランザクション、JDBCで口座データ。
2. J2EE vs Java SE
Java SE = コア言語、API、ユーティリティ。J2EE = エンタープライズ拡張:コンテナ、EJB、Servlet、JMS、JDBC、JPA、JTA、JAAS。Java SEはデスクトップツール構築;J2EEは分散、トランザクショナル、セキュアなエンタープライズシステム構築。
| メリット | 説明 |
|---|---|
| コンポーネントベース | モジュール開発 |
| 標準化API | EJB、Servlet、JMS、JDBC、JPA |
| 組み込みサービス | トランザクション、セキュリティ、プーリング |
| 分散コンピューティング | RMI、JMS、JCA統合 |
3. EJBタイプとユースケース
| EJBタイプ | 特性 | ユースケース |
|---|---|---|
| Stateless Session | クライアント状態なし、プール | 決済処理、バリデーション |
| Stateful Session | 会話状態維持 | ショッピングカート、ウィザード |
| Singleton Session | アプリごと1インスタンス、共有状態 | キャッシュ、カウンター、設定 |
| Message-Driven (MDB) | 非同期JMSコンシューマ、インターフェースなし | イベント処理、注文キュー |
| Entity(レガシー) | JPAエンティティに置換 | 非推奨 |
4. ServletライフサイクルとCGIに対する利点
- ロードとインスタンス化(コンテナによる)
- 初期化(
init()経由) - リクエスト処理(
service()、doGet()/doPost()経由) - 破棄(
destroy()経由)
| Servlet | CGI |
|---|---|
| スレッドベース、高性能 | プロセスベース、低速 |
| メモリ効率良好 | 高リソース消費 |
| Javaエコシステム統合 | 言語依存 |
単一インスタンスが数千リクエスト処理 vs CGIのリクエストごとプロセス生成。
5. プレゼンテーション層でのJSP vs Servlets
| 要素 | JSP選択 | Servlet選択 |
|---|---|---|
| 出力の性質 | 埋め込みJava付きHTML中心 | HTML最小、ロジック多め |
| 複雑なロジック | 避ける | 前処理、計算 |
| 保守性 | クリーンな分離 | コントローラ役割(MVC) |
ベストプラクティス:JSPをビュー、Servletをコントローラに。
6. J2EEでのJDBC:長所と短所
| 長所 | 短所 |
|---|---|
| シンプルなSQL API | ボイラープレートコード |
| ベンダー非依存 | 誤用時SQLインジェクションリスク |
| 全RDBMS対応 | 手動リソース管理 |
通常DAOやORM(Hibernate/JPA)でラップして抽象化。
7. トランザクション管理タイプ
| タイプ | 説明 |
|---|---|
| Container-Managed (CMT) | アノテーション(@TransactionAttribute)で宣言的;コンテナが開始/コミット/ロールバック処理 |
| Bean-Managed (BMT) | UserTransactionでプログラマチック;開発者が境界制御 |
| JTA | リソース横断の分散/グローバルトランザクション標準API |
例: 資金移動にはアトミック性必須;CMTなら失敗時自動ロールバック。
8. JNDI vs RMI
| 特徴 | JNDI | RMI |
|---|---|---|
| 目的 | リソース検索(ネーミング/ディレクトリ) | リモートメソッド呼び出し |
| 用途 | DataSource、EJB、JMSキュー取得 | リモートEJBメソッド呼び出し |
JNDIが検索;RMIが通信。
9. JMS:非同期メッセージングのメリット
- ノンブロッキング → 性能向上
- メッセージ持久化 → 耐障害性
- プロデューサー/コンシューマー分離 → 拡張性
- Point-to-Point(キュー)& Pub-Sub(トピック)
例: ECで注文確認をキューイング;チェックアウト即時応答。
10. JSPタグタイプ
| タグタイプ | 目的 | 例 |
|---|---|---|
| Directive | ページ設定 | <%@ page %> |
| Scripting | Java埋め込み | <% %> |
| Action | サーバーコンポーネント | <jsp:include> |
| Expression Language (EL) | データアクセス | ${user.name} |
| Custom | 再利用可能タグライブラリ | <my:table> |
11. J2EEでのMVC
| コンポーネント | 技術 | 役割 |
|---|---|---|
| Model | POJO、EJB、JPAエンティティ | ビジネスロジック、状態 |
| View | JSP、JSTL、JSF | データ描画 |
| Controller | Servlets、Front Controller | リクエストディスパッチ、フロー制御 |
UI/バックエンド並行作業を可能に。
12. Filter:横断的関心事
Filterインターフェース(init, doFilter, destroy)でリクエスト/レスポンスをインターセプト。チェーン可能。用途:認証、ログ、圧縮、バリデーション。
| 利点 | 説明 |
|---|---|
| ロジック集約 | 横断的関心事を単一箇所に |
| 再利用可能 | 複数エンドポイントに適用 |
| Servlet簡素化 | ボイラープレート除去 |
| 設定容易 | web.xmlまたは@WebFilter |
13. DAOパターン:いつ、なぜ?
DBアクセスをインターフェース裏にカプセル化;永続化をビジネスロジックから分離。メリット:JDBC/Hibernate/JPA切替、テスト用モック、アクセスパターン標準化。
interface CustomerDAO { Customer findById(Long id); }
14. セキュリティ実装手法
| 手法 | 説明 | 例 |
|---|---|---|
| 宣言的 | web.xml/アノテーション | ロールベースアクセス |
| プログラマチック | コードでチェック | request.isUserInRole("ADMIN") |
| JAAS | プラガブル認証フレームワーク | エンタープライズSSO |
| HTTPS/SSL | 転送暗号化 | セキュアログイン |
15. アプリケーションサーバー vs Webサーバー
| 特徴 | App Server (WebLogic, WildFly) | Web Server (Apache HTTPD, Nginx) |
|---|---|---|
| EJBサポート | あり | なし |
| トランザクション管理 | 組み込み | なし |
| JMS | 利用可能 | なし |
| 複雑性 | 高 | 低 |
16. セッション管理手法
| 手法 | 長所 | 短所 |
|---|---|---|
| Cookies | シンプル、自動 | 無効化可能 |
| URL書き換え | Cookieなしで動作 | URL長大、セキュリティリスク |
| HttpSession | 簡単API、サーバーサイド | メモリ消費 |
| Hidden Fields | フォームでシンプル | POSTのみ |
銀行:HttpSession + 短タイムアウト。
17. 優れたJ2EE設計の特性
- 明確な分離:MVC、DAO、Service層
- 標準パターン:Front Controller、Business Delegate、Service Locator、DAO
- 高凝集、低結合
- 堅牢な例外処理とログ
- 設定可能、環境非依存デプロイ
18. ELとJSTL:スクリプトレット削減
EL: ${customer.name}
JSTLループ:
<c:forEach var="item" items="${cart.items}"> ${item.name} </c:forEach>
ページが綺麗に;フロント開発者はJava知識少なくて済む。
19. 一般的なJ2EEデザインパターン
| パターン | メリット |
|---|---|
| Front Controller | リクエスト処理集約 |
| DAO | 永続化分離 |
| Business Delegate | プレゼンテーション複雑性削減 |
| Service Locator | JNDIルックアップキャッシュ |
| MVC | UIアーキテクチャ整理 |
20. 接続プーリング:パフォーマンスに不可欠
DataSource(JNDI)経由で事前確立DB接続を再利用。コンテナがライフサイクル、並行制御、サイジング管理。メリット:高速アクセス、リソース使用量削減、拡張性向上、信頼性向上。
21. デプロイメントディスクリプタ(web.xml)の意義
Servletマッピング、フィルター、リスナー、セキュリティ制約、セッション設定の一元管理。環境別オーバーライド、監査、厳格セキュリティマッピングで依然重要—多くの企業がアノテーション単独より優先。
22. Stateless vs Stateful Session Bean
| 属性 | Stateless | Stateful |
|---|---|---|
| 状態 | なし | クライアント固有 |
| 拡張性 | 高 | 中程度 |
| ユースケース | 決済、バリデーション | ショッピングカート、ウィザード |
| ライフサイクル | 短 | 長、パッシベーション/アクティベーション |
23. Interceptor:モジュールな横断ロジック
@Interceptor + @InterceptorBindingでログ、監査、トランザクションチェック。メリット:モジュール化、ボイラープレート削減、優先度設定可能。
24. リソースインジェクション
| アノテーション | インジェクト対象 | 例 |
|---|---|---|
@Resource | DataSource、JMS、Env Entry | @Resource DataSource ds; |
@EJB | Enterprise Beans | @EJB OrderService svc; |
@PersistenceContext | JPA EntityManager | @PersistenceContext EntityManager em; |
手動JNDIルックアップ不要;より綺麗、テスト容易。
25. JCA:レガシーシステム統合
ERP、メインフレーム、メッセージング接続の標準フレームワーク。リソースアダプタがトランザクション、セキュリティ、プーリング管理。インバウンド(イベント駆動)とアウトバウンド通信サポート。
例: 銀行JCAアダプタ → COBOLコアで顧客レコード。
26. クラスローダーとデプロイ分離
アプリごとのクラスローダーで依存関係隔離、競合回避、ホットデプロイ可能、共有ライブラリ可視性制御。ClassNotFoundException/バージョン競合解決。
27. 拡張性要因とパフォーマンスチューニング
| 要因 | 影響 |
|---|---|
| セッションサイズ | 大きい = 拡張性低下 |
| DBインデックス | 不備 = 高レイテンシ |
| キャッシュ戦略 | 高コスト操作削減 |
| プール設定 | 並行性/スループット制御 |
チューニング:Stateless EJB、非同期メッセージング(JMS)、スレッドプール、JVM GC、プロファイリング(JProfiler)。
28. Message-Driven Beans (MDB)
| 特徴 | MDB | Session Bean |
|---|---|---|
| 相互作用 | 非同期(JMS) | 同期 |
| インターフェース | なし | Local/Remote |
| 状態 | Stateless | Stateful可 |
イベント駆動分離。
29. JPA vs Entity Bean
- シンプルなAPI/アノテーション(
@Entity、EntityManager) - 遅延ロード、キャッシュ、高性能
- ベンダー非依存(Hibernate、EclipseLink)
- 直感的オブジェクトリレーショナルマッピング
30. Servlet-EJB通信とパターン
JNDIルックアップまたは@EJBインジェクション経由。分離パターン:
| パターン | 目的 |
|---|---|
| Business Delegate | EJB複雑性抽象化 |
| Service Locator | JNDIルックアップキャッシュ |
| Session Facade | 粗粒度操作 |
31. Front Controllerパターン
単一コントローラ(ActionServlet/DispatcherServlet)がリクエストディスパッチ、認証、ログ、ビュー選択を集約。Struts ActionServlet、Spring MVC DispatcherServletが実装。
32. EJBライフサイクルとリソース管理
| Beanタイプ | ステージ |
|---|---|
| Stateless | Instantiate → Pool → Method Calls → Destroy |
| Stateful | Instantiate → Method Calls → Passivate → Activate → Destroy |
| MDB | Instantiate → Message Handling → Destroy |
コンテナプーリングで負荷下のリソース使用最適化。
33. パフォーマンス改善テクニック
- キャッシュ(ローカル/分散:JCache、Redis)
- SQL最適化、インデックス
- HTTPセッションサイズ/ライフサイクル削減
- 負荷分散、クラスタリング
- JVMヒープ/GCチューニング
- 重いレポートに非同期JMS
34. WAR vs EAR パッケージング
| 特徴 | WAR | EAR |
|---|---|---|
| Webコンポーネント | あり | あり |
| EJBモジュール | なし | あり |
| 適用 | Webアプリ | エンタープライズアプリ |
| デプロイ | 単一モジュール | マルチモジュール |
35. ログフレームワークと選定要因
JUL、Log4j2、Logback、サーバー統合。選定基準:非同期アペンダー(Logback優秀)、設定柔軟性(XML/JSON/Properties)、サーバー統合、並行時パフォーマンス。
36. アプリケーションライフサイクルでのListener
| Listener | 目的 |
|---|---|
ServletContextListener | アプリ起動/シャットダウン初期化 |
HttpSessionListener | セッション作成/破棄追跡 |
ServletRequestListener | リクエストログ/追跡 |
ビジネスコードに触れずイベント駆動監視。
37. コンテナ特性とエンタープライズサービス
- 自動ライフサイクル管理
- 組み込み:セキュリティ、トランザクション、スレッディング、プーリング
- 統合:メッセージング、永続化、ネーミング
- ディスクリプタ/アノテーションで設定駆動
EJBコンテナが例外時にトランザクション自動ロールバック。
38. クラスタリング:信頼性と拡張性
| 利点 | 説明 |
|---|---|
| 高可用性 | 単一障害点なし |
| 負荷分散 | リクエスト分散 |
| フェイルオーバー | クラッシュ時シームレス復旧 |
| 拡張性 | トラフィック増にノード追加 |
セッションレプリケーションでユーザー状態保持。航空券システムが繁忙期対応。
39. Service Locatorパターン
EJB、DataSource、JMSのJNDIルックアップを集約/キャッシュ。解決:繰り返しルックアップオーバーヘッド、複雑ネーミングロジック、単一アクセスポイント。
40. Stateful Session Beanの欠点と緩和策
| 欠点 | 緩和策 |
|---|---|
| メモリオーバーヘッド | セッションデータ最小化 |
| クラスタリング複雑性 | セッションレプリケーション有効化 |
| 長いライフサイクル | 会話状態必須時のみ使用 |
🔍 実践シナリオ質問(行動・状況ベース)
完全な文;必須フレーズを各1回のみ使用。
1. J2EEアーキテクチャのコアコンポーネントは?
期待: マルチティア、主要API。
回答: 「J2EEアーキテクチャのコアコンポーネントには、クライアント層、Web層、ビジネス層、エンタープライズ情報システム層が含まれます。これらの層は、Servlet、JSP、EJB、JMS、JDBCなどのテクノロジーを使用して連携し、スケーラブルでモジュール化されたエンタープライズソリューションを提供します。」
2. ServletとJSPの違いは?
期待: リクエスト処理 vs ビュー描画。
回答: 「Servletは主にリクエスト処理とビジネスロジックに使用され、一方JSPはHTML内にJavaを埋め込むことで動的Webコンテンツ作成を簡素化するよう設計されています。JSPは通常プレゼンテーションロジックに、Servletは複雑な処理に使用されます。」
3. J2EEでのトランザクション管理は?
期待: JTA、CMT vs BMT。
回答: 「J2EEアプリケーションはJava Transaction APIを使用して分散トランザクションを管理します。コンテナ管理トランザクションは、アプリケーションサーバーが境界を制御できるようにすることでこのプロセスを簡素化し、Bean管理トランザクションは開発者により細かな制御を与えます。」
4. 困難なJ2EEアプリと成功要因?
期待: 問題解決、チームワーク。
回答: 「前職で、厳格なセキュリティと高可用性を要求される大規模金融アプリケーションに取り組みました。ビジネスロジックにEJBを実装し、接続プーリングを最適化し、セキュリティチームと密に連携してコンプライアンス要件を満たすことで成功を確実にしました。」
5. 機密データ向けセキュアなJ2EEアプリ設計は?
期待: 認証、認可、暗号化、セキュアコーディング。
回答: 「JAASを認証と認可に使用し、HTTPSで安全な通信を実装し、全入力を検証し、機密データを保存時暗号化します。また、アプリケーションサーバーがベストプラクティスに従って硬化されていることを確認します。」
6. J2EE本番環境でのトラブルシュート経験は?
期待: プレッシャー対応、根本原因分析。
回答: 「前職で、スレッドダンプ分析とJDBC接続使用状況確認によりパフォーマンス劣化問題を調査しました。接続リークを特定したら、適切なリソースクリーンアップを実装し、再発防止のため監視アラートを追加しました。」
7. EJBが拡張性と保守性をどう支えるか?
期待: プーリング、ライフサイクル、モジュール性。
回答: 「EJBはコンテナ管理プーリング、非同期処理、分散デプロイメントを通じて拡張性を支援します。また、ビジネスロジックをプレゼンテーションとインフラ懸念から分離することで保守性も向上させます。」
8. DBパフォーマンス低下時のトラブルシュート手順は?
期待: 論理的ボトルネック分析。
回答: 「まずSQL実行計画を分析し、欠落インデックスをチェックし、接続プール設定を見ます。次にJ2EEフレームワークを活用したキャッシュ戦略で繰り返しクエリを削減します。」
9. 複数J2EEプロジェクトでの競合優先順位対応は?
期待: 時間管理、コミュニケーション。
回答: 「前職では、ビジネスインパクトを評価し、ステークホルダーと明確にコミュニケーションし、複雑な開発タスクを管理可能なセグメントに分解することで競合タスクを管理しました。これにより品質を犠牲にせず一貫した納品が可能になりました。」
10. レガシーJ2EEからJakarta EE/モダンへの移行アプローチは?
期待: モダナイゼーション戦略、コンテナ化。
回答: 「非推奨APIの評価から始め、ライブラリをJakarta EEパッケージに更新し、アプリケーションをモジュール化します。前職ではこのアプローチで新しいサーバーへの移行を成功させ、ダウンタイムを削減しました。」
Java
- Java文字列操作マスター:必須関数・メソッド・実践例
- Javaマルチスレッド面接トップ40問と回答 – 2026年版
- Java カスタム例外の作成:ステップバイステップガイド
- Java 10の新機能とリリースモデル:6ヶ月サイクルとLTSの解説
- Javaで素数判定を行うプログラム
- Javaコンストラクタ完全理解:初期化とベストプラクティス
- Javaループ制御完全マスター:while/for/do-whileとbreak/continue
- Java TreeSet完全ガイド:操作、メソッド、実践例
- Java this キーワード完全マスター:目的、用法、実践例
- Java Math クラス完全ガイド:abs、round、ceil、floor、min、max など実例付き
- Java while & do-whileループをマスター:ステップバイステップチュートリアル