質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JVM

JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

Q&A

解決済

3回答

3735閲覧

JavaSEとJavaEEの違い。JDKが新しいリリースモデルとなることの影響。

fsk5303

総合スコア21

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JVM

JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

2グッド

6クリップ

投稿2018/10/04 04:41

編集2018/10/04 04:51

質問する背景

私は以前からJavaEEを使用してWebアプリケーションを作っていました。
JavaSEの提供体系が大きく変わり、有償サポートとなること、無償でサポートを受ける場合OpenJDKへ移行する必要が有ることなどをきっかけにJDKやJavaSE、JavaEEについて調べ始めました。
調べているうえで分からない点を質問させて下さい。

調べた事

  • JavaSEとは標準のAPIであり、例えばSystem.out.printlnなどもこれに含まれる。(参考(1)では「JavaSE API」参考(2)では「JavaSE」と表記されている。個人的にはこれ自体をJavaSEというのではなく、これはあくまでJavaSE APIと解釈した方がしっくりくる。)
  • JREとはJavaを実行するJVMやAppletなどの実行環境と上記APIを合わせたもの。
  • JDKとはJavaを開発する時に必要なものであり、例えばjavacやjavadocなどがこれに含まれる。また、上記JavaSEやJREも含まれる。
  • 上記3つを合わせてJavaSEと呼ぶ(一つ目の項目がJavaSE APIであり、JDK全体をJavaSEと呼ぶのが個人的にはしっくりくる。)
  • JavaEEはJavaSEにWebアプリケーション開発用の機能を足したもので、例えばJSPやServletがこれに含まれる。動かすためにはglassfishなどの対応したサーバーが必要。TomcatはJavaEEの一部機能に対応している。

参考
(1)https://www.oracle.com/technetwork/java/javase/tech/index.html
(2)https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/671/671.pdf

質問0

上記調べた事のうち、間違えて解釈している部分があったら教えてください。

質問1

https://www.oracle.com/technetwork/java/javase/tech/index.html
https://ja.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
①の画像ではJDKはJRE(JVM等)を含んでいますが、②の画像ではJDKはJRE(JVM等)を含んでいません。どういうことでしょうか?
②の画像を見るに、JavaEEがJavaSEをすっぽり包んでいるので、JavaEEのバイナリファイルがあって、その中にJavaSEも含まれると思い込んでいたのですが、調べるとどうやらその解釈は間違っていますよね?

質問2

なぜJavaSEは「JDK」 JavaEEは「SDK」という表記なのでしょうか。その違いはなんなのでしょうか。
JavaSE
https://www.oracle.com/technetwork/java/javase/downloads/index.html
JavaEE
https://www.oracle.com/technetwork/java/javaee/downloads/index.html

質問3

JavaSEはJDK 8, JDK8u5, JDK 8u11...のように定期的にバージョンアップしていますが、JavaEEはずっとバージョンが7.0や8.0のままなのはなぜでしょうか。脆弱性対応等のバージョンアップはJavaEEにはないのでしょうか。
仮にそうだとしたら、JavaEEは脆弱なのではないでしょうか。

質問4

https://384uqqh5pka2ma24ild282mv-wpengine.netdna-ssl.com/wp-content/uploads/2016/04/release-dates-1.png
JavaSE〇リリースの約2年後にJavaEE〇がリリースされていますが、両JDKは対応しているのでしょうか。
※例えばJDK8のサポートが2019年1月で終了(=JDK8の脆弱性修正パッチが提供されないようになる)しますが、それは「JavaEE8のサポートが2019年1月で終了する」と読み替えて良いのでしょうか?
違うとしたら、JavaEE8のサポートはいつまでなのでしょうか?(そもそも、質問3にあるようにJavaEE8の修正パッチが配布(=サポート?)されているのか不明なのですが・・・。)

質問5

IDEでWebアプリケーションを開発するときに、Tomcatでサーバーを起動し実行しているのですが、
TomcatでJavaプラットフォームを選択するときにJDK 1.8(これがなぜ8ではなく1.8という表記なのかも良く分かりません。)を選択しています。
そもそもTomcat自体はJavaのコンパイル等はせず実行するだけだと思うのでJREで足りると思うのですがなぜJDKが使われるのでしょうか。

質問6

セキュリティ面で理想的なプラットフォームの選択肢として、開発環境ではJavaEEの最新版であるJavaEE8を使い、本番サーバーではJavaSEの最新版であるJDK11を使うという運用になるのでしょうか。
その場合、バージョンの違いによる仕様の違いは影響ないのでしょうか、あるとしたらどのように吸収するのでしょうか。
JavaEEのバージョンはそのままに、JavaSEのJDKのバージョンだけ上げて行っても問題ないのでしょうか。

