Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ систСмы элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ addCustomerToAccount ΠΈ removeCustomerFromAccount сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° AccountControllerEJB ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ счСт-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. ΠœΠ΅Ρ‚ΠΎΠ΄ addCustomerToAccount, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для создания ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ addCustomerToAccount вставляСт строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ customer_account_xref Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΡΡ‚ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ пСрСкрСстных… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ систСмы элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ систСмы элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ

1 ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° общая схСма взаимодСйствия ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’ ΡΡ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСн ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π° Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн процСсс построСния, размСщСния ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ° прилоТСния.

Рисунок 1 — ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Duke’s Bank

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2 Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ (Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ J2EE-прилоТСния) ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΡΠ΅ΡΡΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. На ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² сСссионныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. На ΡƒΡ€ΠΎΠ²Π½Π΅ сСрвСра ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈΡ… ΡΠΎΡΡ‚ояния.

Рисунок 2 — ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ прилоТСния Duke’s Bank

2 БСссионныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Duke’s Bank ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ сСссионных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: AccountControllerEJB, CustomerControllerEJB ΠΈ TxControllerEJB. (Tx ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ бизнСс-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π΄Π΅Π½Π΅Π³.) Π­Ρ‚ΠΈ сСссионныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ клиСнтский взгляд Π½Π° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡƒ прилоТСния. Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π΅ сСрвСра, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ошибок.

2.1 AccountControllerEJB

БизнСс-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° AccountControllerEJB Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: созданиС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ связями счСт-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΡ‡Π΅Ρ‚Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

— createAccount;

— removeAccount.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° AccountControllerEJB Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ create ΠΈ remove ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ AccountEJB. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ createAccount ΠΈ removeAccount Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ для указания Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ createAccount Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ IllegalAccountTypeException, Ссли Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Checking, Saving, Credit ΠΈΠ»ΠΈ Money Market. ΠœΠ΅Ρ‚ΠΎΠ΄ createAccount Ρ‚Π°ΠΊΠΆΠ΅ провСряСт, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сущСствуСт, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° findByPrimaryKey ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ CustomerEJB. Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π²Π΅Π½ false, ΠΌΠ΅Ρ‚ΠΎΠ΄ createAccount Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ CustomerNotFoundException.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ счСт-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ:

— addCustomerToAccount;

— removeCustomerFromAccount.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ AccountEJB ΠΈ CustomerEJB ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ «ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ». Банковский счСт ΠΌΠΎΠΆΠ΅Ρ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько счСтов. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€ΡΠΈΡΡ‚Π΅Π½Ρ†ΠΈΡŽ, сущСствуСт нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² управлСния этими ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация находится Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ для управляСмой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ пСрсистСнции.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ addCustomerToAccount ΠΈ removeCustomerFromAccount сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° AccountControllerEJB ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ счСт-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. ΠœΠ΅Ρ‚ΠΎΠ΄ addCustomerToAccount, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для создания ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ addCustomerToAccount вставляСт строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ customer_account_xref Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΡΡ‚ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ пСрСкрСстных ссылок каТдая строка содСрТит customerId ΠΈ accountId связанных сущностСй. Для удалСния ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ removeCustomerFromAccount удаляСт строку ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ customer_account_xref Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ removeAccount, ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС строки с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ accountId ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ customer_account_xref.

Π‘Π»Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΡ‡Π΅Ρ‚Π΅:

— getAccountsOfCustomer;

— getDetails.

БСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ AccountControllerEJB ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get. ΠœΠ΅Ρ‚ΠΎΠ΄ getAccountsOfCustomer Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС счСта ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° findByCustomer ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ AccountEJB. ВмСсто Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ экзСмпляра, AccountControllerEJB ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getDetails, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (AccountDetails), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² ΡΠ΅Π±Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ состояниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° AccountEJB. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ для извлСчСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ состояния, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ, связанных с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ.

2.2 CustomerControllerEJB

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ AccountControllerEJB, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ-счСт, ΠΈΠ· ΡΡ‚ΠΈΡ… Π΄Π²ΡƒΡ… сСссионных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² CustomerControllerEJB являСтся Π±ΠΎΠ»Π΅Π΅ простым. ΠšΠ»ΠΈΠ΅Π½Ρ‚ создаСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ CustomerEJB, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ createCustomer сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° CustomerControllerEJB. Для удалСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ removeCustomer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ remove ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° CustomerEJB, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ удаляСт ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ customer_account_xref всС строки, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

БСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ CustomerControllerEJB ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ: getCustomersOfAccount ΠΈ getCustomersOfLastName. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска — findByAccountId ΠΈ findByLastName — ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° CustomerEJB.

2.3 TxControllerEJB

БСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TxControllerEJB ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ банковскиС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ²ΠΎΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ get (getTxsOfAccount ΠΈ getDetails) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TxControllerEJB ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ балансы банковских счСтов:

— withdraw;

— deposit;

— makeCharge;

— makePayment;

— transferFunds.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ AccountEJB для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° счСта ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ баланса. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ withdraw ΠΈ deposit ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π½Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹Ρ… счСтов, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ makeCharge ΠΈ makePayment ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹Ρ… счСтов. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ type ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΡΠΎΠΎΡ‚вСтствуСт счСту, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ IllegalAccountTypeException. Если опСрация расходования Π΄Π΅Π½Π΅Π³ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ балансу, ΠΌΠ΅Ρ‚ΠΎΠ΄ withdraw Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ InsufficientFundsException. Если сумма ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ для счСта, ΠΌΠ΅Ρ‚ΠΎΠ΄ makeCharge Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ InsufficientCreditException.

ΠœΠ΅Ρ‚ΠΎΠ΄ transferFunds Ρ‚Π°ΠΊΠΆΠ΅ провСряСт Ρ‚ΠΈΠΏ счСта ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ баланс; Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ ΡΠ°ΠΌΡ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ситуации, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ withdraw ΠΈ makeCharge. ΠœΠ΅Ρ‚ΠΎΠ΄ transferFunds Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· Π±Π°Π»Π°Π½ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра AccountEJB ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ экзСмпляру. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π° этих шага Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, ΠΌΠ΅Ρ‚ΠΎΠ΄ transferFunds ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Required. Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΡˆΠ°Π³ΠΎΠ² заканчиваСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, происходит ΠΎΡ‚ΠΊΠ°Ρ‚ всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ Π±Π°Π»Π°Π½ΡΡ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ.

3 ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ бизнСс-ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π°, прСдставлСнного Π² Π½Π°ΡˆΠ΅ΠΌ простом Π±Π°Π½ΠΊΠ΅, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Duke’s Bank ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

— AccountEJB;

— CustomerEJB;

— TxEJB.

ЦСлью этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² являСтся обСспСчСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ прСдставлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: account, customer ΠΈ tx. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ столбца Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ экзСмпляра. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€ΡΠΈΡΡ‚Π΅Π½Ρ†ΠΈΡŽ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ содСрТат SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ create ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ CustomerEJB Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ INSERT.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡΠ΅ΡΡΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² ejbCreate). Π’ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ„Π°Π·Ρ‹ проСктирования ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ сСссионныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ситуации, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CustomerNotInAccountException ΠΈ IllegalAccountTypeException. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΈΡ€Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π΅Π³ΠΎ сСссионныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

4 Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы

Π€Π°ΠΉΠ»Ρ‹ EJB JAR Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1 ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы.

Π’Π°Π±Π»ΠΈΡ†Π° 1 Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² прилоТСния

Имя класса

ОписаниС

AccountsDetail

ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² ΡΠ΅Π±Π΅ состояниС экзСмпляра AccountEJB. ВозвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ getDetails ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² AccountControllerEJB ΠΈ AccountEJB.

CodedNames

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ строки, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ логичСскими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° lookup. (НапримСр: java: comp/env/ejb/account). Класс EJBGetter ссылаСтся Π½Π° ΡΡ‚ΠΈ строки.

CustomerDetails

ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² ΡΠ΅Π±Π΅ состояниС экзСмпляра CustomerEJB. ВозвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ getDetails ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² CustomerControllerEJB ΠΈ CustomerEJB.

DBHelper

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, getNextAccountId).

Debug

Π˜ΠΌΠ΅Π΅Ρ‚ простыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сообщСний ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΈ сообщСния ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π° ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΌ устройствС Π²Ρ‹Π²ΠΎΠ΄Π° J2EE-сСрвСра, Ссли ΠΎΠ½ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌverbose.

DomainUtil

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: getAccountTypes, checkAccountType ΠΈ isCreditAccount.

EJBGetter

Π˜ΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ (ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° lookup) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ домашниС интСрфСйсы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, getAccountControllerHome).

