JavaRush /Java Blog /Random-TL /Coffee break #119. Panimula sa Java Enterprise Edition (J...

Coffee break #119. Panimula sa Java Enterprise Edition (Java EE)

Nai-publish sa grupo
Pinagmulan: Dev.to Java Enterprise Edition (Java EE) ay isang hanay ng mga detalye at dokumentasyon para sa wikang Java na naglalarawan ng arkitektura ng platform ng server para sa paglutas ng mga problema ng katamtaman at malalaking negosyo. Coffee break #118.  Panimula sa Java Enterprise Edition (Java EE) - 1Kapag nag-aaral ng Java EE makikita mo ang mga sumusunod na termino:
  • Ang application server ay isang kongkretong pagpapatupad ng abstract na mga detalye ng Java EE. Mga halimbawa: Payara Server (Glassfish), IBM OpenLiberty at JBoss Wildfly.

  • Ang Java Specification Request (JSR) ay isang pormal na kahilingan sa komunidad ng Java na magdagdag at mapabuti ang mga teknolohiya. Ito ay isang katawan na nagsa-standardize ng mga API sa platform ng teknolohiya ng Java at ginagamit upang ipangkat ang mga API sa mga bloke, gaya ng JAX-RS (Java API para sa RESTful Web Services). Para sa bawat JSR, palaging may default na pagpapatupad ng sanggunian.

  • Ang pagpapatupad ng sanggunian ay isang konkretong pagpapatupad/pagpapatupad ng abstract JSR. Halimbawa, ang reference na pagpapatupad para sa JAX-RS ay tinatawag na Jersey. Ang Java EE mismo ay isang JSR. Kaya, ang application server ay isang koleksyon ng iba't ibang mga pagpapatupad ng sanggunian ng Java EE JSR. Ang Java EE ay JSR 366, at isa sa mga reference na pagpapatupad nito ay ang Glassfish 5.

  • Ang Jakarta EE ay ang bagong pangalan para sa Java EE simula sa 2018. Sa kasalukuyan, inilipat ng Oracle ang Java platform sa ilalim ng pamamahala ng Eclipse Foundation .

Mga Pangunahing Kaalaman sa JavaEE

Mayroong tatlong pangunahing API sa Java EE:
  1. Java Persistence API (JPA). Responsable ito sa pag-iimbak at pagkuha ng impormasyon mula sa mga relational database, na maaaring palawigin upang gumana sa mga database ng NoSQL. Ito ang layer ng data sa application.

  2. Konteksto at Dependency Injection (CDI API). Ito ay isang standardized na paraan upang mabawasan ang pagkabit sa mga application. Pinamamahalaan nito ang iba't ibang mga interaksyon ng bahagi upang matiyak ang libreng decoupling.

  3. Java API para sa RESTful Web Services (JAX-RS). Nagbibigay ito ng mga mapagkukunan sa HTTP bilang mga serbisyo sa web.

Context at Dependency Injection API

Ang dependency injection ay isang espesyal na anyo ng inversion control (isang diskarte sa software kung saan natatanggap ng mga indibidwal na bahagi ang kanilang mga dependency). Pinalalabas nito ang dependency sa application upang lumikha ng mababang mga bahagi ng coupling.

Mga Tampok ng CDI

  • Ang dependency injection (Typesafe) ay nagpapahintulot sa iyo na magdeklara ng mga dependency sa mga uri upang ang compiler ay makahuli ng mga error sa runtime.

  • Ang mga konteksto ng lifecycle ay ang kakayahang itali ang lifecycle at stateful na mga interaksyon ng bahagi sa mahusay na tinukoy ngunit napapalawak na mga bahagi ng lifecycle.

  • Hinahayaan ka ng mga interceptor na harangin ang mga kahilingan para ma-access ang isang partikular na paraan.

  • Ang mga kaganapan ay isang paraan upang bumuo ng mga napaka-decoupled na application. Maaaring i-fire ang mga event habang ang pamamaraan ng Observers ay nakikinig sa mga fired na kaganapan.

  • Ang Service Provider Interface (SPI) ay isang hanay ng mga diskarte, API, at interface na maaaring magamit bilang mga extension, gaya ng sa Apache library.