補足

調べれば調べるほど、良く分からなくなってきます。
恐らく根本的な解釈が間違っているので頓珍漢なことを聞いていると思います。
何処の考えたかがそもそもおかしいかを教えて頂けると助かります。
レベルの低い質問だと思いますが、宜しくお願い致します。

ko.tu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/04 07:14

質問が複数あるがベストアンサーはどうやって決めるつもりで?
退会済みユーザー

退会済みユーザー

2018/10/04 07:17

基本的に(メジャー)(ミドル)(マイナー)(ビルド)がバージョンの形式
fsk5303

2018/10/05 00:36

大変失礼いたしました。そこまで深く考えておりませんでした。反省し、以後気を付けます。
guest

回答3

0

ベストアンサー

普段、意識したことないので改めて自分の理解を整理してみました。
間違ったこといっぱいあるかも・・・訂正するので、コメントよろしくお願いします。

質問0

daisuke7 さんの回答を参照

と追記

"Java SE"とは、文脈によってさしているものが違います。
が、多くの場合"Java SE Tecnologies"または"Java SE Platform"の略だと思います。
”標準のAPI”という表現をした場合は、"Java SE API"で良いと思います。

TomcatはJavaEEの一部機能に対応している。

機能というより仕様です。
"Java EE"もSE同様に、Tecnologiesや、Platformを表しますが、SEとの違いとして
実行環境がsoftware (Java EE 仕様を満たすServer software)であるということです。

質問1

  • 画像の話

 出展の違うものが違うことの理由を想像しても意味がない気がします。
書いた人の認識違い。書いた人の表現不備かと思います。

  • JavaEEのバイナリ云々

 JavaSEが含まれるというのは違うという認識で良いと思います。

質問2

指摘されるまで意識してなかった・・・
想像ですが、JDKと違い、JavaEEは実行する環境がsoftware(GlassFish、JBoss、Wildfly、Weblogic etc)
が必要なので、SDKとしてるのではないでしょうか。

質問3、4

Java EEの実装は、各サーバーベンダーまかせなので、ベンダーの脆弱性アップデートを適用させるのでは?
画像が何を表しているのか理解できないのですが・・・
JavaSEとJavaEEは、別ものなので両JDKという表現が、ちょっとわかりませんでした。

質問5