TxDetails

ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π² ΡΠ΅Π±Π΅ состояниС экзСмпляра TxEJB. ВозвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ getDetails ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² TxControllerEJB ΠΈ TxEJB.

5 Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π°Π±Π»ΠΈΡ†Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния Duke’s Bank ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ классифицирована Π² ΡΠΎΠΎΡ‚вСтствии со ΡΠ²ΠΎΠΈΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ: прСдставлСниС бизнСс-сущностСй ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

5.1 Π’Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ бизнСс-сущности

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°Π±Π»ΠΈΡ†Ρ‹ customer ΠΈ account ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ «ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ»: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько банковских счСтов, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ счСт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π­Ρ‚ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ пСрСкрСстных ссылок с ΠΈΠΌΠ΅Π½Π΅ΠΌ customer_account_xref. Π’Π°Π±Π»ΠΈΡ†Ρ‹ account ΠΈ tx ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ «ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ»: банковский счСт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ транзакция относится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ счСту.

Рисунок 3 Π’Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния Duke’s Bank

Рисунок 3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€. PK ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. FK ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ внСшний ΠΊΠ»ΡŽΡ‡, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ связанной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Tx ΡΠ²Π»ΡΠ΅Ρ‚ся сокращСниСм для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ расходованиС Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств.

5.2 Π’Π°Π±Π»ΠΈΡ†Ρ‹, содСрТащиС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡

Π­Ρ‚ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°:

— next_account_id;

— next_customer_id;

— next_tx_id.

КаТдая ΠΈΠ· ΡΡ‚ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ столбСц с ΠΈΠΌΠ΅Π½Π΅ΠΌ id. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ id ΠΏΡ€Π΅Π΄ΡΡ‚авляСт собой ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ create ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. НапримСр, ΠΏΠ΅Ρ€Π΅Π΄ созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ AccountsEJB сСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ AccountControllerEJB Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getNextAccountId класса DBHelper. ΠœΠ΅Ρ‚ΠΎΠ΄ getNextAccountId Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ id ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ next_account_id, ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ id Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ id.

6 Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ J2EE Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΡƒΠΊΠ°Π·Π°Π² Ρ€ΠΎΠ»ΠΈ бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ EJB). Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅ Ρ€ΠΎΠ»ΠΈ (BankCustomer ΠΈ BankAdmin), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ€ΠΎΠ»ΡŒΡŽ BankAdmin ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ административныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: созданиС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ счСта, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ счСта, установку ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ баланса. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Ρ€ΠΎΠ»ΡŒΡŽ BankCustomer ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пополнСния, снятия ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° срСдств, Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ список Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ счСта. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ с Ρ€Π°Π·Π½ΠΎΠΉ Ρ€ΠΎΠ»ΡŒΡŽ, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ся.

Доступ ΠΊ ΡΡ‚ΠΈΠΌ функциям ограничиваСтся для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€ΠΎΠ»ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ установки Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² CustomerControllerEJB, AccountControllerEJB ΠΈ TxControllerEJB. НапримСр, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ createAccount Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ AccountControllerEJB Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Ρ€ΠΎΠ»ΡŒ BankAdmin, Π²Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Ρ€ΠΎΠ»ΡŒ BankCustomer ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ банковскиС счСта. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ установлСнныС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² deploytool, Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ CustomerControllerEJB, AccountControllerEJB ΠΈ TxControllerEJB Π² Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΌ спискС. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ Security ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

7 ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ

ΠšΠ»ΠΈΠ΅Π½Ρ‚ J2EE-прилоТСния дСлится Π½Π° Ρ‚Ρ€ΠΈ класса: bankAdmin, EventHandle ΠΈ DataModel: ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 4.

Рисунок 4 — ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами

BankAdmin создаСт Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ EventHandle ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² EventHandle ΠΈ DataModel для Π²Ρ‹Π·ΠΎΠ²Π° обновлСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

EventHandler ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ наТатия ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, выполняСт дСйствиС Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ, создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DataModel, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° DataModel для записи Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‡Ρ‚Сния ΠΈΡ… ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ BankAdmin для обновлСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствий.

Класс DataModel ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΈΠ½Ρ‚СрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, записываСт ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ сохранСнныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° BankAdmin Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈΠ»ΠΈ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

8 Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ для доступа ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΡ‡Π΅Ρ‚Π΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ счСтами. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, URL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для доступа ΠΊ Ρ„ункциям, ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 5 ΠΏΠΎΠΊΠ°Π·Π°Π½ экран истории счСта.

