{"id":1048,"date":"2024-11-19T10:34:33","date_gmt":"2024-11-19T01:34:33","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1048"},"modified":"2025-03-24T08:52:49","modified_gmt":"2025-03-23T23:52:49","slug":"java-ee%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%892024%ef%bc%9a%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%8b%e3%82%89%e5%ae%9f%e8%a3%85%e3%81%be%e3%81%a7%e8%a7%a3%e8%aa%ac%e3%81%99%e3%82%8b12%e3%81%ae","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1048","title":{"rendered":"Java EE\u5b8c\u5168\u30ac\u30a4\u30c92024\uff1a\u4ed5\u7d44\u307f\u304b\u3089\u5b9f\u88c5\u307e\u3067\u89e3\u8aac\u3059\u308b12\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8"},"content":{"rendered":"<div id=\"sgb-css-id-1\">\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u306f\u3058\u3081\u3066<\/a>  <\/li>  <li>    <a href=\"#i-1\">\uff11\uff0eJava EE\u3068\u306f\uff1a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u958b\u767a\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">1.1 Java EE\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">1.2 Java SE\u3068Java EE\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-5\">\uff12\uff0eJava EE\u306e\u9032\u5316\uff1aJakarta EE\u307e\u3067\u306e\u6b74\u53f2\u3068\u5909\u9077<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-6\">2.1 \u30d0\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306e\u4e3b\u8981\u306a\u6a5f\u80fd\u8ffd\u52a0\u3068\u6539\u5584\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">2.2 Jakarta EE\u3078\u306e\u79fb\u884c\u3067\u6ce8\u610f\u3059\u3079\u304d3\u3064\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\uff13\uff0eJava EE\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a73\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">3.1 Servlet\u30b3\u30f3\u30c6\u30ca\u306e\u4ed5\u7d44\u307f\u3068\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-17\">3.2 EJB\u306b\u3088\u308b\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">3.3 JPA\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-23\">\uff14\uff0eJava EE\u306b\u3088\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u5b9f\u8df5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">4.1 MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u52b9\u679c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">4.2 \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-31\">\uff15\uff0eJava EE\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-32\">5.1 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b5\u3064\u306e\u8a2d\u8a08\u539f\u5247<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-38\">5.2 \u3088\u304f\u3042\u308b\u5b9f\u88c5\u30df\u30b9\u3068\u89e3\u6c7a\u7b56<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-42\">\uff16\uff0eJava EE\u304b\u3089\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u79fb\u884c\u6226\u7565<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-43\">6.1 \u6bb5\u968e\u7684\u306a\u79fb\u884c\u306e\u305f\u3081\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-46\">6.2 Spring Boot\u3068Java EE\u306e\u4f7f\u3044\u5206\u3051<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-50\">\u307e\u3068\u3081\u3068\u4eca\u5f8c\u306e\u5c55\u671b<\/a>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u306f\u3058\u3081\u3066<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-2\">\n<p>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001Java EE\u306f\u9577\u5e74\u306b\u308f\u305f\u3063\u3066\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u3066\u304d\u307e\u3057\u305f\u30022024\u5e74\u73fe\u5728\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u3044\u3063\u305f\u65b0\u3057\u3044\u6f6e\u6d41\u306e\u4e2d\u3067\u3082\u3001\u305d\u306e\u91cd\u8981\u6027\u306f\u5909\u308f\u308b\u3053\u3068\u306a\u304f\u3001\u3080\u3057\u308dJakarta EE\u3068\u3057\u3066\u65b0\u305f\u306a\u9032\u5316\u3092\u9042\u3052\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-3\">\n<p>\u672c\u8a18\u4e8b\u3067\u306f\u3001Java EE\u306e\u57fa\u790e\u304b\u3089\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3001\u305d\u3057\u3066\u6700\u65b0\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u79fb\u884c\u6226\u7565\u307e\u3067\u3001\u5305\u62ec\u7684\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002\u7279\u306b\u4ee5\u4e0b\u306e\u70b9\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u3001\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-7\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u672c\u8a18\u4e8b\u3067\u5b66\u3079\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-4\">\n<li>Java EE\u306e\u57fa\u672c\u6982\u5ff5\u3068\u958b\u767a\u306b\u304a\u3051\u308b\u91cd\u8981\u6027<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-5\">\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3051\u308b\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-6\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u6700\u9069\u5316\u624b\u6cd5<\/li>\n<\/div>\n\n\n<li>\u30e2\u30c0\u30f3\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u79fb\u884c\u6226\u7565<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-8\">\n<p>\u305d\u308c\u3067\u306f\u3001Java EE\u306e\u8a73\u7d30\u306a\u89e3\u8aac\u306b\u5165\u3063\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002\u307e\u305a\u306f\u57fa\u672c\u7684\u306a\u6982\u5ff5\u304b\u3089\u3001\u6bb5\u968e\u7684\u306b\u7406\u89e3\u3092\u6df1\u3081\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-9\">\n<h2 class=\"wp-block-heading\" id=\"i-1\">\uff11\uff0eJava EE\u3068\u306f\uff1a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u958b\u767a\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-10\">\n<p>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001Java EE\uff08Java Platform, Enterprise Edition\uff09\u306f\u3001\u5927\u898f\u6a21\u304b\u3064\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u3092\u52b9\u7387\u7684\u306b\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u5305\u62ec\u7684\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u672c\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Java EE\u306e\u57fa\u672c\u6982\u5ff5\u304b\u3089\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u65b9\u6cd5\u307e\u3067\u3001\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-11\">\n<h3 class=\"wp-block-heading\" id=\"i-2\">1.1 Java EE\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-12\">\n<p>Java EE\u306f\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3051\u308b\u4ee5\u4e0b\u306e\u4e3b\u8981\u306a\u8ab2\u984c\u3092\u89e3\u6c7a\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-13\">\n<p>\u30001. <strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-14\">\n<p>\u3000\u3000\u25cf \u5206\u6563\u51e6\u7406\u3078\u306e\u5bfe\u5fdc<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-15\">\n<p>\u3000\u3000\u25cf \u8ca0\u8377\u5206\u6563\u6a5f\u80fd\u306e\u5b9f\u88c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-16\">\n<p>\u3000\u3000\u25cf \u30b3\u30f3\u30c6\u30ca\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-17\">\n<p>\u30002. <strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u5b9f\u88c5<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-18\">\n<p>\u3000\u3000\u25cf \u8a8d\u8a3c\u30fb\u8a8d\u53ef\u306e\u6a19\u6e96\u5b9f\u88c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-19\">\n<p>\u3000\u3000\u25cf \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-20\">\n<p>\u3000\u3000\u25cf \u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u4fdd\u8b77<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-21\">\n<p>\u30003. <strong><strong>\u958b\u767a\u751f\u7523\u6027\u306e\u5411\u4e0a<\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-22\">\n<p>\u3000\u3000\u25cf \u6a19\u6e96\u5316\u3055\u308c\u305fAPI\u7fa4\u306e\u63d0\u4f9b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-23\">\n<p>\u3000\u3000\u25cf \u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-24\">\n<p>\u3000\u3000\u25cf \u5ba3\u8a00\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30e2\u30c7\u30eb<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-25\">\n<h3 class=\"wp-block-heading\" id=\"i-3\">1.2 Java SE\u3068Java EE\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-26\">\n<p>\u4ee5\u4e0b\u306e\u8868\u3067\u3001Java SE\u3068Java EE\u306e\u4e3b\u8981\u306a\u9055\u3044\u3092\u6bd4\u8f03\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"id-c3c0c4df-21ab-4485-ae81-7ca2fe4cc7c0\"><div id=\"sgb-css-id-27\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u89b3\u70b9<\/th><th>Java SE<\/th><th>Java EE<\/th><\/tr><\/thead><tbody><tr><td>\u7528\u9014<\/td><td>\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u5c0f\u898f\u6a21\u958b\u767a<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u5927\u898f\u6a21\u958b\u767a<\/td><\/tr><tr><td>\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/td><td>\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3<\/td><td>\u5206\u6563\u30b7\u30b9\u30c6\u30e0\u3001\u30de\u30eb\u30c1\u30c6\u30a3\u30a2<\/td><\/tr><tr><td>\u5b9f\u884c\u74b0\u5883<\/td><td>JVM\u306e\u307f<\/td><td>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d0\u30fc<\/td><\/tr><tr><td>\u4e3b\u8981API<\/td><td>\u57fa\u672c\u7684\u306aJava API<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u62e1\u5f35API<\/td><\/tr><tr><td>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3<\/td><td>\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3088\u308b\u5236\u5fa1<\/td><td>\u5ba3\u8a00\u7684\u306a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/td><\/tr><tr><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/td><td>\u57fa\u672c\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3API<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n<div id=\"sgb-css-id-28\">\n<h4 class=\"wp-block-heading\" id=\"i-4\">\u5b9f\u88c5\u4f8b\uff1a\u57fa\u672c\u7684\u306aServlet\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebServlet(\"\/hello\")\npublic class HelloServlet extends HttpServlet {\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n\n        \/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u8a2d\u5b9a\n        response.setContentType(\"text\/html;charset=UTF-8\");\n\n        \/\/ \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u884c\n        String message = \"Hello, Java EE!\";\n\n        \/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u51fa\u529b\n        try (PrintWriter out = response.getWriter()) {\n            out.println(\"&lt;html&gt;\");\n            out.println(\"&lt;head&gt;&lt;title&gt;Hello Servlet&lt;\/title&gt;&lt;\/head&gt;\");\n            out.println(\"&lt;body&gt;\");\n            out.println(\"&lt;h1&gt;\" + message + \"&lt;\/h1&gt;\");\n            out.println(\"&lt;\/body&gt;\");\n            out.println(\"&lt;\/html&gt;\");\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-29\">\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u4f8b\u306f\u3001Java EE\u306e\u57fa\u672c\u7684\u306a\u6a5f\u80fd\u306e1\u3064\u3067\u3042\u308bServlet\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u3084\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6271\u3044\u306a\u3069\u3001Java EE\u306e\u7279\u5fb4\u7684\u306a\u6a5f\u80fd\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-30\">\n<h2 class=\"wp-block-heading\" id=\"i-5\">\uff12\uff0eJava EE\u306e\u9032\u5316\uff1aJakarta EE\u307e\u3067\u306e\u6b74\u53f2\u3068\u5909\u9077<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-31\">\n<h3 class=\"wp-block-heading\" id=\"i-6\">2.1 \u30d0\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306e\u4e3b\u8981\u306a\u6a5f\u80fd\u8ffd\u52a0\u3068\u6539\u5584\u70b9<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-32\">\n<p>Java EE\u306e\u9032\u5316\u306f\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u8981\u4ef6\u306e\u5909\u5316\u3068\u5bc6\u63a5\u306b\u95a2\u9023\u3057\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u8981\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u9077\u3092\u307e\u3068\u3081\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-33\">\n<h4 class=\"wp-block-heading\" id=\"i-7\">J2EE\u6642\u4ee3\uff081999-2006\uff09<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-34\">\n<p>\u3000\u25cf <strong>J2EE 1.2 (1999)<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-35\">\n<p>\u3000\u3000\u25cf \u521d\u306e\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u4ed5\u69d8<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-36\">\n<p>\u3000\u3000\u25cf EJB 1.1\u306e\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-37\">\n<p>\u3000\u3000\u25cf Servlet 2.2\u3001JSP 1.1\u306e\u7d71\u5408<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-38\">\n<p>\u3000\u25cf <strong><strong>J2EE 1.4 (2003)<\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-39\">\n<p>\u3000\u3000\u25cf Web Services\u306e\u30b5\u30dd\u30fc\u30c8\u8ffd\u52a0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-40\">\n<p>\u3000\u3000\u25cf EJB 2.1\u306b\u3088\u308b\u6a5f\u80fd\u5f37\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-41\">\n<p>\u3000\u3000\u25cf \u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u6539\u5584<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-42\">\n<h4 class=\"wp-block-heading\" id=\"i-8\">Java EE\u6642\u4ee3\uff082006-2017\uff09<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-43\">\n<p>\u3000\u25cf <strong><strong>Java EE 5 (2006)<\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-44\">\n<p>\u3000\u3000\u25cf \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-45\">\n<p>\u3000\u3000\u25cf EJB 3.0\u306b\u3088\u308b\u5927\u5e45\u306a\u7c21\u7d20\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-46\">\n<p>\u3000\u3000\u25cf JPA 1.0\u306e\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-47\">\n<p>\u3000\u25cf <strong><strong><strong>Java EE 7 (2013)<\/strong><\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-48\">\n<p>\u3000\u3000\u25cf WebSocket\u3001JSON-P\u8ffd\u52a0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-49\">\n<p>\u3000\u3000\u25cf \u30d0\u30c3\u30c1\u51e6\u7406API\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-50\">\n<p>\u3000\u3000\u25cf \u975e\u540c\u671f\u51e6\u7406\u306e\u5f37\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-51\">\n<p>\u3000\u25cf <strong><strong><strong><strong>Java EE 8 (2017)<\/strong><\/strong><\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-52\">\n<p>\u3000\u3000\u25cf JSON-B\u3001Security API\u8ffd\u52a0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-53\">\n<p>\u3000\u3000\u25cf Servlet 4.0\uff08HTTP\/2\u5bfe\u5fdc\uff09<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-54\">\n<p>\u3000\u3000\u25cf CDI 2.0\u306e\u6a5f\u80fd\u5f37\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-55\">\n<h3 class=\"wp-block-heading\" id=\"i-9\">2.2 Jakarta EE\u3078\u306e\u79fb\u884c\u3067\u6ce8\u610f\u3059\u3079\u304d3\u3064\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-56\">\n<h4 class=\"wp-block-heading\" id=\"i-10\">1. \u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306e\u5909\u66f4<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e7\uff1aJava EE\nimport javax.servlet.http.HttpServlet;\nimport javax.persistence.Entity;\n\n\/\/ \u65b0\uff1aJakarta EE\nimport jakarta.servlet.http.HttpServlet;\nimport jakarta.persistence.Entity;<\/pre>\n\n\n<div id=\"sgb-css-id-57\">\n<h4 class=\"wp-block-heading\" id=\"i-11\">2. \u4e92\u63db\u6027\u3078\u306e\u914d\u616e<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-58\">\n<p>\u3000\u25cf <strong>\u79fb\u884c\u524d\u306e\u78ba\u8a8d\u4e8b\u9805<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-59\">\n<p>\u3000\u3000\u25cf \u4f7f\u7528\u3057\u3066\u3044\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306eJakarta EE\u5bfe\u5fdc\u72b6\u6cc1<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-60\">\n<p>\u3000\u3000\u25cf \u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4e92\u63db\u6027<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-61\">\n<p>\u3000\u3000\u25cf \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d0\u30fc\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u8981\u4ef6<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-62\">\n<p>\u3000\u25cf <strong><strong>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u306e\u30b9\u30c6\u30c3\u30d7<\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-63\">\n<p>\u3000\u30001. \u4f9d\u5b58\u95a2\u4fc2\u306e\u68da\u5378\u3057<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-64\">\n<p>\u3000\u30002. \u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u691c\u8a3c<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-65\">\n<p>\u3000\u30003. \u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306e\u7f6e\u63db<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-66\">\n<p>\u3000\u30004. \u4e92\u63db\u6027\u30c6\u30b9\u30c8\u306e\u5b9f\u65bd<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-67\">\n<h4 class=\"wp-block-heading\" id=\"i-12\">3. \u65b0\u6a5f\u80fd\u306e\u6d3b\u7528<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-68\">\n<p>Jakarta EE\u3067\u306f\u4ee5\u4e0b\u306e\u6a5f\u80fd\u304c\u5f37\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Jakarta EE 9\u4ee5\u964d\u3067\u306e\u65b0\u3057\u3044CDI\u6a5f\u80fd\u306e\u4f8b\n@ApplicationScoped\npublic class ModernService {\n    @Inject\n    private Event&lt;BusinessEvent&gt; events;\n\n    public void processData(String data) {\n        \/\/ \u975e\u540c\u671f\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\n        events.fireAsync(new BusinessEvent(data))\n            .thenAccept(event -&gt; System.out.println(\"\u51e6\u7406\u5b8c\u4e86: \" + event));\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-69\">\n<p>\u3053\u308c\u3089\u306e\u5909\u66f4\u306b\u3088\u308a\u3001\u30e2\u30c0\u30f3\u306aJava\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u304c\u3001\u79fb\u884c\u306b\u306f\u614e\u91cd\u306a\u8a08\u753b\u3068\u5b9f\u884c\u304c\u5fc5\u8981\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u65b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-70\">\n<h2 class=\"wp-block-heading\" id=\"i-13\">\uff13\uff0eJava EE\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a73\u8aac<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-71\">\n<h3 class=\"wp-block-heading\" id=\"i-14\">3.1 Servlet\u30b3\u30f3\u30c6\u30ca\u306e\u4ed5\u7d44\u307f\u3068\u6d3b\u7528\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-72\">\n<p>Servlet\u30b3\u30f3\u30c6\u30ca\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u306e\u4e2d\u6838\u3092\u62c5\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u8981\u306a\u6a5f\u80fd\u3068\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-73\">\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebServlet(\"\/users\/*\")\npublic class UserManagementServlet extends HttpServlet {\n    @Override\n    public void init() throws ServletException {\n        \/\/ \u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306e\u521d\u671f\u5316\u51e6\u7406\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u78ba\u7acb\u306a\u3069\n    }\n\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        \/\/ GET\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u51e6\u7406\n        String pathInfo = request.getPathInfo();\n\n        if (\"\/list\".equals(pathInfo)) {\n            \/\/ \u30e6\u30fc\u30b6\u30fc\u4e00\u89a7\u306e\u51e6\u7406\n            request.getRequestDispatcher(\"\/WEB-INF\/views\/users\/list.jsp\")\n                  .forward(request, response);\n        }\n    }\n\n    @Override\n    public void destroy() {\n        \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\u51e6\u7406\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-74\">\n<h4 class=\"wp-block-heading\" id=\"i-16\">\u30d5\u30a3\u30eb\u30bf\u30fc\u30c1\u30a7\u30fc\u30f3\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebFilter(\"\/*\")\npublic class SecurityFilter implements Filter {\n    @Override\n    public void doFilter(ServletRequest request, \n                        ServletResponse response,\n                        FilterChain chain) \n            throws IOException, ServletException {\n\n        HttpServletRequest httpRequest = (HttpServletRequest) request;\n\n        \/\/ \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\n        if (isAuthorized(httpRequest)) {\n            chain.doFilter(request, response);\n        } else {\n            HttpServletResponse httpResponse = (HttpServletResponse) response;\n            httpResponse.sendRedirect(\"\/login\");\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-75\">\n<h3 class=\"wp-block-heading\" id=\"i-17\">3.2 EJB\u306b\u3088\u308b\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-76\">\n<p>EJB\uff08Enterprise JavaBeans\uff09\u306f\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u30ab\u30d7\u30bb\u30eb\u5316\u3068\u518d\u5229\u7528\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-77\">\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u30b9\u30c6\u30fc\u30c8\u30ec\u30b9\u30bb\u30c3\u30b7\u30e7\u30f3Bean<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\n@TransactionManagement(TransactionManagementType.CONTAINER)\npublic class OrderServiceBean {\n    @PersistenceContext\n    private EntityManager em;\n\n    @TransactionAttribute(TransactionAttributeType.REQUIRED)\n    public Order createOrder(OrderDTO orderDTO) {\n        Order order = new Order();\n        order.setCustomerId(orderDTO.getCustomerId());\n        order.setOrderDate(LocalDateTime.now());\n\n        em.persist(order);\n        return order;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-78\">\n<h4 class=\"wp-block-heading\" id=\"i-19\">\u30e1\u30c3\u30bb\u30fc\u30b8\u30c9\u30ea\u30d6\u30f3Bean<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@MessageDriven(activationConfig = {\n    @ActivationConfigProperty(\n        propertyName = \"destinationType\",\n        propertyValue = \"javax.jms.Queue\"),\n    @ActivationConfigProperty(\n        propertyName = \"destination\",\n        propertyValue = \"OrderQueue\")\n})\npublic class OrderProcessorMDB implements MessageListener {\n    @EJB\n    private OrderServiceBean orderService;\n\n    @Override\n    public void onMessage(Message message) {\n        try {\n            TextMessage textMessage = (TextMessage) message;\n            \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u51e6\u7406\n            OrderDTO orderDTO = parseMessage(textMessage);\n            orderService.createOrder(orderDTO);\n        } catch (JMSException e) {\n            \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-79\">\n<h3 class=\"wp-block-heading\" id=\"i-20\">3.3 JPA\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-80\">\n<p>JPA\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30de\u30c3\u30d4\u30f3\u30b0\uff08ORM\uff09\u3092\u63d0\u4f9b\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u7d20\u5316\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-81\">\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9\u3068\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Entity\n@Table(name = \"customers\")\n@NamedQueries({\n    @NamedQuery(\n        name = \"Customer.findPremium\",\n        query = \"SELECT c FROM Customer c WHERE c.totalPurchases &gt; :threshold\"\n    )\n})\npublic class Customer {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(nullable = false)\n    private String name;\n\n    @OneToMany(mappedBy = \"customer\", fetch = FetchType.LAZY)\n    private List&lt;Order&gt; orders;\n\n    @Version\n    private Long version;\n\n    \/\/ Getters and Setters\n}<\/pre>\n\n\n<div id=\"sgb-css-id-82\">\n<h4 class=\"wp-block-heading\" id=\"i-22\">\u52b9\u7387\u7684\u306a\u30af\u30a8\u30ea\u5b9f\u884c<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class CustomerRepository {\n    @PersistenceContext\n    private EntityManager em;\n\n    public List&lt;Customer&gt; findPremiumCustomers(BigDecimal threshold) {\n        return em.createNamedQuery(\"Customer.findPremium\", Customer.class)\n                 .setParameter(\"threshold\", threshold)\n                 .setHint(\"javax.persistence.cache.storeMode\", \"USE\")\n                 .getResultList();\n    }\n\n    public List&lt;Customer&gt; findCustomersWithOrders() {\n        return em.createQuery(\n            \"SELECT DISTINCT c FROM Customer c \" +\n            \"LEFT JOIN FETCH c.orders \" +\n            \"WHERE c.active = true\", Customer.class)\n            .getResultList();\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-83\">\n<p>\u3053\u308c\u3089\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-84\">\n<h2 class=\"wp-block-heading\" id=\"i-23\">\uff14\uff0eJava EE\u306b\u3088\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u5b9f\u8df5<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-85\">\n<h3 class=\"wp-block-heading\" id=\"i-24\">4.1 MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u52b9\u679c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-86\">\n<p>Java EE\u3067MVC\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u3001\u305d\u308c\u3089\u306e\u9023\u643a\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-87\">\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebServlet(\"\/products\/*\")\npublic class ProductController extends HttpServlet {\n    @EJB\n    private ProductService productService;\n\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n\n        String action = request.getPathInfo();\n\n        switch (action) {\n            case \"\/list\":\n                \/\/ \u5546\u54c1\u4e00\u89a7\u306e\u53d6\u5f97\n                List&lt;Product&gt; products = productService.getAllProducts();\n                request.setAttribute(\"products\", products);\n                forward(\"\/WEB-INF\/views\/products\/list.jsp\", request, response);\n                break;\n\n            case \"\/detail\":\n                \/\/ \u5546\u54c1\u8a73\u7d30\u306e\u53d6\u5f97\n                Long productId = Long.parseLong(request.getParameter(\"id\"));\n                Product product = productService.getProductById(productId);\n                request.setAttribute(\"product\", product);\n                forward(\"\/WEB-INF\/views\/products\/detail.jsp\", request, response);\n                break;\n        }\n    }\n\n    private void forward(String path, HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        request.getRequestDispatcher(path).forward(request, response);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-88\">\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u30e2\u30c7\u30eb\u306e\u5b9f\u88c5\uff08\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\uff09<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class ProductService {\n    @PersistenceContext\n    private EntityManager em;\n\n    @Inject\n    private ProductValidator validator;\n\n    public List&lt;Product&gt; getAllProducts() {\n        return em.createNamedQuery(\"Product.findAll\", Product.class)\n                 .getResultList();\n    }\n\n    @TransactionAttribute(TransactionAttributeType.REQUIRED)\n    public Product createProduct(ProductDTO dto) {\n        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n        validator.validate(dto);\n\n        \/\/ \u5546\u54c1\u306e\u4f5c\u6210\n        Product product = new Product();\n        product.setName(dto.getName());\n        product.setPrice(dto.getPrice());\n\n        em.persist(product);\n        return product;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-89\">\n<h4 class=\"wp-block-heading\" id=\"i-27\">\u30d3\u30e5\u30fc\u306e\u5b9f\u88c5\uff08JSP\uff09<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;%@ page contentType=\"text\/html;charset=UTF-8\" language=\"java\" %&gt;\n&lt;%@ taglib prefix=\"c\" uri=\"http:\/\/java.sun.com\/jsp\/jstl\/core\" %&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;\u5546\u54c1\u4e00\u89a7&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;\u5546\u54c1\u4e00\u89a7&lt;\/h1&gt;\n    &lt;table&gt;\n        &lt;tr&gt;\n            &lt;th&gt;\u5546\u54c1\u540d&lt;\/th&gt;\n            &lt;th&gt;\u4fa1\u683c&lt;\/th&gt;\n            &lt;th&gt;\u64cd\u4f5c&lt;\/th&gt;\n        &lt;\/tr&gt;\n        &lt;c:forEach items=\"${products}\" var=\"product\"&gt;\n            &lt;tr&gt;\n                &lt;td&gt;${product.name}&lt;\/td&gt;\n                &lt;td&gt;${product.price}&lt;\/td&gt;\n                &lt;td&gt;\n                    &lt;a href=\"detail?id=${product.id}\"&gt;\u8a73\u7d30&lt;\/a&gt;\n                &lt;\/td&gt;\n            &lt;\/tr&gt;\n        &lt;\/c:forEach&gt;\n    &lt;\/table&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n<div id=\"sgb-css-id-90\">\n<h3 class=\"wp-block-heading\" id=\"i-28\">4.2 \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-91\">\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebServlet(\"\/secure\/*\")\npublic class SecureServlet extends HttpServlet {\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n\n        \/\/ \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\n        if (request.getUserPrincipal() == null) {\n            response.sendRedirect(\"\/login\");\n            return;\n        }\n\n        \/\/ \u30ed\u30fc\u30eb\u78ba\u8a8d\n        if (!request.isUserInRole(\"ADMIN\")) {\n            response.sendError(HttpServletResponse.SC_FORBIDDEN);\n            return;\n        }\n\n        \/\/ \u4ee5\u964d\u306e\u51e6\u7406\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-92\">\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d5\u30a3\u30eb\u30bf\u30fc\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebFilter(\"\/*\")\npublic class XSSPreventionFilter implements Filter {\n    @Override\n    public void doFilter(ServletRequest request, \n                        ServletResponse response,\n                        FilterChain chain) \n            throws IOException, ServletException {\n\n        HttpServletRequest httpRequest = (HttpServletRequest) request;\n\n        \/\/ XSS\u5bfe\u7b56\uff1a\u5165\u529b\u5024\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\n        Map&lt;String, String[]&gt; sanitizedParams = sanitizeParameters(\n            httpRequest.getParameterMap());\n\n        \/\/ \u30e9\u30c3\u30d1\u30fc\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u62e1\u5f35\n        HttpServletRequest wrappedRequest = \n            new ParameterWrappingRequest(httpRequest, sanitizedParams);\n\n        chain.doFilter(wrappedRequest, response);\n    }\n\n    private Map&lt;String, String[]&gt; sanitizeParameters(\n            Map&lt;String, String[]&gt; parameters) {\n        \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\n        return parameters.entrySet().stream()\n            .collect(Collectors.toMap(\n                Map.Entry::getKey,\n                e -&gt; Arrays.stream(e.getValue())\n                    .map(this::sanitize)\n                    .toArray(String[]::new)\n            ));\n    }\n\n    private String sanitize(String value) {\n        \/\/ XSS\u5bfe\u7b56\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\n        return value.replaceAll(\"&lt;\", \"&amp;lt;\")\n                   .replaceAll(\"&gt;\", \"&amp;gt;\")\n                   .replaceAll(\"\\\"\", \"&amp;quot;\")\n                   .replaceAll(\"'\", \"&amp;#x27;\")\n                   .replaceAll(\"&amp;\", \"&amp;amp;\");\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-93\">\n<p>\u3053\u306e\u3088\u3046\u306a\u5b9f\u88c5\u306b\u3088\u308a\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u304a\u3051\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-94\">\n<h2 class=\"wp-block-heading\" id=\"i-31\">\uff15\uff0eJava EE\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-95\">\n<h3 class=\"wp-block-heading\" id=\"i-32\">5.1 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b5\u3064\u306e\u8a2d\u8a08\u539f\u5247<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-96\">\n<h4 class=\"wp-block-heading\" id=\"i-33\">1. \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30ea\u30f3\u30b0\u306e\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class OptimizedDataAccessBean {\n    @Resource(lookup = \"java:jboss\/datasources\/MyDS\")\n    private DataSource dataSource;\n\n    public List&lt;Customer&gt; getCustomers() {\n        try (Connection conn = dataSource.getConnection()) {\n            \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u30d7\u30fc\u30eb\u3092\u9069\u5207\u306b\u5229\u7528\n            return executeQuery(conn);\n        } catch (SQLException e) {\n            throw new RuntimeException(e);\n        }\n    }\n}\n\n\/\/ application.properties \u3067\u306e\u8a2d\u5b9a\u4f8b\n\/*\ndatasource.minimum-pool-size=10\ndatasource.maximum-pool-size=100\ndatasource.idle-timeout=300000\n*\/<\/pre>\n\n\n<div id=\"sgb-css-id-97\">\n<h4 class=\"wp-block-heading\" id=\"i-34\">2. \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u5b9f\u88c5<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class CacheAwareService {\n    @PersistenceContext\n    private EntityManager em;\n\n    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)\n    public Product getProduct(Long id) {\n        return em.find(Product.class, id);\n    }\n\n    \/\/ \u4e8c\u6b21\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a\n    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)\n    @Entity\n    public class Product {\n        \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-98\">\n<h4 class=\"wp-block-heading\" id=\"i-35\">3. \u975e\u540c\u671f\u51e6\u7406\u306e\u6d3b\u7528<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class AsyncOperationBean {\n    @Asynchronous\n    public Future&lt;ProcessingResult&gt; processLargeData(DataSet data) {\n        ProcessingResult result = new ProcessingResult();\n        \/\/ \u6642\u9593\u306e\u304b\u304b\u308b\u51e6\u7406\n        return new AsyncResult&lt;&gt;(result);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-99\">\n<h4 class=\"wp-block-heading\" id=\"i-36\">4. \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Stateless\npublic class BatchProcessingBean {\n    @PersistenceContext\n    private EntityManager em;\n\n    @TransactionAttribute(TransactionAttributeType.REQUIRED)\n    public void processBatch(List&lt;Item&gt; items) {\n        final int batchSize = 50;\n        for (int i = 0; i &lt; items.size(); i++) {\n            em.persist(items.get(i));\n            if (i % batchSize == 0) {\n                em.flush();\n                em.clear();\n            }\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-100\">\n<h4 class=\"wp-block-heading\" id=\"i-37\">5. \u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u6700\u9069\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@WebFilter(\"\/*\")\npublic class ResourceManagementFilter implements Filter {\n    @Override\n    public void doFilter(ServletRequest request, \n                        ServletResponse response,\n                        FilterChain chain) \n            throws IOException, ServletException {\n\n        try (AutoCloseable resource = acquireResource()) {\n            chain.doFilter(request, response);\n        } catch (Exception e) {\n            \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-101\">\n<h3 class=\"wp-block-heading\" id=\"i-38\">5.2 \u3088\u304f\u3042\u308b\u5b9f\u88c5\u30df\u30b9\u3068\u89e3\u6c7a\u7b56<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-102\">\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f31\uff1a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u8aa4\u308a<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8aa4\u3063\u305f\u5b9f\u88c5\n@Stateless\npublic class BadTransactionExample {\n    @PersistenceContext\n    private EntityManager em;\n\n    public void processOrder(Order order) {\n        try {\n            \/\/ \u500b\u5225\u306e\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306f\u907f\u3051\u308b\n            em.getTransaction().begin();  \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\n            em.persist(order);\n            em.getTransaction().commit();\n        } catch (Exception e) {\n            em.getTransaction().rollback();\n        }\n    }\n}\n\n\/\/ \u6b63\u3057\u3044\u5b9f\u88c5\n@Stateless\npublic class GoodTransactionExample {\n    @PersistenceContext\n    private EntityManager em;\n\n    @TransactionAttribute(TransactionAttributeType.REQUIRED)\n    public void processOrder(Order order) {\n        em.persist(order);\n        \/\/ \u30b3\u30f3\u30c6\u30ca\u306b\u3088\u308b\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u3092\u5229\u7528\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-103\">\n<h4 class=\"wp-block-heading\" id=\"i-40\">\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f32\uff1aN+1\u554f\u984c\u306e\u767a\u751f<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u5b9f\u88c5\n@Entity\npublic class Department {\n    @OneToMany(fetch = FetchType.EAGER)  \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\n    private List&lt;Employee&gt; employees;\n}\n\n\/\/ \u6700\u9069\u5316\u3055\u308c\u305f\u5b9f\u88c5\n@Entity\npublic class Department {\n    @OneToMany(fetch = FetchType.LAZY)\n    private List&lt;Employee&gt; employees;\n}\n\n@Stateless\npublic class DepartmentService {\n    public List&lt;Department&gt; getDepartmentsWithEmployees() {\n        return em.createQuery(\n            \"SELECT DISTINCT d FROM Department d \" +\n            \"LEFT JOIN FETCH d.employees\", Department.class)\n            .getResultList();\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-104\">\n<h4 class=\"wp-block-heading\" id=\"i-41\">\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f33\uff1a\u4e0d\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8aa4\u3063\u305f\u5b9f\u88c5\n@WebServlet(\"\/error-prone\")\npublic class BadExceptionHandling extends HttpServlet {\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        try {\n            \/\/ \u51e6\u7406\n        } catch (Exception e) {\n            e.printStackTrace();  \/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\n        }\n    }\n}\n\n\/\/ \u6b63\u3057\u3044\u5b9f\u88c5\n@WebServlet(\"\/proper-handling\")\npublic class GoodExceptionHandling extends HttpServlet {\n    private static final Logger logger = \n        Logger.getLogger(GoodExceptionHandling.class.getName());\n\n    @Override\n    protected void doGet(HttpServletRequest request, \n                        HttpServletResponse response) \n            throws ServletException, IOException {\n        try {\n            \/\/ \u51e6\u7406\n        } catch (BusinessException e) {\n            logger.log(Level.WARNING, \"\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u30a8\u30e9\u30fc\", e);\n            response.sendError(HttpServletResponse.SC_BAD_REQUEST);\n        } catch (Exception e) {\n            logger.log(Level.SEVERE, \"\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\", e);\n            throw new ServletException(e);\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-105\">\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u306aJava EE\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u77e5\u8b58\u3092\u6d3b\u304b\u3057\u305f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u79fb\u884c\u6226\u7565\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-106\">\n<h2 class=\"wp-block-heading\" id=\"i-42\">\uff16\uff0eJava EE\u304b\u3089\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u79fb\u884c\u6226\u7565<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-107\">\n<h3 class=\"wp-block-heading\" id=\"i-43\">6.1 \u6bb5\u968e\u7684\u306a\u79fb\u884c\u306e\u305f\u3081\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-108\">\n<h4 class=\"wp-block-heading\" id=\"i-44\">\u30d5\u30a7\u30fc\u30ba1\uff1a\u73fe\u72b6\u5206\u6790\u3068\u6e96\u5099<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e2\u5b58\u306e\u30e2\u30ce\u30ea\u30b7\u30c3\u30af\u306a\u30b5\u30fc\u30d3\u30b9\n@Stateless\npublic class LegacyOrderService {\n    @PersistenceContext\n    private EntityManager em;\n    @EJB\n    private PaymentService paymentService;\n    @EJB\n    private InventoryService inventoryService;\n\n    @TransactionAttribute(TransactionAttributeType.REQUIRED)\n    public Order processOrder(OrderRequest request) {\n        \/\/ \u5bc6\u7d50\u5408\u306a\u51e6\u7406\u306e\u4f8b\n        Order order = createOrder(request);\n        paymentService.processPayment(order);\n        inventoryService.updateStock(order);\n        return order;\n    }\n}\n\n\/\/ \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u79fb\u884c\u6e96\u5099\uff1a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u62bd\u51fa\npublic interface OrderProcessor {\n    Order processOrder(OrderRequest request);\n}\n\npublic interface PaymentProcessor {\n    PaymentResult processPayment(Order order);\n}<\/pre>\n\n\n<div id=\"sgb-css-id-109\">\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u30d5\u30a7\u30fc\u30ba2\uff1a\u30b5\u30fc\u30d3\u30b9\u306e\u5206\u5272\u3068\u758e\u7d50\u5408\u5316<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u72ec\u7acb\u3057\u305f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u88c5\u4f8b\n@RestController\n@RequestMapping(\"\/api\/orders\")\npublic class OrderServiceController {\n    private final OrderProcessor orderProcessor;\n    private final PaymentServiceClient paymentClient;\n\n    @PostMapping\n    public ResponseEntity&lt;Order&gt; createOrder(@RequestBody OrderRequest request) {\n        \/\/ \u975e\u540c\u671f\u51e6\u7406\u306b\u3088\u308b\u758e\u7d50\u5408\u306a\u5b9f\u88c5\n        Order order = orderProcessor.processOrder(request);\n        CompletableFuture.runAsync(() -&gt; {\n            paymentClient.initiatePayment(order.getId());\n        });\n        return ResponseEntity.accepted().body(order);\n    }\n}\n\n\/\/ \u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u5c0e\u5165\n@Service\npublic class OrderEventPublisher {\n    private final KafkaTemplate&lt;String, OrderEvent&gt; kafkaTemplate;\n\n    public void publishOrderCreated(Order order) {\n        OrderEvent event = new OrderEvent(order.getId(), \"ORDER_CREATED\");\n        kafkaTemplate.send(\"order-events\", event);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-110\">\n<h3 class=\"wp-block-heading\" id=\"i-46\">6.2 Spring Boot\u3068Java EE\u306e\u4f7f\u3044\u5206\u3051<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-111\">\n<h4 class=\"wp-block-heading\" id=\"i-47\">\u79fb\u884c\u5224\u65ad\u306e\u305f\u3081\u306e\u8a55\u4fa1\u57fa\u6e96<\/h4>\n<\/div>\n\n<div id=\"id-1f3ab7cd-83be-4af0-b7ee-ec69945c029c\"><div id=\"sgb-css-id-112\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u8a55\u4fa1\u9805\u76ee<\/th><th>Java EE<\/th><th>Spring Boot<\/th><\/tr><\/thead><tbody><tr><td>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u898f\u6a21<\/td><td>\u5927\u898f\u6a21\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba<\/td><td>\u5c0f\uff5e\u4e2d\u898f\u6a21\u30b5\u30fc\u30d3\u30b9<\/td><\/tr><tr><td>\u958b\u767a\u30b9\u30d4\u30fc\u30c9<\/td><td>\u6a19\u6e96\u5316\u91cd\u8996<\/td><td>\u8fc5\u901f\u306a\u958b\u767a<\/td><\/tr><tr><td>\u8a2d\u5b9a\u306e\u67d4\u8edf\u6027<\/td><td>XML\u4e3b\u4f53<\/td><td>Java\u8a2d\u5b9a\u4e3b\u4f53<\/td><\/tr><tr><td>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6<\/td><td>\u8981\u8ffd\u52a0\u8a2d\u5b9a<\/td><td>\u30cd\u30a4\u30c6\u30a3\u30d6\u30b5\u30dd\u30fc\u30c8<\/td><\/tr><tr><td>\u30ec\u30ac\u30b7\u30fc\u4e92\u63db\u6027<\/td><td>\u9ad8\u3044<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n<div id=\"sgb-css-id-113\">\n<h4 class=\"wp-block-heading\" id=\"i-48\">\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u6bb5\u968e\u7684\u79fb\u884c\u4f8b<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Spring Boot\u3092\u4f7f\u7528\u3057\u305f\u65b0\u898f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\n@SpringBootApplication\npublic class OrderServiceApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(OrderServiceApplication.class, args);\n    }\n\n    @Bean\n    public RestTemplate restTemplate() {\n        return new RestTemplate();\n    }\n}\n\n@Service\npublic class ModernOrderService {\n    private final RestTemplate restTemplate;\n\n    @CircuitBreaker(name = \"orderService\")\n    @Retryable(maxAttempts = 3)\n    public Order createOrder(OrderRequest request) {\n        \/\/ \u73fe\u4ee3\u7684\u306a\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n        Order order = processOrderInternally(request);\n        notifyServices(order);\n        return order;\n    }\n\n    private void notifyServices(Order order) {\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u767a\u884c\u3084API\u547c\u3073\u51fa\u3057\u306b\u3088\u308b\u758e\u7d50\u5408\u306a\u9023\u643a\n        kafkaTemplate.send(\"order-events\", new OrderCreatedEvent(order));\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-114\">\n<h4 class=\"wp-block-heading\" id=\"i-49\">\u79fb\u884c\u6642\u306e\u6ce8\u610f\u70b9<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-115\">\n<p>\u30001. \u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u7ba1\u7406<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-116\">\n<p>\u3000\u3000\u25cf \u5206\u6563\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u56de\u907f<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-117\">\n<p>\u3000\u3000\u25cf \u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u306b\u3088\u308b\u6700\u7d42\u7684\u306a\u4e00\u8cab\u6027\u306e\u5b9f\u73fe<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-118\">\n<p>\u30002. \u30b5\u30fc\u30d3\u30b9\u9593\u901a\u4fe1\u306e\u8a2d\u8a08<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-119\">\n<p>\u3000\u3000\u25cf REST API\u306e\u9069\u5207\u306a\u8a2d\u8a08<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-120\">\n<p>\u3000\u3000\u25cf \u975e\u540c\u671f\u901a\u4fe1\u306e\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-121\">\n<p>\u3000\u3000\u25cf \u30b5\u30fc\u30ad\u30c3\u30c8\u30d6\u30ec\u30fc\u30ab\u30fc\u30d1\u30bf\u30fc\u30f3\u306e\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-122\">\n<p>\u30003. \u76e3\u8996\u3068\u904b\u7528\u306e\u8003\u616e<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-123\">\n<p>\u3000\u3000\u25cf \u5206\u6563\u30ed\u30b0\u306e\u96c6\u7d04<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-124\">\n<p>\u3000\u3000\u25cf \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/p>\n<\/div>\n\n\n<p>\u3000\u3000\u25cf \u30c8\u30ec\u30fc\u30b5\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/p>\n\n\n<div id=\"sgb-css-id-125\">\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Java EE\u304b\u3089\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u79fb\u884c\u306f\u3001\u6bb5\u968e\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u9069\u5207\u306a\u6280\u8853\u9078\u629e\u306b\u3088\u308a\u3001\u30b9\u30e0\u30fc\u30ba\u306b\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u79fb\u884c\u6226\u7565\u3092\u614e\u91cd\u306b\u8a08\u753b\u3057\u3001\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u3068\u30c1\u30fc\u30e0\u306e\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u67d4\u8edf\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-126\">\n<h2 class=\"wp-block-heading\" id=\"i-50\">\u307e\u3068\u3081\u3068\u4eca\u5f8c\u306e\u5c55\u671b<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-127\">\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u672c\u8a18\u4e8b\u306e\u30dd\u30a4\u30f3\u30c8\u307e\u3068\u3081<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-128\">\n<p>\u30001. <strong>Java EE\u306e\u57fa\u790e\u3068\u4fa1\u5024<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-129\">\n<p>\u3000\u3000\u25cf \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u958b\u767a\u306b\u304a\u3051\u308b\u6a19\u6e96\u5316\u3055\u308c\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-130\">\n<p>\u3000\u3000\u25cf \u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u7d71\u5408\u7684\u306a\u63d0\u4f9b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-131\">\n<p>\u3000\u3000\u25cf Java SE\u3068\u306e\u660e\u78ba\u306a\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-132\">\n<p>\u30002. <strong><strong>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-133\">\n<p>\u3000\u3000\u25cf \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u306e\u958b\u767a\u30a2\u30d7\u30ed\u30fc\u30c1<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-134\">\n<p>\u3000\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08\u539f\u5247<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-135\">\n<p>\u3000\u3000\u25cf \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u4f53\u7cfb\u7684\u306a\u5b9f\u88c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-136\">\n<p>\u30003. <strong>\u73fe\u4ee3\u7684\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u5bfe\u5fdc<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-137\">\n<p>\u3000\u3000\u25cf Jakarta EE\u3078\u306e\u5186\u6ed1\u306a\u79fb\u884c<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-138\">\n<p>\u3000\u3000\u25cf \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u306e\u7d71\u5408<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-139\">\n<p>\u3000\u3000\u25cf \u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u74b0\u5883\u3067\u306e\u6d3b\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-140\">\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u4eca\u5f8c\u306e\u5b66\u7fd2\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-141\">\n<p>1. <strong>\u57fa\u790e\u306e\u6df1\u5316<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u307e\u305a\u306fServlet\u3068JSP\u306e\u57fa\u672c\u3092\u7fd2\u5f97\n@WebServlet(\"\/basic\")\npublic class BasicServlet extends HttpServlet {\n    \/\/ \u57fa\u672c\u7684\u306a\u5b9f\u88c5\u304b\u3089\u59cb\u3081\u308b\n}<\/pre>\n\n\n<div id=\"sgb-css-id-142\">\n<p>2. <strong><strong>\u5fdc\u7528\u6280\u8853\u306e\u7fd2\u5f97<\/strong><\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ EJB\u3068JPA\u3092\u6d3b\u7528\u3057\u305f\u672c\u683c\u7684\u306a\u5b9f\u88c5\u3078\n@Stateless\npublic class AdvancedService {\n    @PersistenceContext\n    private EntityManager em;\n    \/\/ \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u6a5f\u80fd\u306e\u5b9f\u88c5\n}<\/pre>\n\n\n<div id=\"sgb-css-id-143\">\n<p>3. <strong><strong><strong>\u6700\u65b0\u6280\u8853\u3068\u306e\u878d\u5408<\/strong><\/strong><\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u7d71\u5408\n@SpringBootApplication\npublic class ModernApplication {\n    \/\/ \u30e2\u30c0\u30f3\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u63a1\u7528\n}<\/pre>\n\n\n<div id=\"sgb-css-id-144\">\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u5b9f\u8df5\u306b\u5411\u3051\u305f\u30a2\u30c9\u30d0\u30a4\u30b9<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-145\">\n<p>1. <strong><strong><strong><strong>\u6bb5\u968e\u7684\u306a\u5c0e\u5165<\/strong><\/strong><\/strong><\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-146\">\n<p>\u3000\u25cf \u5c0f\u898f\u6a21\u306a\u6a5f\u80fd\u304b\u3089\u958b\u59cb<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-147\">\n<p>\u3000\u25cf \u7d99\u7d9a\u7684\u306a\u6539\u5584\u3068\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-148\">\n<p>\u3000\u25cf \u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u30ca\u30ec\u30c3\u30b8\u5171\u6709<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-149\">\n<p>2. <strong>\u54c1\u8cea\u306e\u78ba\u4fdd<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-150\">\n<p>\u3000\u25cf \u81ea\u52d5\u30c6\u30b9\u30c8\u306e\u6574\u5099<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-151\">\n<p>\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-152\">\n<p>\u3000\u25cf \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ec\u30d3\u30e5\u30fc\u306e\u5b9a\u671f\u5b9f\u65bd<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-153\">\n<p id=\"block-2be2a198-b713-43c2-a0af-0bffece246ed\">3. <strong>\u6700\u65b0\u52d5\u5411\u306e\u628a\u63e1<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-154\">\n<p id=\"block-9af75ae8-7f62-4bf1-bd31-1529f9163d4b\">\u3000\u25cf Jakarta EE\u306e\u9032\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-155\">\n<p id=\"block-0530e6f7-4c72-4997-98fc-b51b2d4cd5ff\">\u3000\u25cf \u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u6280\u8853\u3068\u306e\u7d71\u5408<\/p>\n<\/div>\n\n\n<p id=\"block-be6c9458-4f24-4be2-a663-9d4b441efd16\">\u3000\u25cf \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u63a1\u7528<\/p>\n\n\n<div id=\"sgb-css-id-156\">\n<p>Java EE\u306f\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u57fa\u76e4\u3068\u3057\u3066\u3001\u4eca\u5f8c\u3082\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u7d9a\u3051\u308b\u3067\u3057\u3087\u3046\u3002\u672c\u8a18\u4e8b\u3067\u89e3\u8aac\u3057\u305f\u5185\u5bb9\u3092\u57fa\u306b\u3001\u307e\u305a\u306f\u81ea\u8eab\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5408\u308f\u305b\u305f\u6a5f\u80fd\u304b\u3089\u5c0e\u5165\u3092\u59cb\u3081\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u6280\u8853\u306e\u9032\u5316\u306b\u5408\u308f\u305b\u3066\u67d4\u8edf\u306b\u5bfe\u5fdc\u3057\u306a\u304c\u3089\u3001\u5805\u7262\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u9032\u3081\u3066\u3044\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-157\">\n<p>\u672c\u8a18\u4e8b\u304c\u3001\u7686\u69d8\u306eJava EE\u958b\u767a\u306e\u4e00\u52a9\u3068\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":2917,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,68,75],"tags":[],"class_list":{"0":"post-1048","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-java","8":"category-java-best-practice","9":"category-75"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1048"}],"version-history":[{"count":7,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1048\/revisions"}],"predecessor-version":[{"id":3223,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1048\/revisions\/3223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/media\/2917"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}