Ilang konsepto ng CDI API:

  • Ang CDI Bean Discovery ay isang mekanismo kung saan ang framework ng dependency injection ay nag-parse at nakatuklas ng mga bean upang kontrolin kung paano natutuklasan ang mga bean bilang default, iyon ay, mga bean na may mga anotasyon gaya ng @Annotated. May tatlong uri ng bean discovery mode: LAHAT (kabilang ang mga unannotated beans), ANNOTATED, at WALA.

  • Ang lalagyan ng CDI ay isang factory method kung saan ang mga klase ng Java ay pumapasok at lumabas kasama ang kanilang functionality at mga kakayahan. Ito ang application na namamahala sa mga beans.

  • Bean at Contextual na mga pagkakataon. Ang bean ay isang template na nilikha ng isang developer. Ang contextual instance ay isang instance ng Bean na ginawa at pinamamahalaan ng isang CDI container.

Java Persistence API

Ang JPA ay ginagamit upang i-map ang mga bagay sa mga relational database table. Ang Java Persistence API ay sumusunod sa mga prinsipyo ng ORM manifesto. ORM Manifest (Object Relational Mapping Manifest):
  • Mga bagay, hindi mga talahanayan: Nagsusulat ang mga developer ng mga bagay, hindi mga talahanayan.

  • Kaginhawaan, hindi kamangmangan: Ang isang ORM ay dapat na maginhawa. Ang mga developer ay dapat magkaroon ng pinakamababang kaalaman sa mga relational database. Ang ORM ay hindi isang paraan upang itago ang kamangmangan, ngunit isang kaginhawahan.

  • Hindi nakakagambala at transparent: Dapat gawin ito ng isang ORM upang makontrol ng mga developer kung ano ang nasa database at magkaroon ng ganap na kontrol sa kung ano ang nai-save. Legacy data, bagong object: Papayagan ka ng ORM na lumikha ng mga bagong object mula sa legacy data, iyon ay, muling buuin ang legacy database sa mga Java object.

  • Sapat na, ngunit hindi masyadong marami: Ibibigay ng ORM ang lahat ng mga tool upang malutas ang mga karaniwang problema dahil sa impedance mismatch (isang terminong ginamit upang sumangguni sa mga problemang lumitaw dahil sa mga pagkakaiba sa pagitan ng modelo ng database at ng programming language). Ang isang ORM ay hindi dapat masyadong mabigat.

  • Lokalidad at kadaliang kumilos: Lokal ang data, ngunit dapat na posible para sa patuloy na estado ng application na lumipat sa iba't ibang bahagi ng application.

  • Standard API, pluggable na pagpapatupad: Umasa sa karaniwang API, ngunit maaaring baguhin ang mga pagpapatupad kung kinakailangan.

Ilang mahahalagang konsepto ng JPA: JPA Entity
  • Ang pinaka-modular na bahagi ng JPA objects ay ang plain old Java object (POJO). Ang bawat bagay ay dapat may natatanging identifier.

  • Ang mga entity ng JPA ay karaniwang gumagamit ng mga anotasyon gaya ng @MappedSuperClass, na nagbibigay-daan sa paggamit ng mga superclass na naglalaman ng mga karaniwang field ng entity. Ang @AttributeOverride annotation ay ginagamit upang i-override ang mga superclass na entity. @Column ay ginagamit upang i-configure ang mga pagmamapa ng database. Maaaring gamitin ang @Transient annotation para sa mga field sa isang klase ng entity na hindi dapat imapa sa isang database.

  • Ang uri ng pag-access ay ang proseso kung saan ina-access ng provider ng persistence ang mga estado sa isang entity. Nangyayari ang pag-access sa field kapag direktang na-access ng provider ang mga field ng isang klase sa pamamagitan ng pagmuni-muni. Nangyayari ang pag-access sa ari-arian kapag ang mga pamamaraan ng pag-aari ng Java Bean ay ginagamit upang ma-access ang mga estado, ibig sabihin, ginagamit ang mga getter at setter. Upang magamit ang access sa ari-arian, ang getter ay dapat na may annotated na @Id. Ang pinaghalong uri ng access ay gumagamit ng access sa parehong mga field at property sa parehong klase ng entity gamit ang @Access annotation.