Π’Π°Π±Π»ΠΈΡ†Π° 2 Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚

Ѐункция

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ URL

JSP-страницы

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ JavaBeans

Π”ΠΎΠΌΠ°ΡˆΠ½ΡΡ страница

/main

main.jsp

Π’Ρ…ΠΎΠ΄ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

/logon

/logonError

/logoff

logon.jsp

logonError.jsp

logoff.jsp

ВывСсти счСт

/accountList

accountList.jsp

ВывСсти ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ счСта

/accountHist

accountHist.jsp

AccountHistoryBean

Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ срСдств Π½Π° ΡΡ‡Π΅Ρ‚Π°Ρ…

/transferFunds

/transferAck

transferFunds.jsp

transferAck.jsp

TransferBean

Π‘Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ внСсти срСдства

/atm

/atmAck

atm.jsp

atmAck.jsp

ATMBean

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

/error

error.jsp

Рисунок 5 — Π˜ΡΡ‚ΠΎΡ€ΠΈΡ счСта

8.1 Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ проСктирования

Основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ JSP-страниц Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank являСтся прСзСнтация. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠ΅ΠΉ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Ρ… для обслуТивания JSP-страниц являСтся минимизация количСства сцСнариСв, встроСнных Π² ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этого, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π°Π΄Π°Ρ‡ динамичСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠ΅Π½Ρ‹ Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚Π΅Π³ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ JavaBeans.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank JSP-страницы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ взаимодСйствий с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Duke’s Bank ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TransferBean ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ. Однако Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ JavaBeans ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ATMBean Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ строки подтвСрТдСния согласно Π²Π²ΠΎΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° AccountHistoryBean ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ для просмотра Π΄Π°Π½Π½Ρ‹Π΅, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ шаблонов, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈ (рассмотрСны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ²), для обСспСчСния Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ внСшнСго Π²ΠΈΠ΄Π° всСх JSP-страниц. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ шаблонов состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

— template. jsp опрСдСляСт структуру ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экрана. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Π³ insert для составлСния экранной Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ· ΡΡƒΠ±ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²;

— screendefinitions. jsp опрСдСляСт субкомпонСнты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ экраном. ВсС экраны ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°Π½Π½Π΅Ρ€, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ‚Π΅Π»Π°;

— Dispatcher — сСрвлСт, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ запросы ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡ… Π² template.jsp.

НаконСц, для выполнСния управлСния ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ логичСских Ρ‚Π΅Π³Π° (iterate, equal ΠΈ notEqual) ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π΅Π³ΠΎΠ² Struts, рассмотрСнной Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ JSP-страниц.

8.2 Π¦ΠΈΠΊΠ» ΠΆΠΈΠ·Π½ΠΈ Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ BeanManager. Он ΡΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, счСта ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для извлСчСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈ создании экзСмпляра BeanManager ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ домашний интСрфСйс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ· Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ класса EJBGetter ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ экзСмпляр ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° create домашнСго интСрфСйса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это функция уровня прилоТСния, BeanManager сам создаСтся ΠΈ ΡΠΎΡ…раняСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ContextListener (см. Ρ€Π°Π·Π΄Π΅Π» ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий Ρ†ΠΈΠΊΠ»Π° ΠΆΠΈΠ·Π½ΠΈ сСрвлСта) ΠΊΠ°ΠΊ контСкст Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

public class BeanManager {

private CustomerController custctl;

private AccountController acctctl;

private TxController txctl;

public BeanManager () {

if (custctl == null) {

try {

CustomerControllerHome home =

EJBGetter.getCustomerControllerHome ();

custctl = home. create ();

} catch (RemoteException ex) {

System.out.println («…»);

} catch (CreateException ex) {

System.out.println ();

} catch (NamingException ex) {

System.out.println ();

}

}

public CustomerController getCustomerController () {

return custctl;

}

}

public final class ContextListener

implements ServletContextListener {

private ServletContext context = null;

public void contextInitialized (ServletContextEvent event) {

this.context = event. getServletContext ();

context.setAttribute («beanManager» ,

new BeanManager ());

context.log («contextInitialized ()»);

}

}

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° запроса ВсС запросы для пСрСчислСнных Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2 URL ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ dispatcher, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСализуСтся сСрвлСтом Dispatcher:

public class Dispatcher extends HttpServlet {

public void doPost (HttpServletRequest request,

HttpServletResponse response) {

String selectedScreen = request. getServletPath ();

request.setAttribute («selectedScreen», selectedScreen);

BeanManager beanManager = getServletContext ().getAttribute (

" beanManager");

if (selectedScreen.equals («/accountHist»)) {

} else if (selectedScreen.equals («/transferAck»)) {

String fromAccountId =

request.getParameter («fromAccountId»);

String toAccountId =

request.getParameter («toAccountId»);

if ((fromAccountId == null) || (toAccountId == null)) {

request.setAttribute («selectedScreen», «/error»);

request.setAttribute («errorMessage» ,

messages.getString («AccountError»));

} else {

TransferBean transferBean = new TransferBean ();

request.setAttribute («transferBean» ,

transferBean);

transferBean.setMessages (messages);

transferBean.setFromAccountId (fromAccountId);

transferBean.setToAccountId (toAccountId);

transferBean.setBeanManager (beanManager);

try {

transferBean.setTransferAmount (new

BigDecimal (request.

getParameter («transferAmount»)));

String errorMessage = transferBean. populate ();

if (errorMessage ≠ null) {

request.setAttribute («selectedScreen», «/error»);

request.setAttribute («errorMessage» ,

errorMessage);

}

} catch (NumberFormatException e) {

request.setAttribute («selectedScreen», «/error»);

request.setAttribute («errorMessage» ,

messages.getString («AmountError»));

}

}

try {

request.getRequestDispatcher («/template.jsp»).

forward (request, response);

} catch (Exception e) {

}

}

}

Когда пСрСдаСтся запрос, Dispatcher Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

1. Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈ ΡΠΎΡ…раняСт URL входящСго запроса Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ запроса selectedScreen. Π­Ρ‚ΠΎ дСлаСтся ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ URL Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, ΠΊΠΎΠ³Π΄Π° запрос пСрСнаправится Π² ΡˆΠ°Π±Π»ΠΎΠ½Π½ΡƒΡŽ страницу прилоТСния.

2. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JavaBeans ΠΈ ΡΠΎΡ…раняСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ запроса.

3. Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π²Π΅Ρ€Π΅Π½, Dispatcher ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ псСвдоним запроса Π² ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ ошибок. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JavaBeans.

4. Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ populate ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° JavaBeans. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… Π² ΡΠΎΠΎΡ‚вСтствии с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

5. ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ запрос Π² template.jsp.

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, template. jsp Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΈΠ· ΡΡƒΠ±ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Если запросом являСтся GET, субкомпонСнт Ρ‚Π΅Π»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° нСпосрСдствСнно; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° JavaBeans, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сСрвлСтом Dispatcher.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 6 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

Рисунок 6 — ВзаимодСйствиС Web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

9 Π—Π°Ρ‰ΠΈΡ‚Π° Web-рСсурсов

ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ бизнСс ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π’ J2EE-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Web-рСсурс защищаСтся ΠΎΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ доступа ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ бСзопасности ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΡƒ. Π­Ρ‚ΠΈ указания Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ бСзопасности. Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π² Ρ€ΠΎΠ»ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ бСзопасности, ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΡƒ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ заставил Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ бСзопасности, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ срСдство, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя (ΠΊΠ°ΠΊ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ АутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Web-рСсурсов), Π° Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля.

Π’ Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ прилоТСния Duke’s Bank всС пСрСчислСнныС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 18−2 URL ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ€ΠΎΠ»ΡŒΡŽ бСзопасности BankCustomer. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбя ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° рСгистрации, основанного Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ URL Web-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, являясь Π½Π΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ URL рСгистрации /logon, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π² JSP-страницу logon.jsp. Π­Ρ‚Π° страница содСрТит Ρ„ΠΎΡ€ΠΌΡƒ, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля Π²Π²ΠΎΠ΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Ρ. Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π΅ Π² Ρ€ΠΎΠ»ΡŒ бСзопасности ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, соотвСтствуСт Π»ΠΈ эта Ρ€ΠΎΠ»ΡŒ установлСнной Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ бСзопасности. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Web-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ провСрял ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ прилоТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ID ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» J2EE-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, области ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹).

2. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Ρ€ΠΎΠ»ΡŒ BankCustomer Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (см. Ρ€Π°Π·Π΄Π΅Π» J2EE-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, области ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹).

ПослС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ счСтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ извлСкаСтся ΠΈΠ· Π·Π°ΠΏΡ€ΠΎΡΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