Java Guru πŸ€“
13.4K subscribers
933 photos
15 videos
788 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с классом Connection?

Π˜Ρ‚Π°ΠΊ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ соСдинСния JDBC Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Connection – сСссия Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ класс ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с JDBC. Основная Ρ€ΠΎΠ»ΡŒ этого класса – исполнСниС SQL-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Statement) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ ResultSet.

Connection прСдоставляСт Π² Π²ΠΈΠ΄Π΅ класса DatabaseMetaData ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅Π»ΠΎΠΌ: Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, поддСрТиваСмая Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° SQL, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, возмоТности этого соСдинСния, ΠΈ Ρ‚.Π΄..

Π’ коннСкшнС задаСтся мноТСство настройки самого соСдинСния. Π­Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ€Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎ-ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΊΠ»ΡŽΡ‡ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Маппинг Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… SQL Π² Java-Ρ‚ΠΈΠΏΡ‹ задаСтся здСсь ΠΆΠ΅, свойством typeMap.

Помимо выполнСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Connection прСдоставляСт срСдства для управлСния транзакциями. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Savepoint, ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ, Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎ-ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½.


Java GuruπŸ€“ #java
πŸ”₯4❀3πŸ‘2
Какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ @⁠ElementCollection, @⁠OneToMany ΠΈ @⁠ManyToMany?

ВсС эти Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – Ρ‡Π°ΡΡ‚ΡŒ Java Persistence API. Π‘ ΠΈΡ… использованиСм ΠΌΡ‹ рСгулярно сталкиваСмся Π² рСализациях JPA, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Hibernate.

Когда Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… сохраняСтся ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅-коллСкция, это ΠΏΠΎΠ»Π΅ обязано Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.

@⁠OneToMany ΠΈ @⁠ManyToMany хранят Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ сущности – для Π½ΠΈΡ… Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ всё Ρ‚Π΅ ΠΆΠ΅ трСбования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ JPA Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ для всСх
@Entity классов. КаТдая ΠΈΠ· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° своС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅.

@⁠ElementCollection создаСт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ встраиваСмых классов. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏ элСмСнтов ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½
@Embeddable, ΠΈΠ»ΠΈ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² список стандартных встраиваСмых классов (ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², строки, Π΄Π°Ρ‚Ρ‹, ΠΈ Ρ‚.Π΄.).

На ΡƒΡ€ΠΎΠ²Π½Π΅ хранСния Π² рСляционной Π±Π°Π·Π΅, для
@ElementCollection Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ создана ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°. ВСхничСски ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ one-to-many.

Но ΠΈΠ· Java ΠΊΠΎΠ΄Π° коллСкция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ встроСнной: Π΅Ρ‘ элСмСнтом Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнныС id, ΠΈΠΌΠΈ нСльзя ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ основной сущности. ЕдинствСнноС, Ρ‡Π΅ΠΌ такая коллСкция отличаСтся ΠΎΡ‚ встроСнного поля-ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° – Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π»Π΅Π½ΠΈΠ²ΠΎ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).


Java GuruπŸ€“ #java
πŸ‘6❀4πŸ”₯3
Для Ρ‡Π΅Π³ΠΎ слуТит Java KeyStore?

KeyStore ΠΈ TrustStore – это Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° криптографичСских ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ сСртификатов. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° .jks, .dks, .p12, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Для манипуляций Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² JDK поставляСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° – keytool. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ (alias). Π•Ρ‰Π΅ этот Ρ„Π°ΠΉΠ» Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… сСртификатов. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ.

KeyStore ΠΈ TrustStore устроСны ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½ΠΎ слуТат Ρ€Π°Π·Π½Ρ‹ΠΌ цСлям. KeyStore Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ TrustStore – ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ довСряСм.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ KeyStore. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ javax.net.ssl.keyStore (располоТСниС Ρ„Π°ΠΉΠ»Π°), javax.net.ssl.keyStoreType (Ρ‚ΠΈΠΏ) ΠΈ javax.net.ssl.keyStorePassword (ΠΏΠ°Ρ€ΠΎΠ»ΡŒ). Π”ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ динамичСски, классом java.security.KeyStore.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΎΠ΄ΠΈΠ½ TrustStore, Ρ„Π°ΠΉΠ» jre/lib/security/cacerts. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ JVM javax.net.ssl.trustStore, javax.net.ssl.trustStorePassword ΠΈ javax.net.ssl.trustStorePassword.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования – ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ TrustStore с самоподписанным SSL сСртификатом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ сайт ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTPS, Π½Π΅ проваливая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ бСзопасности. Π›ΠΈΠ±ΠΎ ΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ KeyStore с ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΌ SSL сСртификатом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΊΠ°ΠΊ HTTPS-сСрвСр.