Java API para sa RESTful web services

Mga limitasyon ng arkitektura ng REST:
  1. Ang kliyente at server ay independyente sa isa't isa.

  2. Stateless: Ang bawat indibidwal na kahilingan na dumarating sa server ay nagsasarili at natatangi. Ang server ay hindi gumagawa ng anumang mga pagpapalagay mula sa nakaraang kahilingan.

  3. Cacheability: Dapat suportahan ng system ang pag-cache sa iba't ibang antas upang mapabuti ang pagganap at scalability.

  4. Ang isang pinag-isang interface ay nangangahulugan na ang kliyente ay dapat magkaroon ng isang karaniwang pinag-isang interface upang ma-access ang mga mapagkukunan sa server, pati na rin upang makipag-ugnayan sa mga mapagkukunan sa server. Multi-tier system: Maaaring ipatupad ang server sa iba't ibang layer sa paraang hindi kailangang mag-alala ang kliyente tungkol sa isang multi-tier system, gaya ng server na sumusuporta sa load balancing.

Ilang pangkalahatang konsepto na nauugnay sa JAX-RS:
  • Paraan ng HTTP GET: humiling ng resource o resources. Ang paraan ng paghiling ng GET ay idempotent, na nangangahulugan na ang paulit-ulit na paghiling sa pamamaraan ay hindi dapat magbago sa estado ng mapagkukunan o data sa server.

  • Paraan ng HTTP POST: Ang kahilingan sa POST ay ginagamit upang lumikha ng mga bagong mapagkukunan sa server. Nagiging sanhi ito ng pagbabago sa set ng data sa server. Ang POST ay karaniwang may katawan kung saan ang payload o anumang nais nating gawin sa server ay nai-publish o naka-attach.

  • Paraan ng HTTP PUT: Ginagamit ang semantically upang i-update ang mga mapagkukunan sa server.

  • Paraan ng HTTP DELETE: Ginagamit upang tanggalin ang mga mapagkukunan sa server.

  • Mga uri ng nilalaman. Mayroong ilang mga uri ng nilalaman na maaaring gamitin at gawin ng mga pamamaraan ng query: XML, CSV, EXCEL, TEXT, at JSON.

  • Ang JAX-RS ay may konsepto ng pagsulat ng katawan ng mensahe. Ito ay mga konstruksyon ng API na ginagamit upang i-convert ang mga uri ng Java sa uri na inaasahan ng kliyente. Ang @Produces annotation ay maaaring gamitin upang tukuyin ang uri kung saan ang tugon ng isang Java object ay na-convert.

  • Ang @Consumes annotation ay nagsasabi sa JAX-RS runtime ang uri ng content na ginagamit ng isang ibinigay na resource method. Pagkatapos ay kino-convert ng JAX-RS runtime ang nilalaman ng JSON na ipinasa bilang payload sa isang Java object na ang uri ay kapareho ng parameter ng pamamaraan.

  • JAX-RS Exception Mapper: Isang konstruksyon ng API na ginagamit upang i-map ang mga pagbubukod sa mga tugon sa HTTP. Ang @Provider annotation ay ginagamit para programmatically magrehistro ng exception resolver gamit ang JAX-RS runtime.

Ito ay isang napakasimpleng panimula sa Java EE. Upang bumuo ng mga web application gamit ang Java EE, kakailanganin mong sumisid nang mas malalim sa bawat pangunahing API.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION