åçïŒSabineHÃŒrdler/ Fotolia.com
ããã«ã¡ã¯ãHabrïŒ
ããããããã2013幎ã®èžãæãå€ã«ãããªããšããªãã¯ãã¢ã³ãœããŒãŽã³ã«ã«ãã¹ã«ããçŽ æŽãããæ¬ã Learning Java EE 7 ãã«åãçµã¿å§ãããã説åŸããŸããã çŸåšã幎æ«ãŸã§ã«æèœã§é åçãªã¹ãã·ã£ãªã¹ãã ã»ãã¹ãã£ã³ã»ãã·ã¥ããŒã«ããJava EE 8ã«é¢ããæ¬ã®äœæ¥ãçå£ã«èšç»ããŠããŸãã
11æ7æ¥ã«ãDashneræ°ã¯Java EE 8ã®å±æãšå©ç¹ã«ã€ããŠèªåã®èããæ²èŒããèšäºãå ¬éããŸããã
倧äŒæ¥åãã®ãããžã§ã¯ããéçºãããšããäœã«éäžãã¹ãã§ããïŒ Java EEãã©ãããã©ãŒã ã®ã軜ãããšã¯äœã§ããïŒ Java EEã¯ããžãã¹æŠå¿µãšäž»é¡æåã®èšèšãã©ã®ããã«ãµããŒãããŸããïŒ ãã®ãã©ãããã©ãŒã ã¯ã©ã®ããã«é²åããŸãããïŒ ã©ã®æ¹åã«çºå±ãç¶ããŸããïŒ ãã®èšäºã§ã¯ãã³ã³ããç°å¢ã§ã®Javaã®æ°æ©èœãšçµ±åã®æŠèŠã説æããŸãã
éçºïŒãšã³ã¿ãŒãã©ã€ãºãããžã§ã¯ãã«çŠç¹ãåœãŠã
ãšã³ã¿ãŒãã©ã€ãºããã°ã©ã ã®éèŠãªã³ã³ããŒãã³ã-ãããã¯ãè³éã®è»¢æãããããæ©èœã§ãã ä»å 䟡å€ã¯ãã±ãŒã¹ã®å®è£ äžã«ååŸãããŸãããããžãã¹ããžãã¯ã®æäŸã¯ãæè¡çãªå®è£ ãã©ã®ããã«å®äºãããããŸãã¯ã©ã®ãã¯ãããžãŒããã®ããã«éžæããããã«ãã£ãŠç°ãªããŸãã ãããã£ãŠããšã³ã¿ãŒãã©ã€ãºãããžã§ã¯ãã¯ãäž»ã«å®çšçãªã·ããªãªã®å®è£ ã§åŒ·åããå¿ èŠããããŸãã
éçºè ã¯ãã°ãã°ãã®ç¶æ³ãç°ãªã£ãŠèŠãŸãã 圌ã¯å®è£ ã®è©³çŽ°ãå質ãããã³æè¡çãœãªã¥ãŒã·ã§ã³ã®çŸããã«èå³ããããŸãã ããã°ã©ã ã¯èšèšãããååãšè°è«ãããã³ãŒããåŠçããã³æ§é åãããŸãã ã¯ãããããã¯ãã¹ãŠãœãããŠã§ã¢éçºã®éèŠãªåŽé¢ã§ãããããã«ãããç§ãã¡ã¯äž»ã«é¡§å®¢ã®èŠä»¶ãæºããããšã«é¢å¿ãããããã®å Žåã®ã¿ã³ãŒãã®å®æã«æéãšåŽåãè²»ããå¿ èŠããããŸãã
ãšã³ã¿ãŒãã©ã€ãºãšã³ãžãã¢ããããã®åé¡ã顧客ã®èŠ³ç¹ããïŒãéãåºããŠïŒãäºç®ã®ãããããžã§ã¯ããããŒãžã£ãŒã®èŠ³ç¹ããèŠããšãå€ãã®ããšãæããã«ãªããŸãã
Java Enterprise-æåã®ããžãã¹ããžãã¯ïŒ
ãã®ãããããžãã¹ããžãã¯ïŒãã¡ã€ã³ããžãã¯ïŒã®å®è£ ã«ç¹å¥ãªæ³šæãæã£ãŠããŸãã ããžãã¯ã®æºåãæŽã£ãå Žåã«ã®ã¿ãããçãæè¡çãªåé¡ãçºçããŸãã Java Enterpriseã¯ãã®ã¢ãããŒãã奜ã¿ãŸãã ãµããžã§ã¯ãé å-ãã®æ¬è³ª-ã¯ãæåã«Pure Javaã§å®è£ ãããŸãã ç§ãã¡ã¯äŒæ¥éšéã§åããŠãããããéä¿¡ãããŒã¿ä¿æãªã©ã®ãšã³ãããŒãšã³ãã®æ©èœã¯éåžžã«éèŠã§ãã çŸä»£ã®Java EEã§ã¯ããããã¯å®£èšçã«å®å šã«å®è£ ãããå®è³ªçã«æå°éã®ãªãŒããŒãããã§ãã åºæ¬çã«ãJava EEãã©ãããã©ãŒã ã§ã¯ããæ§æèŠåãã®ååãå®ããããŠããããã®ããã°ã©ãã³ã°ææ³ããµããŒãããŠããŸãã
Javaä»æ§ã¯ãããã€ãã®æ³šéãšãšãã«ããžãã¹ããžãã¯ïŒçŽç²ãªJavaã¯ã©ã¹ïŒã«è¿œå ãããŸãã 次ã«ãåäœãã¹ãã䜿çšããŠããžãã¹ããžãã¯ãç°¡åã«æ€èšŒããŸãã ã»ãšãã©ãã¹ãŠã®æ©èœã¯ææ°ã®Java EEã®ã¢ãããŒã·ã§ã³ã§å®£èšãããŠãããããã¯ã©ã¹ã¯ãã¹ãã§çŽæ¥ã€ã³ã¹ã¿ã³ã¹åã§ããŸã-ãšã³ã¿ãŒãã©ã€ãºã³ã³ãããªãã§ãå¯èœã§ãã
Java EEããã³ãµããžã§ã¯ãæåèšèšïŒDDDïŒ
ç¹å®ã®ã±ãŒã¹ã®ãšã³ããªãã€ã³ãããããããã¡ãµãŒããã泚éä»ãã®Javaã¯ã©ã¹ãšããŠå®è£ ããŸãã ãµããžã§ã¯ãæåèšèšã®çšèªã§ã¯ããã®ãããªã¯ã©ã¹ã¯ç¹å®ã®ãµãŒãã¹ãè¡šããšèšãããŠããŸãã 次ã®äŸã¯ãEJBãšããŠå®è£ ããããµãŒãã¹ã瀺ããŠããŸãã
@Stateless public class CarManufacturer { @Inject CarFactory carFactory; @PersistenceContext EntityManager entityManager; public Car manufactureCar(Specification spec) { Car car = carFactory.createCar(spec); entityManager.persist(car); return car; } }
CarFactory
ã¯ã©ã¹ã¯ãæ¢åã®ä»æ§ã«åŸã£ãŠæ°ãã
Car
ãšã³ãã£ãã£ãäœæããŸãã EntityManagerã¯ãããŒã¿ããŒã¹å ã®ãããã®ãšã³ãã£ãã£ã®æ°žç¶æ§ãå¶åŸ¡ããŸãã
ãããã£ãŠãäž»é¡æåã®ãã¶ã€ã³ã§ã¯ããªããžããªããã¿ãŒã³ãšããŠç¥ãããæŠå¿µãæ瀺ãããŸãã EntityManagerã¿ã€ãã¯ãå®å šã«æ確ãªAPIãæäŸããŸãã J2EEã®äžçã§äœ¿çšãããŠããDAOïŒããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ãïŒãšãåŒã°ããè¿œå ã®ãã¡ãµãŒãã¯äžèŠã«ãªããŸããã
ããã°ã©ã ã¬ãã«ã§ããžãã¹ããã»ã¹ãæ瀺ããå Žåã
CarManufacturer
ããã®å Žåã®
CarManufacturer
ãããªãã¡ãµãŒãã®åœ¢ã§çŽæ¥å®è£ ããå¿ èŠããããŸãã ã¡ãœãããšããã»ã¹ãé床ã«è€éã«ãªããšãæ©èœã¯ããªã²ãŒãã®ã¬ãã«ã«ãªããŸãïŒãã®å Žåã¯
CarFactory
ãªã©ïŒã åäœãã¹ãã¯æ£ããåäœãæäŸããŸã-ãããã®ãã¹ãã§ã¯ããã¡ãµãŒããã€ã³ã¹ã¿ã³ã¹åãããããªã²ãŒããããããã¢ãã¯ãªããžã§ã¯ããšããŠæš¡å£ãããŸãã
åæã«
Car
ãªã©ã®ãã¡ã€ã³ã¯ã©ã¹ã¯POJOïŒããã¬ãŒã³ãªå€ãJavaãªããžã§ã¯ããïŒã§ãããæ°žç¶æ§ãªã©ã®æè¡çã«å®è¡å¯èœãªæ©èœã瀺ãã¢ãããŒã·ã§ã³ãæäŸã§ããŸãã
@Entity @Table(name = "cars") public class Car { @Id @GeneratedValue private long id; @OneToOne(optional = false, cascade = CascadeType.ALL) private Engine engine; @OneToMany(cascade = CascadeType.ALL) private Set<Seat> seats = new HashSet<>(); // }
ãµããžã§ã¯ãæåã®èšèšã§ã¯ã ãšã³ãã£ãã£ã¯ãµããžã§ã¯ãé åã«é¢é£ããç¹å®ã®ãªããžã§ã¯ããšããŠç解ãããŸãã ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã«ãŒãããªããžã§ã¯ãã§ãã JPAã¯ãè¿œå ã®ã³ã¹ããã»ãšãã©ãããã«æ°žç¶æ§ãžã®ãããã³ã°ãšã³ãã£ãã£ãæäŸããŸããããã¯ãã¢ãããŒã·ã§ã³ã䜿çšããŠè¡ãããŸãã
@Entity
ã¢ãããŒã·ã§ã³ã®
@Entity
ããDDDã®äžçã«èª¿åããŠé©åããŸãã JPAã§ã¯ã
@Entity
ãèå¥ã§ããå¿ èŠããããŸãã
JPAã¯ãéçŽãšåŒã°ããæŠå¿µããµããŒãããŠããŸãã ãããã£ãŠãäŸãç¶ãããšãè»ã«ã¯ããã€ãã®åº§åžããããŸãã ãµããžã§ã¯ããšãªã¢ã§ã¯ãå座åžãèå¥ã§ããŸãã ã«ãŒãCarãªããžã§ã¯ãããé¢é£ãããã¹ãŠã®Seatã€ã³ã¹ã¿ã³ã¹ã«æäœã«ã¹ã±ãŒããä¿åããŸãã ãããã£ãŠããã¹ãŠã®æ§æèŠçŽ ãå«ã䜿çšå¯èœãªèå¥åã䜿çšããŠãããŒã¿ããŒã¹ãããã·ã³å šäœãç §äŒã§ããŸãã
ã¡ãœãããŸãã¯ã¯ã©ã¹ã§æ¯èŒçè€éãªãªããžã§ã¯ãã®äœæãã«ãã»ã«åããDDDãã¡ã¯ããªãŒã¯ãã¡ãœããããã¡ã€ã³ãšã³ãã£ãã£ã®äžéšã§ããçŽç²ãªJavaã§ããŸãã¯CDIã䜿çšããŠãJava EEã®äžçã§å®è£ ãããŸãã CDIã«ã€ããŠã¯ããããã¥ãŒãµãŒã¡ãœããã«ã€ããŠç¹ã«èšåããå¿ èŠããããŸã-éåžžã«ã³ã³ãã¯ãã§äŸ¿å©ã§ãã 次ã®äŸã§ã¯ãæåã«ãšã³ãã£ãã£ãautomobileãã®äžéšã§ãããã¡ã¯ããªã瀺ããŸãã
public class Car { ... public LogBook createDriverLog() { // logbook } }
æ¬è³ªçã«ãããã³ã°ãã¡ã¯ããªã¯ãç¹å®ã®ãªããžã§ã¯ããäœæããããã«ã察å¿ãããšã³ãã£ãã£ã«å€æ°ã®ããããã£ãå¿ èŠãªå Žåã«äž»ã«æšå¥šãããŸãã 次ã®äŸã¯ãCDIã䜿çšããŠ
CarFactory
掟çç©ãäœæãã
CarFactory
ã瀺ããŠããŸãã
public class CarFactoryProducer { @Produces public CarFactory exposeCarFactory() { CarFactory factory = new BMWCarFactory(); // return factory; } }
æåã®äŸã®ããã«ã
CarFactory
ã¿ã€ãã䜿çšããŠ
CarFactory
ã€ã³ã¹ã¿ã³ã¹ãå®è£ ã§ããŸãã
ãããã®äŸã¯ãçŸä»£ã®Java EEã§æè¡çãªãªãŒããŒããããå€§å¹ ã«æžããããšãªãã軜ééçºã¢ãããŒããã©ã®ããã«å®è·µããããã瀺ããŠããŸãã äž»ãªçŠç¹ã¯ããžãã¹ããžãã¯ã§ãããç¹å¥ãªãªãŒããŒããããªãã§ãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã®æè¡èŠä»¶ã«é©åããŸãã
Java EEã§ã®éä¿¡ïŒJAX-RSãJMSãWebSocketãããã³JSON
JAX-RSãJMSããŸãã¯WebSocketã䜿çšãããµãŒããŒãšã³ããã€ã³ãã¯ãã·ã³å®£èšåAPIãéçºè ã®ç掻ã楜ã«ããæ¹æ³ã瀺ãä»ã®äŸã§ãã ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ³ã§ã¯ãJava EEã®ãæ§æåæãã®ååã§ååã§ãã ãã®ä»ã®å Žåãåäœã¯ããã°ã©ã ã§æ¡åŒµã§ããŸãã
JSON-Bã䜿çšããJSONãã€ã³ãã£ã³ã°ã¯ãJava EE 8ã§å°å ¥ãããå¥ã®æ°æ©èœã§ããXMLã®JAXBãšåæ§ã«ãJSON-Bã¯Javaã¯ã©ã¹ããJSONãžã®å®£èšåãããã³ã°ãå¯èœã«ããŸãã Java EE 8ã§ã¯ãJSON-Bã¯JAX-RSãšã·ãŒã ã¬ã¹ã«çµ±åãããŸãã JAX-RSã©ã³ã¿ã€ã ã¯ãåç §ã¿ã€ãã®JSONãããã³ã°ãJSON-Bã«å§ä»»ããŸãã ãããã£ãŠãJAX-RSãªãœãŒã¹ã§äœ¿çšããããããã®ã¿ã€ãã®ã¯ã©ã¹ã¯ã泚éãå®çŸ©ã§ããŸãã è¿œå ã®æ§æãªãŒããŒããããªãã§ããããã®æ³šéã¯HTTPèŠæ±ããã³å¿çã§èæ ®ãããŸãã 次ã®äŸã¯ãJSON-Bã䜿çšããŠã·ãªã¢ã«åå¯èœãª
User
ã¯ã©ã¹ã瀺ããŠã
User
ã
public class User { @JsonbTransient private long id; @JsonbProperty("username") private String name; ... }
ãã®ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãHTTPãšã³ããã€ã³ããè¡šãJAX-RSãªãœãŒã¹ã¯ããªã¯ãšã¹ããŸãã¯ã¬ã¹ãã³ã¹ã®æ¬æã
"User"
ãŸãã
@Path("users") @Produces(MediaType.APPLICATION_JSON) public class UsersResource { @Inject UserStore userStore; @GET public List<User> getUsers() { return userStore.getUsers(); } }
JSON-Bã·ãªã¢ã«åã¯ãã¹ãŠãèªåçã«ååŸããŸããHTTPçµç±ã§éä¿¡ããããŠãŒã¶ãŒã®ãªã¹ãã®JSONãªããžã§ã¯ãã«ã¯ã
username
ããããã£ãå«ãŸãã
id
ã¯ãããŸããã
宣èšçãªã¢ãããŒããšJava EE APIãšã®çžäºäœçšã¯ããšã³ã¿ãŒãã©ã€ãºéçºã«ç¹ã«é©ããŠããŸãããã®åéã§ã¯ãæãéèŠãªãã®ã«ã®ã¿çŠç¹ãåœãŠãå¿ èŠãããããã§ãã
Java EEããã³ãŒãäŸåã¢ããªã±ãŒã·ã§ã³ïŒDockerããã³Kubernetesãšã®é£æº
ããã°ã©ããå¯èœãªéãçç£çã«äœæ¥ããå¿ èŠããããšããäºå®ã¯ããã«ãããã³ãããã€ã¡ã³ãã¢ãã«ã¬ãã«ã«ãåæ ãããŸãã Java EEã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯äŒçµ±çã«å®è£ ããåé¢ãããŠããŸãã ã¯ã©ã¹ã¯APIã®ã¿ãã€ã³ããŒãããŸã-å®è£ ã¯ãšã³ã¿ãŒãã©ã€ãºã³ã³ãããŒãæäŸããŸãã ãã®ã¢ãããŒãã«ãããã¢ã»ã³ããªãé ä¿¡ãå±éã®æéãæå°éã«æããããŸãã é£ç¶é ä¿¡ãã€ãã©ã€ã³ã®ãã¹ãŠã®æ®µéã§ãã¢ããªã±ãŒã·ã§ã³ã³ã³ãã³ãã®ã¿ãã³ã³ãã€ã«ãã¢ã»ã³ãã«ãé ä¿¡ãããŸããããã¬ãŒã ã¯ãŒã¯ã®å®è£ ã¯ããã§ã¯ãããŸããã åŸè ã¯å®è¡æã«ãã§ã«çºçããŠããŸãã
ããããJava EEãã³ã³ãããŒãšãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®äžçã§ãã€ãŸãDockerããã³Kubernetesãšã®çµã¿åããã§æãå©çãããããçç±ã§ãã æžã蟌ã¿ã®ããã«ãã¡ã€ã«ã·ã¹ãã ã§ã³ããŒã䜿çšãããåå¥ã®ãã£ãã·ã¥ãåã ã®ã³ã³ããã€ã¡ãŒãžã®ã¬ãã«ã§åäœããå Žåãã€ã³ãã©ã¹ãã©ã¯ãã£ã¯æãå¿ èŠãªæäœã®ã¿ãå®è¡ããŸãã åå埩ã§ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã«ãããã¯ã©ã¹ã®ã¿ãé ä¿¡ãããŸãããæè¡çãªéšåã¯é ä¿¡ãããŸããã ãã®ã¢ãããŒãã¯ãWARã¢ãŒã«ã€ãã«ããã±ãŒãžåãããããããããŒãäŸåã¢ããªã±ãŒã·ã§ã³ãã«ãã£ãŠæäŸãããŸãã ããã«ãã¢ããªã±ãŒã·ã§ã³ã«ã¯ã
provided
ããã¹ã³ãŒãã®äŸåé¢ä¿ã®ã¿ãå«ãŸããŸãã
次ã®äŸã¯ãGlassFish 5ããŒã¹ã€ã¡ãŒãžãšJava EEã¢ããªã±ãŒã·ã§ã³ãå«ãDockerãã¡ã€ã«ã瀺ããŠããŸãã æœåšçãªã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã¯ããããã€ãããããŒãžã§ã³ã«ã¯é ä¿¡ãããŸããããDockerãã¡ã€ã«ã®åæ段éã§ã®ã¿è¡šç€ºãããŸãã
FROM oracle/glassfish:5.0
# provided-
COPY ...jar $GLASSFISH_HOME/glassfish/domains/domain1/lib/ext/
COPY target/cars.war $GLASSFISH_HOME/glassfish/domains/domain1/autodeploy
èµ·åæã«çæãããDockerã€ã¡ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ãèªåçã«å®è¡ããŸãã
äŸåé¢ä¿ãŒãã®ã¢ããªã±ãŒã·ã§ã³ãšDockerãã¡ã€ã«ã®ãããã®èŠçŽ ã®ãããã§ããã³ããŒãªã³ã©ã€ããã®æŠå¿µãå®è£ ãããç¶ç¶çãªé ä¿¡ãã€ãã©ã€ã³å šäœãå€§å¹ ã«å éãããŸãã ã©ã³ã¿ã€ã ç°å¢ããè€æ°ã®ã¢ã»ã³ããªéã«ååšããäŸåé¢ä¿ãå€æŽãããªãå ŽåïŒéåžžãããçºçããŸãïŒã
cars.war
ã¢ãŒã«ã€ãå ã®ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã®ã¿ãããã¯ãããŠéä¿¡ãããŸãã
éåžžããšã³ã¿ãŒãã©ã€ãºãããžã§ã¯ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«é¢é£ããè€éããããŒãžã§ã³ãããã³æ§æãå°ãªããšãéšåçã«åŠçããå¿ èŠããããŸããã ãµãŒããŒã«ã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ããããå±éãæ§æãããã³æ°èŠã€ã³ã¹ããŒã«æäœãè€éã«ããå Žåã«ãã£ãŠã¯èª¿æŽãå¿ èŠã«ãªããŸãã ãã®åé¡ã¯ãDockerãªã©ã®ã³ã³ãããŒã䜿çšããŠè§£æ±ºãããŸãã ã³ã³ãããŒã«ã¯ãã©ã³ã¿ã€ã ç°å¢ãæ§æãªã©ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãšæ§æã«å¿ èŠãªãã®ããã¹ãŠå«ãŸããŠããããããã¯ãããžãŒã®éžæã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«äŸåããŸããã ããšãã°ãJava EE 7ããJava EE 8ãžã®åãæ¿ããªã©ã®ã¢ããã°ã¬ãŒãã¯ãããã»ã©é¢åã§å±éºã§ã¯ãããŸããã ãããã£ãŠããããã€ãããããŒãžã§ã³ã§ã¯ãã¹ã¿ãã¯å šäœãšã¡ã¬ãã€ãåäœã®äŸåé¢ä¿ãæäŸããå¿ èŠã¯ãããŸããããããã¯ãã¹ãŠã察å¿ããããŒã¹ã€ã¡ãŒãžã®äžéšã§ãã
Java EE 8以é
ãã®ãããJava EE 8ã«ã¯æ°ããæ©èœããããŸããããã®äžã§æã泚ç®ãã¹ãã¯ãJSON-Bã®æ°ããæšæºã§ãã 以åã¯ãJSONãªã©ã®JSONã衚瀺ããããã®ãã¬ãŒã ã¯ãŒã¯ã¯ããµãŒãããŒãã£ã®äŸåé¢ä¿ãç¹ã«æšç§»çãªäŸåé¢ä¿ãšã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã©ã€ãã©ãªéã®ããŒãžã§ã³ã®ç«¶åã解決ãã圹å²ãæ ã£ãŠããŸããã 競åã®è§£æ±ºã«ã¯ãªãœãŒã¹ãšæéãããããŸããã Java EE 8ã¯ãããããã¹ãŠã®è¿œå ã³ã¹ããªãã§å®è¡ã§ããŸãã
JSON-Bã«å ããŠãã»ãã¥ãªãã£ãæäŸããå¥ã®æ°ããæšæºã§ããã»ãã¥ãªãã£APIãå°å ¥ãããCDIãJSON-PãBean ValidationãJPAãServletãJSFãªã©ã®å€ãAPIãæŽæ°ãããŸããã ããã«ããµãŒããŒéä¿¡ã€ãã³ããJAX-RSã®ãªã¢ã¯ãã£ãã¯ã©ã€ã¢ã³ããæ°ããJSON-P 1.1æ©èœãªã©ã®é©æ°ã«ç¹ã«æ³šç®ããŠããŸãã Bean Validation 2.0ãããã³ããŸããŸãªæšæºã®çµ±åã«ãããå€æ°ã®æ¹åã Java EE APIãããæ°ãæããã³æ°å¹Žã§é²åããæ¹åã¯ãéçºè ã®èŠ³ç¹ããéåžžã«æ¥œèŠ³çã§ãããJava EEãã©ãããã©ãŒã ã®Eclipse Foundationãžã®ç§»è¡åŸïŒEclipse Enterprise for JavaïŒEE4JïŒã«æºæ ïŒãJava EEã®ãããªãéçºã¯ãããªãŒãã³ã«ãªããŸãã¢ãŒããšããããã¹ããŒãã¢ããã
ãŸãšã
ææ°ã®Java EEã«ãããããã°ã©ããŒã¯ã¢ããªã±ãŒã·ã§ã³ã®æãéèŠãªåŽé¢ã«éäžããæè¡ã³ã¹ããæå°åã§ããŸãã å±éå¯èœãªããŒãžã§ã³ãå¯èœãªéãã³ã³ãã¯ãã«ãªã£ããããJava EEã¯DockerãKubernetesãOpenShiftãªã©ã®ã³ã³ããç°å¢ãšæé©ã«çµ±åãããããã«ãªããŸããã