Java GuruπŸ€“ #java
πŸ”₯7πŸ‘3❀2
Как ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ?

Π’ цСлях бСзопасности, вСсь доступ прилоТСния ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ частям ΠΊΠΎΠ΄Π° ΠΈ рСсурсам ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. РСшСния ΠΎ доступС ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Reflection API, ΠΈΠ»ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ бСзопасности.

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° прСдставлСн Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² check*(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ основному ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ checkPermission(). Π‘Π°ΠΌ доступ, ΠΏΡ€Π°Π²Π° Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, прСдставляСтся классом java.security.Permission. Π’Π°ΠΊ, доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ провСряСт ΠΌΠ΅Ρ‚ΠΎΠ΄ checkRead. Он ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² checkPermission ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ FilePermission с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°.

ЭкзСмпляр класса SecurityManager, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ограничСния доступа, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ System.setSecurityManager, ΠΈΠ»ΠΈ Π½Π° стартС прилоТСния Ρ„Π»Π°Π³ΠΎΠΌ -Djava.security.manager. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π½Π΅ установлСн.

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ бСзопасности ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Π½ΡƒΠΆΠ΅Π½ для ограничСния Π°ΠΏΠΏΠ»Π΅Ρ‚ΠΎΠ² – ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. БСйчас тСхнология Π°ΠΏΠΏΠ»Π΅Ρ‚ΠΎΠ² устарСла, Π½ΠΎ SecurityManager остаСтся всё Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ.


Java GuruπŸ€“ #java
πŸ”₯9πŸ‘3
Как ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ криптографичСский ΠΊΠ»ΡŽΡ‡?

KeyFactory – основной класс ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с криптографичСскими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ. Набор Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° SPI.

БущСствуСт большоС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ: DSA, RSA, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π‘Ρ‚Ρ€ΠΎΠΊΠ°-Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поставляСтся Π² Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΡ€ΠΈ Π΅Ρ‘ создании.

KeyFactory занимаСтся ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ спСцификации ΠΊΠ»ΡŽΡ‡Π° Π² сам ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

БпСцификация, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ интСрфСйса KeySpec, – Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ экспонСнта ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° RSA.

Π‘Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ прСдставлСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйсы PublicKey ΠΈ PrivateKey – наслСдники ΠΎΠ±Ρ‰Π΅Π³ΠΎ Key.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΡŽΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ классы-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйсов.


Java GuruπŸ€“ #java
πŸ‘8πŸ”₯5❀4
Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ/ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡?

НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈΡ… чтСния, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ здСсь писали Ρ€Π°Π½Π΅Π΅.

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ KeyPairGenerator. АрхитСктурно ΠΎΠ½ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠ»ΡŽΡ‡ΠΈ KeyFactory: Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· SPI, доступ ΠΊ Π½ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· getInstance.

ΠŸΠ΅Ρ€Π΅Π΄ использованиСм, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для этого ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ initialize ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:
β€’ Π–Π΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡Π°;
β€’ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ случайных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° SecureRandom;
β€’ Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½Ρ‹Π΅ для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° настройки Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ подкласса AlgorithmParameterSpec.

Если ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ создания ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°, эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΈΠΌΡƒΡ‚ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ значСния. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ устанавливаСт свои собствСнныС Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρ‹.

Π‘Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ generateKeyPair Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ KeyPair, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠΎΠ΄ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌΠΈ Π½Π°ΠΌ интСрфСйсами PrivateKey ΠΈ PublicKey ΠΏΠ°Ρ€Ρƒ инстансов спСцифичных для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° подклассов.


Java GuruπŸ€“ #java
πŸ”₯6❀3πŸ‘3
Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ jar ΠΈ war?

jar ΠΈ war – Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-нСзависимых Ρ„Π°ΠΉΠ»ΠΎΠ²-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² Java-прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ear. ВсС эти Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ – Π½Π° самом Π΄Π΅Π»Π΅ просто zip-Π°Ρ€Ρ…ΠΈΠ²Ρ‹ с классами ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ частями прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π² .zip, Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ.

JAR – Java Archive. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ классов, рСсурсы, зависимыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для прилоТСния Ρ„Π°ΠΉΠ»Ρ‹. ΠœΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΡŒ для исполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ java.

WAR – Web Archive. ВСхничСски ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ структуру, Π½ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ – Π°Ρ€Ρ…ΠΈΠ² JavaEE web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит jar-Ρ‹ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, JSP, статичСскиС Ρ„Π°ΠΉΠ»Ρ‹ Ρ„Ρ€ΠΎΠ½Ρ‚-энда, ΠΈ ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для сСрвлСт-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (web.xml). Π’ основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚ web-прилоТСния Π² сСрвлСт-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π‘ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠΌ Servlet API 3.0 ΠΈ embedded-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², всё большС становится принято Π·Π°ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² самодостаточныС jar (Π›ΠΎΠ·ΡƒΠ½Π³ Spring Boot: Make jar, not war).

EAR – Enterprise Archive. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π½Π°Ρ‡Π°Π²ΡˆΠΈΡ… ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ ΡƒΠΆΠ΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Spring Framework, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ совсСм экзотичным. Π­Ρ‚ΠΎ собранноС Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ΅ JavaEE ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ дСскрипторы Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚Π° ΠΈ JavaEE ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (Π²Π΅Π±-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, EJB, клиСнтскиС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ рСсурсов). ДСплоится Π² JavaEE Application Server.

ВсС Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ jar ΠΈΠ· JDK.


Java GuruπŸ€“ #java
πŸ”₯17❀6πŸ‘3
Как ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅, Π΅Π³ΠΎ ΠΏΠ°ΡƒΠ·Ρ‹ допустимы, Π° Ρƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ° Π½Π΅Ρ‚ сСтСвого доступа ΠΊ хосту, стандартный способ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ – нСпосрСдствСнно remote debug. Для этого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ JDWP. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° jdb, ΠΈΠ»ΠΈ встроСнная Π² IDE.

Π’ JDK поставляСтся Π½Π°Π±ΠΎΡ€ инструмСнтов для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. НапримСр Java Mission Control ΠΈ JConsole ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ мноТСство ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π΅Π³ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список инструмСнтов спСцифичСн для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ JVM, для HotSpot ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²
Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π½Π΅ зависимости ΠΎΡ‚ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π², всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ диагностичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠ΄ΠΈΠ½ – Π»ΠΎΠ³Π°Ρ…. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ встроСнный инструмСнт Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ событиях, опрСдСляСмых бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ вашСго прилоТСния. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΈ любом ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Π’ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку Java Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ для логгирования java.util.logging, ΠΏΠΎΠ·ΠΆΠ΅ остановимся Π½Π° Π½Ρ‘ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Π’Π°ΠΊΠΆΠ΅ сущСствуСт ряд популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: Log4j, SLF4J, Logback.


Java GuruπŸ€“ #java
πŸ‘9πŸ”₯5
🧠 Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€, Π° Π½Π΅ просто ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒ, Π³ΠΎΡ‚ΠΎΠ² Π»ΠΈ Ρ‚Ρ‹!

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° β€” Π±Π°Π·Π° для ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ устойчивыС систСмы ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ тСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
ΠŸΡ€ΠΎΠΉΠ΄ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ тСст, ΠΎΡ†Π΅Π½ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ скидку Π½Π° курс «АрхитСктура ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования».

На курсС Ρ‚Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡˆΡŒΡΡ:

βœ… ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΈ повСдСнчСскиС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹
βœ… Π”Π΅Π»ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ слоями систСмы
βœ… ΠœΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ контСкстов
βœ… Π’Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ бизнСсу ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅

πŸ“ ВСст ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, насколько Ρ‚Ρ‹ Π³ΠΎΡ‚ΠΎΠ² Π²Ρ‹ΠΉΡ‚ΠΈ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

🎁ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ прохоТдСния курса ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄ со скидкой ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ курс ΠΏΠΎ Git Π² записи

πŸ‘‰ ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ
https://vk.cc/cMSKPm

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
❀4πŸ‘2πŸ”₯2❀‍πŸ”₯1
Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ WEB-INF, Π° ΠΊΠΎΠ³Π΄Π° META-INF?

Π’ ΠΊΠΎΡ€Π½Π΅ Π°Ρ€Ρ…ΠΈΠ²Π° java-прилоТСния часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ WEB-INF ΠΈ META-INF. ОбС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ хранят Π² сСбС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² тСкстовом Π²ΠΈΠ΄Π΅: yaml, xml, json, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкст.

META-INF ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π°Ρ€Ρ…ΠΈΠ²Π°Ρ… всСх Ρ‚ΠΈΠΏΠΎΠ². Π“Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ – MANIFEST.MF, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅. Π’Π°ΠΌ ΠΆΠ΅ хранятся
β€’ ОбъявлСния ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² SPI;
β€’ Подпись Π°Ρ€Ρ…ΠΈΠ²Π°: Ρ„Π°ΠΉΠ»Ρ‹ .SF, .DSA, .RSA;
β€’ INDEX.LIST с подсказками ΠΎ мСстонахоТдСнии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°.
Иногда (Π½Π΅ часто) прилоТСния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΡƒΠ΄Π° свои статичСскиС рСсурсы, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эта дирСктория ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² classpath ΠΈ доступна Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.

WEB-INF ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² web-Π°Ρ€Ρ…ΠΈΠ²Π°Ρ… (.war). Она Π½Π΅ замСняСт, Π½ΠΎ дополняСт META-INF. Π’ Π½Π΅ΠΉ хранится:
β€’ Π“Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» web-прилоТСния web.xml;
β€’ ДСскрипторы Ρ‚Π΅Π³ΠΎΠ² .TLD;
β€’ ΠŸΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ classes/ с классами web-прилоТСния;
β€’ ΠŸΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ lib/ с .jar-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ зависимостСй;
β€’ ΠŸΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ tag/ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ‚Π΅Π³ΠΎΠ².


Java GuruπŸ€“ #java
πŸ‘7❀6πŸ”₯3
МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ части API?

Иногда этот вопрос ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Когда Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² пользованиС ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π½Π° Π΅Ρ‘ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ фактичСски накладываСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии Π²Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ классы ΠΈ ΠΈΡ… Ρ‡Π»Π΅Π½Ρ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ захотят ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ. Π’ΠΎΠ³Π΄Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ остановится.

Π­Ρ‚ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Π°Ρ ΠΈ слоТная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сСмантичСскоС вСрсионированиС ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСкращСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ (deprecation).

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ API ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ
@Deprecated. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½Π° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½Π° этапС компиляции ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ устарСл ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ большС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ писали ΠΎΠ± особСнностях использования
@Deprecated. Π‘ΠΎΠ±ΠΈΡ€Π°ΡΡΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ API, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ @Deprecated(forRemoval=true).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ запас Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Deprecation policy – Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π°ΡŽΡ‚ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΈΠ»ΠΈ вСрсий) послС появлСния
@Deprecated ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ всё Π΅Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½.

Для поиска Π² ΠΊΠΎΠ΄Π΅ использования deprecated ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ JDK содСрТит ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ jdeprscan. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° javadoc собираСт список ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ страницу deprecated-list.html.


Java GuruπŸ€“ #java
πŸ‘12πŸ”₯6
Какой способ логирования Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ логирования, ΡΡ‚Π°Π²ΡˆΠΈΠ΅ стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ, Π² хронологичСском порядкС ΠΈΡ… появлСния:

β€’ java.util.Logging ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
β€’ Log4j (deprecated)
β€’ Logback
β€’ Log4j 2

ВсС эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ основныС Ρ„ΠΈΡ‡ΠΈ: ΡƒΡ€ΠΎΠ²Π½ΠΈ логирования (Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ), Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ хэндлСры (ΠΊΡƒΠ΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ), Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ (ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ). Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ происходило ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π½ΡŽΠ°Π½ΡΠ°Ρ… каТдая ΠΈΠ· Π½ΠΈΡ… ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»Π° ошибки ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, сохраняя Π΅Ρ‘ прСимущСства. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ самыС свСТиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ – Logback ΠΈ Log4j 2.

Для совмСщСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ-фасады, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс:
β€’ SLF4j
β€’ Apache Commons Logging (JCL)

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ bridge-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Они ΠΌΠ°ΡΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ нСпосрСдствСнно ΠΏΠΎΠ΄ интСрфСйс Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ использованиС Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… фасадов, ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ вовсС Π±Π΅Π· фасадов.


