Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Установка JDK

Π¨Π°Π³ 1: Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ установочный Ρ„Π°ΠΉΠ» с сайта

На сСгодня мСстонахоТдСния Ρ„Π°ΠΉΠ»ΠΎΠ² для скачивания JDK находится ΠΏΠΎ адрСсу Java SE Downloads
Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ самый послСдний JDK β€” Π² нашСм курсС это JDK 1.7 update 3. Но Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ β€” ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Π² установкС Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅. Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° β€” Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ JDK, которая установится Π½Π° ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ β€” Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΈ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ.

Π¨Π°Π³ 2: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ JDK ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ слоТностСй Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ β€” я Π½Π΅ Π²ΠΈΠ΄Π΅Π» ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями 1.4, 1.5, 1.6 ΠΈ 1.7. ЗапускаСм скачанный Ρ„Π°ΠΉΠ» ΠΈ послС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ оТидания Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ стартовый экран для установки. НаТимаСм Β«NextΒ».

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ экранС Π²Π°ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для установки. МнС большС нравится установка Π½Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. (ΠΎΠ½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° красным). НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Change…».

Π’ появившСмся ΠΎΠΊΠ½Π΅ установитС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Β«C:\Java\jdk1.7.0_03Β». ПослС этого я Π²Π°ΠΌ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ этот ΠΏΡƒΡ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΎΠ±ΠΌΠ΅Π½Π° (Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ). Π”Π°Π»ΡŒΡˆΠ΅ ΠΆΠΌΠ΅ΠΌ Β«OKΒ».

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² ΠΎΠΊΠ½Π΅. Π‘Π½ΠΎΠ²Π° Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«NextΒ».

Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя установка JDK ΠΏΠΎΡ‡Ρ‚ΠΈ закончится, Π½ΠΎ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ придСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ JRE (Java Runtime Environment). Π’Ρ‹ это сразу ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ нСобходимости ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ β€” смСло ΠΆΠΌΠ΅ΠΌ Β«NextΒ».

КакоС-Ρ‚ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ экран, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ 3 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° устройств ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Java.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ установка Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ.

Π’ вСрсии 1.7 появился Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ шаг β€” Π²Ρ‹Π±ΠΎΡ€ установки JavaFX 2.0. Π£ вас ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ экран для Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (ΠΌΠ½Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½). Но Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«NextΒ». Π’.ΠΊ. я ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ ΠΊ дирСториям с ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ, Ρ‚ΠΎ я Π²Ρ‹Π±Ρ€Π°Π» свой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Π¨Π°Π³ 3: Установка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды β€” JAVA_HOME ΠΈ PATH

На этом установка практичСски Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°. ΠžΡΡ‚Π°Π½Π΅Ρ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ шаг β€” ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² JDK Π² путях ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ основныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€” ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. И Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΡ‹ установим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JAVA_HOME β€” это ΠΏΡ€Π°Π²Π΄Π° Π½Π°ΠΌ пригодится Π½Π΅ скоро, Π½ΠΎ сдСлаСм это прямо сСйчас. Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· вас Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ всС-Ρ‚Π°ΠΊΠΈ это сдСлаСм вмСстС. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ОБ Windows 7.0 β€” поэтому Π±ΡƒΠ΄Ρƒ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΉ. Π’ мСню Β«ΠŸΡƒΡΠΊΒ» Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Β«ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Β» ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ. Π’ появившСмся мСню Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ «Бвойства». ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ систСмы» (я Π²Ρ‹Π΄Π΅Π»ΠΈΠ» этот ΠΏΡƒΠ½ΠΊΡ‚). ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ Β«ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды».

Π’ появившСмся ΠΎΠΊΠ½Π΅ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ β€” Β«JAVA_HOMEΒ». И ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«PathΒ». Для этого Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΒ».

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«JAVA_HOMEΒ» ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ пригодится Ρ‚Π° строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» Π²Π°ΠΌ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ установкС JDK.

Для установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«PathΒ» скорСС всСго Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ β€” ΠΎΠ½Π° ΡƒΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π΅Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² спискС ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΒ». Но Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ β€” Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… здСсь Π½Π°Π΄ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ строку ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ поставив Β«;Β» Π² ΠΊΠΎΠ½Ρ†Π΅ списка всСх ΠΏΡƒΡ‚Π΅ΠΉ. И Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… β€” Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку Β«\binΒ» послС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рисункС.