JDK 1.8(これがなぜ8ではなく1.8という表記なのか

過去の経緯ですね。なぜなんだろう?
ちらっとググったら、マーケティング上の理由らしいですが。
真偽は、わかりません。(あまり興味無いので調べてないです)

質問6

JavaSEとJavaEEは、別もの。
JavaEEのバージョンを上げる = サーバソフトウェアのバージョンをあげるということなので
サーバの動作要件によるJDKのバージョンアップなどが必要になるはずです。

またセキュリティモデルが違うことで、新しいJavaSEを適用するとJavaEEとかに
ワーニングやエラーが出ることもあるかも知れません

投稿2018/10/04 07:06

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fsk5303

2018/10/05 00:42 編集

質問一つ一つにご丁寧な回答、大変感謝致します。ありがとうございます。 質問0 >機能というより仕様です。 なんとなく理解出来た気がします。 「TomcatはJavaEEの仕様の一部を実装しているアプリケーションサーバソフトウェアである」「glassfishはJavaEEの仕様を実装しているアプリケーションサーバソフトウェアである」という解釈で間違いないでしょうか? 質問1・質問2・質問5 納得致しました。ありがとうございます。 質問4・質問6 >Java EEの実装は、各サーバーベンダーまかせなので、ベンダーの脆弱性アップデートを適用させるのでは? >JavaSEとJavaEEは、別ものなので両JDKという表現が、ちょっとわかりませんでした。 >JavaEEのバージョンを上げる = サーバソフトウェアのバージョンをあげるということなのでサーバの動作要件によるJDKのバージョンアップなどが必要になるはずです。 >またセキュリティモデルが違うことで、新しいJavaSEを適用するとJavaEEとかにワーニングやエラーが出ることもあるかも知れません まさに私が欲していた回答という感じで、少し靄が晴れた気がしております。 - Java EEはただの仕様であり、実体ではない。 - Java EEはアプリケーションサーバとして実装されている。Java EEの実体はglassfishやTomcat等である。 - Java EEのアップデート=対応するアプリケーションサーバ(glassfishやTomcat等)のアップデート という解釈で間違いないでしょうか。 しかし、例えば「Tomcat8.5(=JavaEE7の仕様を実装)をアプリケーションサーバソフトウェアとして使用し、JavaSE 8のJDKで問題無く動作していたが、JavaSE 8のサポートが切れたためJavaSE 11にアップデートした。動作検証をしたところ、エラーが発生するようになった。」という事が起こりうる、という事ですよね。 そのような問題は、JavaSE 11を使う前提で考えると、アプリケーションサーバのアップデート・あるいは変更(glassfishに変更する等)・あるいはWebアプリケーションの改修等で対応する必要が出てくるという事ですよね。
momon-ga

2018/10/05 05:06

ちょっと誤解を与えたかも知れません。 セキュリティ上の問題のある設定とかを使えなくするような内容なので、アプリケーションの問題というより サーバーの起動エラーとかが対象になります。(というか、なるというより可能性の話) 業務アプリの改修が必要なことは稀だと思います。
fsk5303

2018/10/08 23:37

なるほど、とても理解が進みました。 質問1つ1つにご回答、有難うございました。 今後も何かありましたら、宜しくお願い致します。
guest

0

JavaEEはずっとバージョンが7.0や8.0のままなのはなぜでしょうか。

実装としてのJava EEはOracleからEclipse Foundationへ移管され、Jakarta EEという名前に変更されています。つまり、「Java EE実装の」次のバージョンは出ません

投稿2018/10/04 04:44

編集2018/10/04 04:47
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fsk5303

2018/10/04 04:49 編集

返信ありがとうございます。 すみません、JavaEEがJakartaEEへと移行しているのは存じておりました。 しかし、過去にリリースされたJavaEE7.0やJavaEE8.0について、調べてみると(マイナー)バージョンアップがリリースされている様子が見当たらなかったのです。 JavaSEのように脆弱性等の修正があればJavaEE7.0→7.1→7.2にようにバージョンアップされるだろうと思うのですがそれが無いので疑問に思ったのです。 それともJavaEEは脆弱性等の修正をする必要が無いくらい完成された完璧なプラットフォームなのでしょうか?
maisumakun

2018/10/04 04:53

Java EE 8のリリース後1ヶ月ほどでEclipse Foundationへの移管が行われているので、その時点でOracleによるサポートが打ち切られたようです(「Java EE 8 SDK Update 1」というのはあったようですが)。
fsk5303

2018/10/04 05:02

>Java EE 8のリリース後1ヶ月ほどでEclipse Foundationへの移管が行われている これに関しては初めて知りました。ありがとうございます。 たしかに「Java EE 7 SDK Update 2」というのもありますね。 そうすると、javaee-web-apiのリポジトリを見ると、7.0と8.0しかないのは何故なのでしょうか・・・。 https://mvnrepository.com/artifact/javax/javaee-web-api
guest

0

Java SEというのはプラットフォームの総称です。
その仕様(規格)の範囲として、Java SE APIやJRE(JVM含む)、JDKが含まれます。
JDKはOracleの定義ではJava SE Development Kitとなります。
なぜ略してJDKかと言われると、おそらく歴史の流れ、あるいは商標の問題だと思います。
最初はJava SEなんてものはなく、単なるJavaでした。だから開発キットはJDK。
バージョンアップとともにAPIが増えてきたので、
基本部分を Java → J2SE → Java SE と名前を変えました。

Java EEは基本的にアプリケーションサーバ向けのAPIを定めたものです。
ですから仕様だけならJVMなどは含まれないはず(違っていたらごめんなさい)ですが、
サーバの実行形態に合わせた専用設計のJVMを積むこともあります。
これはJava EE仕様ではなくサーバ製品の仕様です。

TomcatがなぜJDKを必要とするかというと、実際にコンパイラが必要だからです。
たとえばJSP。

投稿2018/10/04 05:27

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fsk5303

2018/10/05 00:37 編集

ご回答、ありがとうございます。感謝致します。 >>Java SEというのはプラットフォームの総称です。 理解出来ました。ありがとうございます。 >>Java EEは基本的にアプリケーションサーバ向けのAPIを定めたものです。 - Java EEはただの仕様であり、実体ではない。 - Java EEはアプリケーションサーバとして実装されている。Java EEの実体はglassfishやTomcat等である。 - glassfishやTomcat等のアプリケーションサーバは基本的にJava SE(JRE上)で動く。 - Java EEのアップデート=対応するアプリケーションサーバ(glassfishやTomcat等)のアップデート という解釈で間違いないでしょうか?
daisuke7

2018/10/05 01:38

そうですね。API仕様があっても実装がなければ、サーブレットやEJBのようなコンテナありきの コンポーネントはビルドすることも実行することも出来ません。 Tomcatも元々はリファレンス実装のような扱いでした。
fsk5303

2018/10/08 23:37 編集

なるほど、とても理解が進みました。 ご回答、有難うございました。感謝いたします。 今後も何かありましたら、宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問