Java GuruπŸ€“ #java
πŸ‘9❀5πŸ”₯5
Как ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°?

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ тСстом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎ ΠΈ послС. Π’Π°ΠΊΠΈΠ΅ тСсты Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ benchmark.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ – ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ врСмя Π΄ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎ. Π£ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ряд нюансов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ совсСм ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ тСстового, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΏΡ€ΠΎΠ³Ρ€Π΅Ρ‚ΠΎΠΉΒ»: заполнятся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ систСмныС кэши, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ JIT-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ горячСго ΠΊΠΎΠ΄Π°, ΠΏΠ°ΠΌΡΡ‚ΡŒ наполнится мусором.

Наивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ: Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сцСнариСв Π½Π° Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΌ тСстовом стСндС. ΠŸΡ€ΠΈ тСстировании кусков Java ΠΊΠΎΠ΄Π° (Π² ΠΌΠΈΠΊΡ€ΠΎΠ±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ…) врСмя выполнСния ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ, поэтому упомянутыС Π½ΡŽΠ°Π½ΡΡ‹ вносят Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΊΠ»Π°Π΄ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘Π°ΠΌΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ инструмСнт ΠΈΠ· JDK, JMH. Для этого Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² зависимости, Π° тСстовый ΠΌΠ΅Ρ‚ΠΎΠ΄ помСчаСтся Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@Benchmark. ВСсты ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ исполняСмого jar-Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π˜Ρ‚ΠΎΠ³ΠΈ тСстирования Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² консоль.

Java GuruπŸ€“ #java
πŸ‘10❀6πŸ”₯5
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ phase, goal ΠΈ lifecycle Π² Maven?

Phase – Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ шаги ΠΈΠ·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит lifecycle Π² Maven. Π’ΠΎΠΎΠ±Ρ‰Π΅, сущСствуСт Ρ‚Ρ€ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°:

β€’ Clean – Ρ„Π°Π·Ρ‹ pre-clean, clean, post-clean;
β€’ Default – validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy;
β€’ Site – pre-site, site, post-site, site-deploy.

Goal – это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ выполняСмоС ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ дСйствиС. Плагин привязываСт свои Π³ΠΎΠ»Ρ‹ ΠΊ Ρ„Π°Π·Π°ΠΌ. НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ mvn clean, Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ² сборки Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ сама Ρ„Π°Π·Π° clean, Π° привязанная ΠΊ Π½Π΅ΠΉ Ρ†Π΅Π»ΡŒ clean:clean ΠΈΠ· встроСнного maven-clean-plugin.
Когда Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ mvn пСрСдаСтся Ρ„Π°Π·Π°, ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅Π΅ самой выполнятся всС ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΅ΠΉ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ лайфсайклС. ВмСсто Ρ„Π°Π·Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ явно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ (mvn clean:clean вмСсто mvn clean), Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ†Π΅Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ†Π΅Π»ΠΈ Ρ„Π°Π·Ρ‹ pre-clean).

Π€Π°Π·Ρ‹ всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅. Если ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°Π·Π΅ привязано нСсколько Ρ†Π΅Π»Π΅ΠΉ, ΠΎΠ½ΠΈ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² порядкС объявлСния Π² pom.xml.

НСкоторыС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈ, Π½Π΅ привязанныС Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ Ρ„Π°Π·Π°ΠΌ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ явно.

Если Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ mvn пСрСдаСтся нСсколько Ρ„Π°Π·/Ρ†Π΅Π»Π΅ΠΉ, ΠΎΠ½ΠΈ выполнятся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. КаТдая Ρ†Π΅Π»ΡŒ Π² процСссС выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹.

Π’Π°ΠΊ, Π²Ρ‹Π·ΠΎΠ² mvn test package – Ρ‚ΠΎ ΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ mvn package, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС всС Ρ†Π΅Π»ΠΈ ΠΈΠ· Ρ„Π°Π·Ρ‹ test (ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…) ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ исполнСны ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² package. mvn clean install Ρ‚Π°ΠΊ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ получится, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ„Π°Π·Ρ‹ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ².


Java GuruπŸ€“ #java
πŸ”₯11πŸ‘9❀3
Как Spring Framework Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Dependency Injection?

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ контроля (inversion of control, IoC) – ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ проСктирования, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ управлСния пСрСдаСтся Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ. Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ модуля этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ избавляСт ΠΎΡ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ дСталях ΠΈΡ… взаимодСйствия. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй (Dependency Injection, DI) – ΠΎΠ΄Π½Π° ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ IoC. ΠŸΡ€ΠΈ взаимодСйствии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ высокоуровнСвыми абстракциями, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ конкрСтная Π΅Ρ‘ рСализация поставляСтся Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ.

Бтандартная рСализация DI – Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ инстанциируСт всС сСрвисы, ΠΈ складываСт ΠΈΡ… Π² IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ΠŸΡ€ΠΈ этом ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, Service Locator, занимаСтся поиском соотвСтствия Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ абстракциям ΠΈ ΠΈΡ… Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ.

Spring – большой Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. DI рСализуСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ – Spring IoC.

Бущности бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Spring, ΠΊΠ°ΠΊ ΠΈ Π² JavaEE Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ beans. Π‘ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами, ΠΊΠΎΡ€Π½ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… Π»Π΅ΠΆΠ°Ρ‚ Π² понятии Configuration. Π’ качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±ΠΈΠ½ΠΎΠ² выступаСт ApplicationContext. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ зависимости контСксту, ΠΎΠ½Π° помСчаСтся Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@Autowired.

Java GuruπŸ€“ #java
πŸ‘10❀3πŸ”₯3
Когда систСмы Π½Π΅ хотят Β«Π΄Ρ€ΡƒΠΆΠΈΡ‚ΡŒΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ собой β€” начинаСтся головная боль.😫
ОсобСнно Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов. Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ лишнСго ΠΊΠΎΠ΄Π°, ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ силы, ΠΏΡ€ΠΈ этом ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внСшниС систСмы с Apache Kafka?
ΠžΡ‚Π²Π΅Ρ‚ β€” Kafka Connect.

Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π²Π΅Π±ΠΈΠ½Π°Ρ€, Π³Π΄Π΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅:
βœ’οΈΠžΡΠ½ΠΎΠ²Ρ‹ Kafka Connect: АрхитСктура ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Ρ‹
βœ’οΈΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация: Настройка ΠΈ запуск ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ систСмами
βœ’οΈΠžΡˆΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Как эффСктивно ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Kafka Connect

23 июня Π² 19:00 (МБК) β€” БСсплатно!
Π‘ΠΏΠΈΠΊΠ΅Ρ€: Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ Π¨ΠΈΠ»ΠΈΠ½ β€” Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ программист ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² Deutsche Telekom IT GmbH
Π”Π°Ρ€ΠΈΠΌ Ρ‡Π΅ΠΊ-лист ΠΏΠΎ установкС Kafka Connect ΠΏΡ€ΠΈ рСгистрации Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€!

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡƒΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒ слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ своих систСм: https://tglink.io/304568797215

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО "ОВУБ ΠžΠΠ›ΠΠ™Π-ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π•". ИНН 9705100963. erid: 2W5zFHAhiVN
❀3πŸ‘2πŸ”₯2
Какой Ρƒ Spring Π±ΠΈΠ½ΠΎΠ² скоуп ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

Π’ Spring Framework Π²ΠΎ всСх опрСдСлСниях бизнСс-сущностСй (bean) явно ΠΈΠ»ΠΈ нСявно присутствуСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ scope. Π’ Java-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ пСрСдаСтся Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Scope, Π² xml – Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ scope Ρ‚Π΅Π³Π° <bean>.

Атрибут scope – это строка-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, которая ставит Π±ΠΈΠ½Ρƒ Π² соотвСтствиС экзСмпляр класса org.springframework.beans.factory.config.Scope. Π‘ΠΊΠΎΡƒΠΏ – рСализация ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° «стратСгия» для Ρ„Π°Π±Ρ€ΠΈΠΊ Π±ΠΈΠ½ΠΎΠ², инструкция ΠΏΠΎ созданию бизнСс-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Spring-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ всСгда сущСствуСт Π΄Π²Π° сокоупа:
β€’ singleton – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹, ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… внСдрСниях ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. ПолСзСн для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° случаСв: Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· состояния, нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, это Π½Π΅ класс-синглтон: ΠΏΡ€ΠΈ объявлСнии Π΄Π²ΡƒΡ… Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΡ… экзСмпляров Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π°. Π­Ρ‚ΠΎ скоуп ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
β€’ prototype – ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π±ΠΈΠ½ΠΎΠ² создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НуТСн для измСняСмых Π±ΠΈΠ½ΠΎΠ² с состояниСм.

Spring Web добавляСт 4 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… скоупа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π±ΠΈΠ½ синглтоном Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСтСвого запроса (request), клиСнтской сСссии (session), контСкста сСрвлСта (application) ΠΈ вСбсокСт-сСссии (websocket).

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ собствСнныС скоупы. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² самих исходниках Spring: SimpleThreadScope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΈΠ½ Ρ‚Ρ€Π΅Π΄-Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Для использования Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ скоупы, Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² BeanFactory.


Java GuruπŸ€“ #java
❀8πŸ‘4πŸ”₯4😐3
πŸ“š ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ: LZ77/78

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ.

πŸ—“ 25 июня Π² 20:00 МБК
πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса «Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…Β».

βœ”οΈ На этом Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ созданиС Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ LZ77/78. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ словарного сТатия, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ поиска ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΡ… кодирования.

βœ”οΈ Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ сравнСниС всСх Ρ‚Ρ€Π΅Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия (RLE, Huffman, LZ77/78). ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

Π—Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π΅ практичСскоС занятиС для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.​​​​​​​​​​​​​​​​

🎁 ВсСм участникам Π²Π΅Π±ΠΈΠ½Π°Ρ€Π° Π΄Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - Algo5

πŸ‘‰ РСгистрация Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€: https://vk.cc/cMY8Lf

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❀2πŸ‘2πŸ”₯2
КакиС отличия ΠΌΠ΅ΠΆΠ΄Ρƒ @⁠Component, @⁠Service, @⁠Repository ΠΈ @⁠Controller?

@Component – простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ объявлСниС класса объявлСниСм Spring-Π±ΠΈΠ½Π°. Из всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² сканированиС (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Π΅Ρ‚ @ComponentScan), Π±ΡƒΠ΄ΡƒΡ‚ созданы Π±ΠΈΠ½-Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ½Ρ‹.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это алиасы Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ
@Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ повСдСния, ΠΈ тСхничСски Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ядра Spring Framework Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅.

Π­Ρ‚ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«Stereotype annotationsΒ». Π˜Ρ… Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – сСмантика, логичСская Ρ€ΠΎΠ»ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:
β€’ @⁠Service – рСализация бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β€’ @⁠Repository – Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: Β«Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ классичСский DAO;
β€’ @⁠Controller – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-запросов (ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
@RequestMapping)

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой сСмантикой. НапримСр, трансляция ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Persistence API Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… стСрСотипа
@Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΡ€ΠΎΠΌΠ΅ сСмантики ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Java GuruπŸ€“ #java
πŸ‘9πŸ”₯6❀3