И Π΅Ρ‰Π΅ Ρ€Π°Π· β€” Π‘Π£Π”Π¬Π’Π• Π’ΠΠ˜ΠœΠΠ’Π•Π›Π¬ΠΠ« ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ PATH β€” ΠΎΠ½Π° содСрТит Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. НС Π½Π°Π΄ΠΎ Π΅Π΅ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свою строку. Надо послС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой Π”ΠžΠ‘ΠΠ’Π˜Π’Π¬ строку Π΄ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с JDK (+ строка Β«\binΒ»). Π’.Π΅. Ссли Ρƒ вас JDK установлСн Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ C:\Java\jdk1.7, Ρ‚ΠΎ Π² PATH Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (Ρ‡Π΅Ρ€Π΅Π· Β«;Β») строку C:\Java\jdk1.7\bin.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ сдСлали всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ шаги для установки JDK β€” ΠΏΠΎΡ€Π° ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ написанию простой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Β ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с прилоТСниями Java EE

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан класс сущностСй ΠΈ фасад сСанса для класса сущностСй. Класс сущностСй – это простой старый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Java (Plain Old Java Object, POJO), простой класс Java, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Entity ΠΊΠ°ΠΊ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ. Начиная со спСцификации Java EE 5 классы сущностСй ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с сохраняСмым состояниСм для прСдставлСния Ρ‚Π°Π±Π»ΠΈΡ† Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Java Persistence API позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сохранСниС состояния Π² Π²Π΅Π±-прилоТСниях Π±Π΅Π· нСобходимости создания модуля EJB.

Ѐасад сСанса для класса сущностСй Π² этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ являСтся сСансным ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π±Π΅Π· сохранСния состояния. АрхитСктура Enterprise JavaBean (EJB) 3.1, прСдставлСнная ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ спСцификации Java EE 6, позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ сСансов Π±Π΅Π· бизнСс-интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² EJB 3.0. БпСцификация Java EE 6 Ρ‚Π°ΠΊΠΆΠ΅ допускаСт ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π°Ρ€Ρ…ΠΈΠ² WAR. Благодаря этому упрощаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π° счСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ нСобходимости создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ EJB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π°Ρ€Ρ…ΠΈΠ² JAR Π² Π°Ρ€Ρ…ΠΈΠ² EAR. Однако для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ J2EE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, остаСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² создании Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² EAR для отдСлСния бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΡ‚ уровня прСдставлСния.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎΠ± использовании EJB 3.1 Π² срСдС IDE ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ курсС Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прилоТСния J2EE с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EJB 3.1.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ классах сущностСй см. Π² Π³Π»Π°Π²Π΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² API-интСрфСйс сохранСния состояния Java Π² Π£Ρ‡Π΅Π±Π½ΠΎΠΌ курсС ΠΏΠΎ Java EE 7.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… сСансов см. Π² Π³Π»Π°Π²Π΅ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сСанса? Π² РуководствС ΠΏΠΎ Java EE 7.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ класса сущности

Π’ этом ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мастСра создания класса сущностСй Π±ΡƒΠ΄Π΅Ρ‚ создан простой класс сущностСй с сохраняСмым состояниСм. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ описан мастСр создания Π±Π»ΠΎΠΊΠ° сохранСния состояния, которая опрСдСляСт источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ диспСтчСр сущностСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Π² класс для прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ созданы ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния ΠΈ установки для Π½ΠΎΠ²ΠΎΠ³ΠΎ поля.

Класс сущностСй Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. ΠŸΡ€ΠΈ создании класса сущностСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мастСра Π² срСдС IDE ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСтся ΠΏΠΎΠ»Π΅ id ΠΈ создаСтся аннотация @Id для объявлСния этого поля Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. Π’Π°ΠΊΠΆΠ΅ Π² срСдС IDE добавляСтся аннотация @GeneratedValue ΠΈ указываСтся стратСгия создания ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ поля id.

ИспользованиС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ интСрфСйса Java Persistence Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прилоТСния Π² силу отсутствия нСобходимости настройки дСскрипторов развСртывания для опрСдСлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-рСляционного сопоставлСния для ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΡ… состояниС ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ свойств. ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для опрСдСлСния этих свойства нСпосрСдствСнно Π² простом классС Java.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управляСт интСрфСйс API EntityManager. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ API EntityManager ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ контСкст сохранСния состояния, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ контСкст сохранСния состояния прСдставляСт собой Π³Ρ€ΡƒΠΏΠΏΡƒ экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ прилоТСния для обозначСния экзСмпляра контСкста с сохранСниСм состояния для классов сущностСй ΠΊ классу ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π’ дальнСйшСм ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управляСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ.

Для создания класса сущностСй Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

  1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ» > «Π”Ρ€ΡƒΠ³ΠΈΠ΅».

  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «ΠšΠ»Π°ΡΡ сущностСй» Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ «Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ состояния». НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».

  3. Π’ ΠΏΠΎΠ»Π΅ «Π˜ΠΌΡ класса» Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Message.

  4. Π’ ΠΏΠΎΠ»Π΅ «ΠŸΠ°ΠΊΠ΅Ρ‚» Π²Π²Π΅Π΄ΠΈΡ‚Π΅ entities.

  5. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ сохранСния состояния». НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».

  6. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ источник Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ jdbc/sample , Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JavaDB).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… для jdbc/sample находится Π² составС ΠΏΠ°ΠΊΠ΅Ρ‚Π° срСды IDE ΠΏΡ€ΠΈ установкС срСды IDE ΠΈ сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ GlassFish. Однако ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ источник Π΄Π°Π½Π½Ρ‹Ρ…, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

МоТно ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (имя Π±Π»ΠΎΠΊΠ° сохранСния состояния, поставщик сохранСния состояния EclipseLink). Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для Π±Π»ΠΎΠΊΠ° сохранСния состояния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСрфСйс API Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Java ΠΈ Ρ‡Ρ‚ΠΎ для стратСгии создания Ρ‚Π°Π±Π»ΠΈΡ† установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ», Ρ‚. Π΅. Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° основС классов сущностСй ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ прилоТСния.

  1. Π’ мастСрС создания Π±Π»ΠΎΠΊΠ° сохранСния состояния Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ».

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ» Π² срСдС IDE Π±ΡƒΠ΄Π΅Ρ‚ создан класс сущностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ откроСтся Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π² срСдС IDE Π±Ρ‹Π»ΠΎ создано ΠΏΠΎΠ»Π΅ id private Long id; , ΠΈ для поля созданы Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Id ΠΈ @GeneratedValue(strategy = GenerationType.AUTO) .

  1. Π’ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»Π΅ message (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ) ΠΏΠΎΠ΄ ΠΏΠΎΠ»Π΅ΠΌ id .

private Long id;
*private String message;*
  1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄» (Alt-Insert; Ctrl-I для Mac), Π° Π·Π°Ρ‚Π΅ΠΌ «ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ установка».

  2. Π’ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ «Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² получСния ΠΈ установки» Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅ message ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ».

Π’ срСдС IDE Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния ΠΈ установки для поля message .

Figure 3. ΠœΠ°ΡΡ‚Π΅Ρ€ создания Π±Π»ΠΎΠΊΠΎΠ² сохранСния состояния

  1. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния.

Класс сущностСй прСдставляСт собой Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ запускС этого прилоТСния автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ создана Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… для сообщСния. Π’Π°Π±Π»ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· столбцов

id ΠΈ message .

Если ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ сохранСния состояния Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ XML, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСрфСйс API Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Java (JTA) ( transaction-type="JTA" ). Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ сущностСй Π² контСкстС сохранСния состояния осущСствляСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ трСбуСтся мСньшС строк ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» сущностСй управляСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π° Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎΠ± использовании JTA для управлСния транзакциями ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ интСрфСйсу Java Transaction API.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ фасада сСанса

Π’ этом ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ мастСр создания фасада сСанса Π±Π΅Π· сохранСния состояния для сущности Message.

Богласно спСцификации EJB 3.1. Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ бизнСс-интСрфСйсы для сСансных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, для отобраТСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования прСдставлСния с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом ΠΈΠ»ΠΈ Π±Π΅Π· интСрфСйса.

Для создания сСансного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги.

  1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ» > «Π”Ρ€ΡƒΠ³ΠΈΠ΅».

  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «Π‘СансныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для сущностных классов» ΠΈΠ· ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Enterprise JavaBeans. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».

  3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Message ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ». НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”Π°Π»Π΅Π΅».

  4. Π’ ΠΏΠΎΠ»Π΅ «ΠŸΠ°ΠΊΠ΅Ρ‚» Π²Π²Π΅Π΄ΠΈΡ‚Π΅ boundary. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ».

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бизнСс-интСрфСйс для сСансного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ трСбуСтся. ВмСсто этого Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ для локально управляСмого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² прСдставлСнии Π±Π΅Π· интСрфСйса.

Figure 4. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Bean сСанса для мастСра классов сущностСй

Когда Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ», срСда IDE создаст фасадный класс сСанса MessageFacade.java ΠΈ AbstractFacade.java ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅. Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² созданном ΠΊΠΎΠ΄Π΅, аннотация @Stateless ΠΈΡΠΏΠΎΠ»ΡŒΠ·Ρƒeтся для объявлСния MessageFacade.java сСансным ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π±Π΅Π· состояния. MessageFacade.java являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ AbstractFacade.java , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ управляСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

@Stateless
public class MessageFacade extends AbstractFacade<Message> {
    @PersistenceContext(unitName = "SimpleEE6AppPU")
    private EntityManager em;

ΠŸΡ€ΠΈ создании фасада для сущности с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ мастСра Π² срСдС IDE ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ добавляСтся аннотация

PersistenceContext ( @PersistenceContext(unitName = "SimpleEE6AppPU") ) для внСдрСния рСсурса диспСтчСра сущностСй Π² элСмСнт сСансного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ для опрСдСлСния ΠΈΠΌΠ΅Π½ΠΈ Π±Π»ΠΎΠΊΠ° сохранСния состояния. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ имя Π±Π»ΠΎΠΊΠ° сохранСния состояния объявлСно явно, Π½ΠΎ имя Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ сохранСния состояния.

Π‘Ρ€Π΅Π΄Π° IDE Ρ‚Π°ΠΊΠΆΠ΅ создаСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² AbstractFacade.java для создания, измСнСния, удалСния ΠΈ нахоТдСния сущностСй. Π’ интСрфСйсС API EntityManager ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия с контСкстом сохранСния состояния. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, срСда IDE Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ распространСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ запросов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для нахоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сущностСй. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…

findAll , findRange ΠΈ count ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС API Criteria для создания запросов. API-интСрфСйс Criteria Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ JPA 2.x, которая Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ спСцификации Java EE 6.

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ Java. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. | Π”ΠΆΠΎΠ½ БСлавски | Javarevisited

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ Java. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. | Π”ΠΆΠΎΠ½ БСлавски | Π―Π²Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ посСтил | Medium ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π²

Β·

Π§Ρ‚Π΅Π½ΠΈΠ΅: 6 ΠΌΠΈΠ½.

Β·

20 июля 2020 г.

Photo by Glenn Carstens-Peters on Unsplash

ВсС языки β€” это «инструмСнты» для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ многочислСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ β€” Java (хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это Python).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° программирования Π½Π° этом языкС практичСски Π±Π΅Π·Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹.

Автор: John Selawsky

3,4 тыс. подписчиков

Β·ΠŸΠΈΡΠ°Ρ‚Π΅Π»ΡŒ для

Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Java ΠΈ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ Java Π½Π° курсах программирования Learning Tree International. ΠœΡ‹ Π²Π΅Ρ€ΠΈΠΌ Π² Java.

Π•Ρ‰Π΅ ΠΎΡ‚ Π”ΠΆΠΎΠ½Π° БСлавски ΠΈ ДТавапСрСсмотрСно

Π”ΠΆΠΎΠ½ БСлавски

Π²

20 ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ΄Π΅ΠΉ для Java-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ повысят Π²Π°ΡˆΡƒ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ программиста

Π­Ρ‚ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ станут Π½Π°Ρ‡Π°Π»ΠΎΠΌ вашСй ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹ программиста. Учитывая, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ дСсятки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², которыС…

11 ΠΌΠΈΠ½ΡƒΡ‚ чтСния Β· 3 октября 2020 Π³.

in

10 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Spring Cloud, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ микросСрвисов Π² Java

Π’ΠΎΡ‚ 10 самыС Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Spring Cloud ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Java-микросСрвисов

Β· Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π·Π° 6 ΠΌΠΈΠ½ΡƒΡ‚ Β· 27 июня

ΠšΠΈΡˆΠΎΡ€ ΠšΠ°Ρ€Π½Π°Ρ‚Π°ΠΊΠ°ΠΏΡƒ

Π²

5 Π²Π°ΠΆΠ½Ρ‹Ρ… шаблонов проСктирования микросСрвисов

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования микросСрвисов становятся всС Π±ΠΎΠ»Π΅Π΅ популярными благодаря ΠΈΡ… способности ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния…

Π”ΠΆΠΎΠ½ БСлавски

in

10 ΡΠΌΠ΅Ρ€Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Java

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? ΠŸΠΎΡ…ΠΎΠΆΠ΅, Π²Ρ‹ сдСлали свой Π²Ρ‹Π±ΠΎΡ€ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ…β€¦

Π§Ρ‚Π΅Π½ΠΈΠ΅: 8 ΠΌΠΈΠ½Β·17 апрСля 2019 Π³.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΎΡ‚ John Selawsky

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ Medium

Julie Perilla Garcia

in

Π‘Ρ‚Π°Ρ‚ΡŒ Π²Π΅Π»ΠΈΠΊΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡβ€Šβ€”β€Š Π’Π°ΠΌ Π½ΡƒΠΆΠ½Π° систСма

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½.

Β·Π§Ρ‚Π΅Π½ΠΈΠ΅ 7 ΠΌΠΈΠ½ΡƒΡ‚Β·23 июня

Julie Perilla Garcia

in

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ этих 5 Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ мСстС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ успСха Π² качСствС ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°-программиста

ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚Π΅ своС врСмя Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Β·7 ΠΌΠΈΠ½ΡƒΡ‚ чтСния·5 Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄

Бписки

ΠžΠ±Ρ‰Π΅Π΅ Π·Π½Π°Π½ΠΈΠ΅ кодирования

20 историй·45 сохранСний

Никогда Π½Π΅ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΈ Π½Π΅ Ρ€Π°Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ

10 историй·17 сохранСний 9 0003

Π˜ΡΡ‚ΠΎΡ€ΠΈΠΈ Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π Π°Π·Π²ΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния

19 историй·158 сохранСний

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

11 историй·28 сохранСний

Π”ΠΆΠ΅ΠΉΠΊΠΎΠ± Π‘Π΅Π½Π½Π΅Ρ‚Ρ‚

Π²

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Git ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ 90 018

Git β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приятно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. 15 ноября 2022 Π³. , ΠΈ эффСктивная систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π΅ΡΠΊΡƒΡ€Π°ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒβ€¦

Β·9 ΠΌΠΈΠ½ чтСния·20 апрСля

The PyCoach

in

Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ChatGPT Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ! Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ 99% ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ChatGPT

ΠžΡΠ²ΠΎΠΉΡ‚Π΅ ChatGPT, ΠΈΠ·ΡƒΡ‡ΠΈΠ² Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ быстрого доступа.

Β·7 ΠΌΠΈΠ½ΡƒΡ‚ чтСния·17 ΠΌΠ°Ρ€Ρ‚Π°

Π­Π½Ρ‚ΠΎΠ½ΠΈ Π”. Мэйс

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ LeetCode (ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ)

tl;dr: Π’Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«Π¨Π΅ΡΡ‚ΡŒ шагов» ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ с вопросами LeetCode, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. Π₯ранитС…

Β·13 ΠΌΠΈΠ½ чтСния·10 мая 2022 Π³.

Π‘ΠΌ. Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Бтатус

ΠšΠ°Ρ€ΡŒΠ΅Ρ€Π°

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста Π² Ρ€Π΅Ρ‡ΡŒ

Плагин прилоТСния

Плагин прилоТСния ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ созданиС исполняСмого прилоТСния JVM. Π­Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ TAR ΠΈ/ΠΈΠ»ΠΈ ZIP, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сцСнарии запуска для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля прилоТСния Ρ‚Π°ΠΊΠΆΠ΅ нСявно примСняСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Java. Основной исходный Π½Π°Π±ΠΎΡ€ фактичСски являСтся Β«ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌΒ».

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля прилоТСния Ρ‚Π°ΠΊΠΆΠ΅ нСявно примСняСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ распространСния. А создаСтся основной дистрибутив , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ зависимости ΠΊΠΎΠ΄Π° ΠΈ сгСнСрированныС сцСнарии запуска.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² сцСнарий сборки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ИспользованиС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля прилоТСния

build.gradle.kts

 plugins {
    ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
} 

build.gradle

 ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ {
    ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ «прилоТСния»
} 

ЕдинствСнной ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π° являСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ основного класса (Ρ‚.Π΅. Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π°) прилоТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Настройка основного класса прилоТСния

build.gradle.kts

 application {
    mainClass.set("org.gradle.sample.Main")
} 

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ build.gradle

 {
    mainClass = 'org.gradle.sample.Main'
} 

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Π·Π°Π΄Π°Ρ‡Ρƒ run (Ρ‚ΠΈΠΏ: JavaExec). Π­Ρ‚ΠΎ скомпилируСт основной исходный Π½Π°Π±ΠΎΡ€ ΠΈ запустит Π½ΠΎΠ²ΡƒΡŽ JVM с Π΅Π΅ классами (вмСстС со всСми зависимостями Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния) Π² качСствС ΠΏΡƒΡ‚ΠΈ ΠΊ классам ΠΈ с использованиСм ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ основного класса. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gradle run --debug-jvm (см. JavaExec.setDebug (логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)).

Начиная с Gradle 4.9, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ --args . НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки foo --bar , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ gradle run --args="foo --bar" (см. JavaExec.setArgsString(java.lang.String)

Если Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² JVM ΠΈΠ»ΠΈ свойств систСмы, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ applicationDefaultJvmArgs свойство. Π­Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ JVM ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ run , Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² сгСнСрированных сцСнариях запуска вашСго дистрибутива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² JVM ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

build.gradle.kts

 application {
    applicationDefaultJvmArgs = listOf("-Dgreeting.language=en")
} 

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ build.gradle

 {
    applicationDefaultJvmArgs = ['-Dgreeting. language=en']
} 

Если сцСнарии запуска вашСго прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Π΅ΠΌ

0201 bin ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свойство executableDir .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. Настройка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° для запуска сцСнариСв

build.gradle.kts

 application {
    исполняСмый_ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ = "custom_bin_dir"
} 

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ build.gradle

 {
    исполняСмый_ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ = 'custom_bin_dir'
} 

Gradle ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Java, ΠΊΠ°ΠΊ описано Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Java Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния для запуска ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния. Для этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ для Π½Π΅ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» module-info.java для описания вашСго модуля прилоТСния. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Gradle имя модуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ основного класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5. Настройка основного модуля ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния mainModule.set(«org.gradle.sample.app») // имя, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² module-info.java mainClass.set(«org.gradle.sample.Main») }

build.gradle

 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ {
    mainModule = 'org.gradle.sample.app' // имя, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² module-info.java
    mainClass = 'org.gradle.sample.Main'
} 

Π’ΠΎΡ‚ ΠΈ всС. Если Π²Ρ‹ запуститС своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Π·Π°Π΄Π°Ρ‡Ρƒ run ΠΈΠ»ΠΈ сгСнСрированный сцСнарий запуска, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ модуля Π²ΠΎ врСмя выполнСния. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ сбой рСфлСксивного доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ модуля.

Π‘ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ основной класс Ρ‚Π°ΠΊΠΆΠ΅ встроСн Π² module-info.class Ρ„Π°ΠΉΠ» вашСго прилоТСния Jar. Если Π²Ρ‹ запускаСтС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ java , Ρ‚ΠΎΠ³Π΄Π° достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя модуля.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ дистрибутив прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»Π°Π³ΠΈΠ½Π° дистрибутива (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся автоматичСски). Основной дистрибутив создаСтся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

Π’Π°Π±Π»ΠΈΡ†Π° 1. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ дистрибутива
ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

(ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³)

источник/расстояниС

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

ВсС зависимости срСды выполнСния ΠΈ основныС Ρ„Π°ΠΉΠ»Ρ‹ классов исходного Π½Π°Π±ΠΎΡ€Π°.

ΠΊΠΎΡ€Π·ΠΈΠ½Π°

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ запуска (созданы startScripts Π·Π°Π΄Π°Ρ‡Π°).

БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ для добавлСния Π² дистрибутив ΠΌΠΎΠΆΠ½ΠΎ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² src/dist . Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡƒΡŽ настройку ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, настроив CopySpec, прСдоставляСмый основным дистрибутивом.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 6. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π² дистрибутив прилоТСния

build.gradle.kts

 val createDocs by tasks.registering {
    val docs = layout.buildDirectory.dir("Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹")
    outputs.dir(Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹)
    ΡΠ΄Π΅Π»Π°Ρ‚ΡŒΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ {
        docs.get().asFile.mkdirs()
        docs.get().file("readme.txt").asFile.writeText("ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ мСня!")
    }
}
дистрибутивы {
    основной {
        содСрТаниС {
            ΠΈΠ· (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹) {
                Π²("Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹")
            }
        }
    }
} 

build.gradle

 tasks.register('createDocs') {
    def docs = layout.buildDirectory.dir('docs')
    outputs.dir Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹
    ΡΠ΄Π΅Π»Π°Ρ‚ΡŒΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ {
        docs.get().asFile.mkdirs()
        docs.get().file('readme.txt').asFile.write('ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ мСня!')
    }
}
дистрибутивы {
    основной {
        содСрТаниС {
            ΠΈΠ· (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹) {
                Π² "Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹"
            }
        }
    }
} 

Π£ΠΊΠ°Π·Π°Π², Ρ‡Ρ‚ΠΎ дистрибутив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π΄Π°Ρ‡ΠΈ (см. Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ сборки), Gradle Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ Ρ„Π°ΠΉΠ»Ρ‹, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π΄ΠΎ сборки дистрибутива, ΠΈ позаботится ΠΎΠ± этом Π·Π° вас.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ gradle installDist для создания ΠΎΠ±Ρ€Π°Π·Π° прилоТСния Π² build/install/ projectName . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ gradle distZip для создания ZIP-Π°Ρ€Ρ…ΠΈΠ²Π°, содСрТащСго дистрибутив, gradle distTar для создания прилоТСния TAR ΠΈΠ»ΠΈ gradle assemble для сборки ΠΎΠ±ΠΎΠΈΡ….

Настройка Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ сцСнариСв запуска

Плагин прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сцСнарии запуска Unix (ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Linux, macOS ΠΈ Ρ‚. Π΄.) ΠΈ Windows ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ запуска Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ JVM с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ исходной срСды сборки ΠΈ выполнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JAVA_OPTS env var). Π¨Π°Π±Π»ΠΎΠ½Ρ‹ сцСнариСв ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ основаны Π½Π° Ρ‚Π΅Ρ… ΠΆΠ΅ сцСнариях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для запуска самого Gradle ΠΈ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ дистрибутива Gradle.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ запуска ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ настраиваСмыС. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ CreateStartScripts для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² настройки.

Плагин Application добавляСт Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ β€” JavaExec

Зависит ΠΎΡ‚ : классы

ЗапускаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

startScripts β€” CreateStartScripts

Зависит ΠΎΡ‚ : Π±Π°Π½ΠΊΠ°

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ спСцифичныС для ОБ сцСнарии для запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ прилоТСния JVM.

installDist β€” Бинхронизация

Зависит ΠΎΡ‚ : jar , startScripts

УстанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

distZip β€” ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ индСкс

Зависит ΠΎΡ‚ : jar , startScripts

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ZIP-Π°Ρ€Ρ…ΠΈΠ² с ΠΏΠΎΠ»Π½Ρ‹ΠΌ дистрибутивом, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ сцСнарии для ОБ.

distTar β€” Tar

Зависит ΠΎΡ‚ : jar , startScripts

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΠ² TAR с ΠΏΠΎΠ»Π½Ρ‹ΠΌ дистрибутивом, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ сцСнарии для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ОБ.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния добавляСт Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для настройки Π΅Π³ΠΎ повСдСния. Π‘ΠΌ. Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ JavaApplication DSL для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ свойствах, доступных Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠ° application {} , ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² своСм сцСнарии сборки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

build.gradle.kts

 application {
    исполняСмый_ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ = "custom_bin_dir"
} 

build.gradle

 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ {
    исполняСмый_ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ = 'custom_bin_dir'
} 

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ запуска Gradle, связанныС с вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² соотвСтствии с Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Apache 2.