127
Programmēšana datortīklu vidē RTU studiju programmas “Datorsistēmas” pilnveidošana absolventu profesionālās konkurētspējas paaugstināšanai Līguma Nr. 2006/0238/VPD1/ESF/PIAA/06/APK/3.2.3.2./00 15/0007

Programmēšana datortīklu vidē

  • Upload
    dennis

  • View
    72

  • Download
    0

Embed Size (px)

DESCRIPTION

Programmēšana datortīklu vidē RTU studiju programmas “Datorsistēmas” pilnveidošana absolventu profesionālās konkurētspējas paaugstināšanai Līguma Nr. 200 6 /02 38 /VPD1/ES F /PIAA/0 6 /APK/3.2.3.2./00 15 /0007. Programmēšana datortīklu vidē. Lekciju materiāls. - PowerPoint PPT Presentation

Citation preview

Page 1: Programmēšana datortīklu vidē

Programmēšana datortīklu vidēRTU studiju programmas

“Datorsistēmas” pilnveidošanaabsolventu profesionālās konkurētspējas

paaugstināšanai

Līguma Nr.2006/0238/VPD1/ESF/PIAA/06/APK/3.2.3.2./0015/0007

Page 2: Programmēšana datortīklu vidē

Programmēšana datortīklu vidē

Pieteicējs: ass. profesore Eleonora Latiševa

Docētājs: lektors Aloizs Ratnieks

Rīgas Tehniskā universitāteDatorzinātnes un Informācijas Tehnoloģijas fakultāte Informātikas un Programmēšanas katedra

Lekciju materiāls

Page 3: Programmēšana datortīklu vidē

Tēmas • IEVADS: tehnoloģijas J2EE priekšrocības, arhitektūra MVC,

lietojumprogrammas J2EE līmeņi, tehnologijas J2EE interfeisi.• TEHNOLOĢIJA JAVA SERVLET: servleta funkcijas, klienta

un servera mijiedarbība, klienta pieprasījumu apkalpošana, servleta dzīves cikls, Multi – MIME tipi, seansa vadība, pieprasījumu dispetčerizācija.

• TEHNOLOĢIJA JAVA SERVER PAGES: komentāri, direktīvas, definīcijas, skriptleti, izteiksmes, darbības, kļūdu apstrāde, lietotāja tagu bibliotēkas, tagu bibliotēkasa deskriptors.

• TEHNOLOĢIJA ENTERPRIZE JAVABEANS: seansu un objektu komponenti, komponentu dzīves cikls, attālināta metožu izsaukšana (Remote Method Invocation).

• INTEGRĒTĀS IZSTRĀDES VIDES: Borland JBuilder, IBM WebSphere.

Page 4: Programmēšana datortīklu vidē

IEVADS(1)Tehnoloģijas J2EE priekšrocības:• vienkārša pielikumu mēroga izmainīšana

atkarībā no pieprasījuma;• viegla integrācija ar esošām informācijas

sistēmām;• elastīgs drošības modelis;• serveru un komponentu brīva izvēle;• vienkārša arhitektūra un izstrādes modelis,

kurš dod iespēju noteikt uzvešanos pielikuma piegādes laikā un atbalsta darba dalīšanu.

Page 5: Programmēšana datortīklu vidē

IEVADS(2)

Page 6: Programmēšana datortīklu vidē

IEVADS(3)

Lietojumprogrammas J2EE līmeni:• klientu līmenis;

• Web līmenis;

• biznesa līmenis;

• datu līmenis.

Page 7: Programmēšana datortīklu vidē

IEVADS(4)

Tehnologijas J2EE interfeisi:• JDBC - darbam ar datu bāzēm;• Java Transaction API - transakciju vadībai;• Java Naming and Directory Interface (JNDI) -

dažādu objektu meklēšanai;• Java Message Service(JMS) - ziņojumu

sūtīšanai un saņemšanai;• JavaMail - pasta ziņojumu sūtīšanai un

saņemšanai;

• JavaIDL - mijiedarbībai ar CORBA dienestiem.

Page 8: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (1)

Servleta funkcijas. Servleti tika radīti, lai paplašinātu Web serveru iespējas. Tie organizē klienta un servera mijiedarbību, apstrādā klientu pieprasījumus,vada seansu un pieprasījumu dispetčerizāciju, izpilda ievadītu datu pārbaudi un citas funkcijas. Servleta izpildes beigu posmā tas ģenerē atbildi pārlūkprogrammai.

Page 9: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (2)

Klienta un servera mijiedarbība. Pēc pieprasījuma saņemšanas servletu konteineris izsauc metodi service(), kura noskaidro pieprasījuma tipu un izsauc metodi doGet() GET pieprasījuma gadījumā un metodi doPost() POST pieprasījuma gadījumā. Šo metožu pirmais HttpServletRequest tipa parametrs satur visu informāciju par klienta pieprasījumu, bet otrais HttpServletResponse tipa parametrs ir paredzēts atbildes izvietošanai, kura tiks pārraidīta pārlūkprogrammai (klientam).

Page 10: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (3)

Interfeisa Servlet metode service. Metode service() tiek izsaukta katram pieprasījumam:public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;Klasē HttpServlet šī metode realizēta kā dispetčeris, kurš atkarībā

no pieprasījuma tipa izsauc vienu speciālu metodi:• doGet – GET pieprasījumam;• doPost – POST pieprasījumam;• doPut – PUT pieprasījumam;• doDelete – DELETE pieprasījumam.Servlets var izpildīt dažas metodes service() vienlaicīgi.

Page 11: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (4)

Klienta pieprasījumu apkalpošana. Lai apkalpotu klienta pieprasījumu teorētiski var pārlādēt metodi service(), bet ir ieteikts pārlādēt metodi doGet(), vai metodi doPost(), vai abas šīs metodes. Dažos gadījumos ir vienādi jāapstrādā POST un GET pieprasījumi. Šajā gadījumā ir jāizsauc metodi doGet no metodes doPost vai otrādi:

protected void doPost(httpServletRequest req, HttpServletResponse res)

throws ServletEXception, IOException {doGet(req, res); }

Page 12: Programmēšana datortīklu vidē

TEXNOLOĢIJA JAVA SERVLET (5)

Atbildes pārraidīšana klientam. Lai pārraidītu atbildi klientam, var ģenerēt HTML lappusi un izvietot to tieši izejas plūsmā. Atbildes pārraidīšanai var izmantot plūsmu ServletOutputStream, kuru var izveidot veidā:

ServletOutputStream out = res.getOutputStream();

vai plūsmu PrintWriter, kuru var izveidot veidā:

PrintWriter out = response.getWriter();

Izmantojot iegūto atsauci, HTML lappusi var izvietot izejas plūsmā: out.println(“<HTML><HEAD><TITLE>”); ...Pēc lappuses izvietošanas izejas plūsmā PrintWriter, to ir jāaizver: out.close();

Page 13: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (6)

Vienkārša servleta piemērs.import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloServlet extends HTTPServlet { public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException { PrintWriter out = null; res.setContentType(“text/htnl”); out = res.getWriter(); out.println(“<html>”); out.println(“<head><title>Sample</title></head>”); out.println(“<body>”); out.println(“Hello World!”); out.println(“</body>”); out.println(“</html>”);} }

Page 14: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (7)Multi – MIME tipi. Daudzmērķīgs pasta paplašinājumu

Internet protokols (Multipurpose Internet Mail Extension – MIME) tiek izmantots lai pārsūtītu binārus un multimedia datus un datus, kas sastāv no dažādām daļām, kas ir attēlotas dažādos formātos. Web pārlūks izmanto MIME – tipus, lai noskaidrotu datu attēlošanas veidu. Pirms atbildes izvietošanas izejas plūsmā ir jānorāda atbildes MIME – tipu veidā:

response.setContentType(“text/html”);

Page 15: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET(8)

Dažu dokumentu MIME – tipi: • teksts vai HTML fails – text/html;• pasta ziņojums vai ziņas – text/plain;• attēls fofmātā gif – Application/gif;• worda dokuments – Application/msword;• mūzikas faili MIDI – audio/midi;• nezināmais tips,baitu plūsma – Application /octed –

stream.

Page 16: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (9)Servleta dzīves cikls. Pirms pirmā pieprasījuma

apstrādes serveris izsauc interfeisa Servlet metodi init():

Public void init(ServletConfig config)

throws ServletException {...}

Klase HttpServlet satur šīs metodes realizāciju, kas der vienkāršu servletu vairākumam: tā saglabā informāciju par servleta konfigurāciju un apstiprina inicializācijas faktu darba protokolā. Pēc servleta inicializācijas tas ir gatavs apkalpot klienta pieprasījumus. Metode service() tiek izsaukta katra pieprasījuma apkalpošanai. Lai atbrīvotu resursus pēc pieprasījuma apkalpošanas, tiek izsaukta metode public void destroy().

Page 17: Programmēšana datortīklu vidē

TEHNOLOGIJA JAVA SERVLET (10)

Interfeis ServletConfig. Metodes init() parametru ServletConfig piedāvā servletu konteineris pēc servleta klases apstrādes. Ar metodi

ServletConfig sc = getServletConfig();

var saņemt atsauci, kas norāda uz interfeisa ServletConfig realizācijas objektu. Ar šīs atsauces palīdzību var saņemt informāciju par servleta inicializācijas parametriem un piekļūt pie objekta ServletContext:

• String s = sc.getInitParameter(String param) ;

• ServletContext cont = sc.getServletContext();

Page 18: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (11)

Metode init(). Jā ir nepieciešams nodibināt sakarus ar datu bāzi, izveidot jaunu objektu seansa laikā, sameklēt objektu nosaukumu dienestā un t.t., metodi init() var pārlādēt. Šajā gadījumā servleta metodes init() pašā sākumā ir jāizsauc metodi super.init(config). Atšķirībā no metodes service(), metodes init() sinhronizācijas jautājumi nav būtiski, tāpēc ka serveris izsauc metodi init() pirms servleta izmantošanas.

Visi servleti parasti tiek izpildīti daudzplūsmu vidē. Ja tas nav vēlams, servleti var realizēt arī interfeisu SingleThreadModel. Šajā gadījumā serveris nevarēs iedarbināt vairākas metodes service() plūsmas.

Page 19: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (12)

Seansa vadība Protokols HTTP nesaglabā savu stāvokli. Tāpēc Web serverim nav jāsaglabā informācija par iepriekšējiem pieprasījumiem. Bet dažos gadījumos, piemēram komercijas lietojumprogrammās, ir jāglabā informācija par iepriekšējiem pieprasījumiem. Pretējā gadījumā pircējam būtu jāievada savs loģiskais vārds un parole pirms katra pieprasījuma, ja pieprasījuma garums pārsniedz vienas lappuses garumu.

Par seansu sauc viena lietotāja pieprasījumu secību, kas tika pārraidīta no tās pat pārlūkprogrammas.

Page 20: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (13)

Seansa vadības līdzekļi Lai saglabātu seansa stāvokli, var izmantot sekojošus līdzekļus:

• formas noslēptus laukus;• URL modifikāciju;• nemainīgus cookies;• seansu kontroles API.Noslēptu lauku izmantošanas gadījumā servlets var ierakstīt

informāciju par seansa stāvokli Web – lappusē , kura tiks atgriezta klientam pēc iepriekšējā pieprasījuma apstrādes. Kad lietotājs pārraida nākošo pieprasījumu jaunā Web – lappusē, visa formas informācija, ieskaitot noslēptos laukus, tiek pārraidīta serverim.

Page 21: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (14)

Seansu vadības līdzekli Iepriekšējā paņēmiena trūkums: lietotājs var apskatīt lappuses kodu un noskaidrot informāciju, kas ir ierakstīta noslēptos laukos.

URL modifikācijas gadījumā servlets papildina visu hiperatsauču pieprasījumus, kur lietotājs var izdarīt peles klikšķi, ar parametriem. Piemēram, lietotājam var nozīmēt identifikācijas numuru 673, papildinot hiperatsauču URL ar parametru ID= 673:

http://myServer/servlets/app?ID=673&...

Šī panēmiena trūkumi: • Lietotājs var apskatīt UTL; • Pieprasījuma GET garums ir ierobežots.

Page 22: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (15)

Nemainīgie cookies Cookies – tie ir nelieli tekstveida informācijas bloki, kurus Web – serveris pārraida pārlūkam, bet pārlūks atgriež tos neizmainītā veidā serverim, kad apmeklē to pašu Web – saitu vai domenu. Neizmainītais cookies liecina par to, ka tas pieder iepriekš reģistrētām lietotājam un serveris atļauj tā piekļūšanu neuzrādot reģistrācijas vārdu un paroli. Cookies neapdraud sistēmas drošību, bet tie ievērojami apdraud informācijas konfidencialitāti. Tāpēc cookies

nedrīkst izmantot slepenai informācijai.

Page 23: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (16)

Nemainīgie cookies Izveidot cookie var ar konstruktoruCookie cookie = new Cookie(“nosaukums”,“teksts”);

Lai papildinātu atbildes virsrakstu ar cookie, vispirms jāpapildina atbilde ar cookie izmantojot operatoru

response.addCookie(cookie);

un tikai pēc tam atbildē var izvietot datus. Fragmenta piemērs:res.addCookie(new Cookie(“c1”,“ My first cookie”));

res.addCookie(new Cookie(“c2”, “My second cookie”));

PrintWriter out = res.getWriter();

0ut.println(“<html>”); ...

Page 24: Programmēšana datortīklu vidē

TEXNOLOĢIJA JAVA SERVLET (17)Nemainīģie cookies Lai saņemtu informāciju par cookie,

no sākuma ir jāizveido visu cookie masīvu: Cookie [] cookies = request.getCookies(); Pēc tam var saņemt cookie nosaukumu un tā vērtību ar

indeksa palīdzību:For(int i = ; i < cookies.length; i++) { String name = cookies[i].getName(); String value = cookies[i].getValue();} Cookies trūkumi: • Dažas pārlūkprogrammas neatbalsta Cookie;• Lai neapdraudētu informācijas konfidencialitāti, daži lietotāji

aizliedz cookies izmantošanu.

Page 25: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (18)

Seansu kontroles API Seansu kontroles API ir realizēts interfeisā HttpSession. Sesijas organizācijai šis interfeis izmanto scookie vai URL modifikāciju. URL modifikācija tiek izmantota, kad pārlūks neatbalsta cookies vai tie ir aizliegti. Interfeisa HttpSession izmantošanas gadījumā programmētājam nav jāiedziļinās šī mehanisma sīkumos. Sesiju var izveidot ar operatoru:

HttpSession session = request.getSession(true);

Pēc sesijas objekta izveidošanas tajā var ierakstīt informāciju ar metodi setAttribute(String, Object), nolasīt informāciju ar metodi getAttribute(String), kura dod atpakaļ null, ja neeksistē objekts ar tādu nosaukumu.

Page 26: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (19)

Seansu kontroles API Saņemt visu parametru nosaukumus var ar metodi getAttributeNames(). Metode getId() dod atpakaļ unikālo tekošā seansa identifikatoru. Metode getServletContext() dod atpakaļ kontekstu, kuram pieder tekošais seans. Metode setMaxInactiveInterval(int) uzdod maksimālo laiku sekundēs starp klienta pieprasījumiem, pēc kura servletu konteinerim ir jāaizver tekošais seans. Metode invalidate() aizver seansu un atbrīvo visus saistītos ar seansu objektus.

Page 27: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (20)

. Pieprasījumu dispetčerizācija Parasti pieprasījums tiek pārraidīts servletam, tāpēc ka pieprasījuma parametru pārbaudei un bean – komponentu iestatīšanai jāizmanto programmēšanas līdzekļus, kurus ērtāk izmantot servletā. Pēc tam pieprasījums tiek pāradresēts JSP lappusei. Tā atvieglo HTML atbildes ģenerāciju. Bet JSP lappusei atbilst vienīgs rezultējošs priekšstats. Tāpēc dažāda tipa pieprasījumus ir jāpāradresē atbilstošām JSP lappusēm. Pieprasījumu pāradresēšanai ir paredzēta interfeisa RequestDispatcher metode forward. RequestDispatcher objekta atsauci var saņemt ar metodes getRequestDispatcher() palīdzību.

Page 28: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (21)

Pieprasījumu dispetčerizācija Metode getRequestDispatcher() ir kā objektā

ServletContext, tā arī objektā ServletRequest.

Šīs metodes atšķirās ar to,ka metodei ServletContext.getRequestDispatcher() ir jānorāda maršruts attiecīgi konteksta saknes katalogam,bet metodei ServletRequest.getRequestDispatcher() ir jānorāda maršruts attiecīgi tekošā pieprasījuma saknes katalogam. Piemērs: Ja servletTest ir definēts veidā:

public class servletTest extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{

Page 29: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (22)

Pieprasījumu dispetčerizācija Pēc dažu darbību izpildes mēs varam pāradresēt pieprasījumu citam servletam vai JSP lappusei:

ServletContext sc = this.getServletContext(); RequestDispatcer rd =

sc.getRequestDispatcher(“/jspFile.jsp”);

If(rd != null){

try{ rd.forvard(req, res); }

catch(Exception e){//iznēmuma apstrāde}

Interfeisā RequestDispatcher ir vēl viena ļoti lietderīga metode

– include(). Šī metode dod iespēju iekļaut atbildē resursa

kontekstu ( servletu, JSP – lappusi, HTML – failu).

Page 30: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (23)

Pieprasījumu dispetčerizācija Piemērs: iekļaut servletā JavaScript scenāriju, kas ir izvietots ārējā failā.

ServletContext sc = this.getServletContext();

RequestDispatcher rd =

sc.getRequestDispatcher(“/javascriptFile.js”);

If(rd != null) {

try{rd.include(req, res);}

catch(Exception e){System.out.

ptintln(“Exception: “+e.getMessage());

}

}

Page 31: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (24)

Pieprasījumu dispetčerizācija Piemērs: no viena servleta izsaukt citu servletu ar parametru nodošanu.

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SourceServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse rezult) throws ServletException,IOEsception { request.getSession().setAttribute( “rezultString”, “Hello, World!”); getServletContext().getRequestDispatcher( “/servlet/DestServlet”).forward(request,result); }}

Page 32: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (25)

Pieprasījumu dispetčerizācija Izsaucamais servlets:import java .io.*;import javax.servlet.*;import javax.servlet.http.*;public class DestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out. Println(“<html><head>” + “<title> Target Servlet </title></head>” + “<body bgcolor = #fff1df>” + “<h1> Called Servlet </h1>” + request.getSession().getAttribute(“rezultString”) + “</body></html>”); out.close(); } }

Page 33: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVA SERVLET (26)

Pieprasījumu dispetčerizācija Iepriekšējā piemēra izpildes rezultāts:

Called Servlet Hello, World !

Parametru nodošanai var izmantot konstrukciju: session.setAttribute(“Name”, “Value”);

Bet parametra saņemšanai var izmantot konstrukciju:HttpSession session = request.getSession();String value = session.getAttribute(“Name”);

Page 34: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (1)

JavaServer Pages raksturojums JSP lappuses izskatās kā HTML lappuses, kas ir papildinātas ar jauniem tagiem, kuros tiek izvietoti dinamiski dati. Pēc JSP lappuses kompilācijas tiek iegūts servlets, kas ģenerē HTML atbildi klientam. Šīs atbildes dinamisko datu kpmplekts ir atkarīgs no konkrētā pieprasījuma.

Page 35: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES(2)

JSP tagu saraksts

• <! - - HTML komentārs [<% = izteiksme %>] - - >• <% - - JSP komentārs - - %>• <%@ direktīva %>• <%! definīcija %>• <% skriptlets %>• <%= izteiksme %>• <jsp:darbība />

HTML komentārus klienti redz kā HTML tekstu.

JSP komentārs nav redzams HTML lappusē.

Page 36: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (3)Direktīvas Direktīvas ir ziņojumi JSP konteinerim. Tās var ietvert

dažus parametrus. Piemērs:<%@ page• [ language = “java” ]

• [ extends = “klases nosaukums” ] • [ import = “resurs” ]• [ session = “false” vai “true” ]• [ buffer = “none” vai “izmērs kb” ]• [ autoFlush = “false” vai “true” ]• [ isThreadSafe = “false” vai “true” ]• [ info = “informācija” ]• [ errorPage = “ziņojuma lappuses URL” ]• [ isErrorPage = “false” vai “true” ]• [ contentType = “satura tips” ]• % >

Page 37: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (4)

Direktīvas Iekļaut statiskus datus LSP lappusē var ar direktīvu:

<%@ include file = “Iekļaujamas lappuses URL” %>

Pievienot tagu biblioteku var ar direktīvu:

<%@ taglib uri = “tagu deskriptoru bibliotekas faila izvietošanas vieta” prefix = “tagu deskriptoru bibliotekas prefiks” %>

Šis prefiks ir jānorāda pirms jebkura taga nosaukuma, kas ir definēts tagu deskriptoru bibliotekas failā TLD (tag libraru descriptor). Piemēram, ja failā TLD ir definēts tags ar nosaukumu tag1 un parametra prefix vērtība ir test, tad HTML failā ir jāizmanto taga nosaukums test:tag1. Šo taga nosaukumu var izmantot vienkārši veidā <test:tag1/> vai veidā: <test:tag1> Patvaļīgs JSP – kods </ test:tag1>, ja tags ir definēts kā konteineris, kurš atļauj izmantot taga ķermeni. Direktīvas neko neizvada plūsmā OUT.

Page 38: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (5)

Definīcijas Definīcijās tiek definētas metodes un mainīgie, kas turpmāk tiks izmantoti JSP lappusē. Definīciju piemēri:

<%! int i = 42; %>

<%! public int add(int x, int y)

{ return x + y ; } %>

Definīcijas neko neizvada plūsmā out.

Page 39: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (6)Skriptleti Skriptleti var ietvert jebkuru koda fragmentu, kas

atbilst valodai, kas tika norādīta direktīvā language. Tekstu, HTML – tagus un JSP – elementus nedrīkst izvietot skriptletos. Piemērs:

<% if(Calendar.getInstance().getCalendar(). AM_PM == Calendar. AM) { %> Labrīt! <% } else { %> Labvakar! <% } %> Skriptletu fragmentiem, apvienotiem norādītajā secībā, ir

jāizveido pareizā programma. Ja lietotājs vēlās izmantot simbolu secību %> skriptleta iekšpusē, bet nevis kā nobeiguma tagu, tad viņam ir jāizmanto simbolu secība %\>.

Page 40: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (7)

Izteiksmes Izteiksmes tiek izmantotas, lai izvietotu aprēķinātās vērtības tieši izvades plūsmā. Pirms izvietošanas plūsmā aprēķinātās vērtības tiek pārveidotas tekstveida rindā. Ja vērtību nav iespējams pārveidot tekstveida rindā, tiek ģenerēts izņēmums ClassCastEXception. Izteiksmes izmantošanas piemērs:

Tagadējais laiks: <% = new java.util.Date() %>

Page 41: Programmēšana datortīklu vidē

TEHNOLOGIJA JAVASERVER PAGES (8)

Darbības JSP darbības ietver failu dinamisku iestarpināšanu, ievadītu parametru pārbaudi ar komponentu JavaBeans palīdzību, pieprasījumu pāradresēšanu un citas darbības. Darbību sintakse balstās uz XML valodas. Darbību tagu saraksts:

• < jsp : useBeans >

• < jsp : getProperty >

• < jsp : setProperty >

• < jsp : include >

• < jsp : forward >

• < jsp : plugin >

Page 42: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (9)

Darbība < jsp : useBean > Specifikācijā JavaBeans komponents (Bean) ir definēts kā atkārtoti izmantojams programmatūras komponents, kuru var vadīt ar integrētās vides instrumentiem. Klasei, kura tiks izmantota kā bean – komponents, ir jāatbilst sekojošām prasībām:

• klases konstruktorā nedrīkst izmantot parametrus;

• Klasē nedrīkst izmantot mainīgos, definētus ar atslēgvārdu public;

• Klases mainīgā nosaukums jāsāk ar mazo burtu;

• Lai piekļūtu pie vērtībām, kas tiek glabātas klasē, jāizmanto metodes getXxx() (vai isXxx()) un setXxx(). Šajos metožu nosaukumos mainīgā nosaukums jāsāk ar lielo alfabēta burtu.

Page 43: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (10)

Darbība <jsp:useBean> Piemērs: dota java klase UserInfo.

package jsparbeanparametrasanemsanu;

public class UserInfo {

private String name = “Ozols”;

public String getName() {

return name;

}

}

Jāizveido JSP lappuse, lai saņemtu klases UserInfo lauka name vērtību.

Page 44: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (11)

Darbība <jsp:useBeans> Saņemt lauka name vērtību.<html><head><jsp:useBean id = “user” scope = “request” class = “jsparbeanparametrasanemsanu.UserInfo”/><title> JSP ar Bean parametra saņemšanu</title></head><body> bgcolor = “ffffff” ><h2><jsp:getProperty name = “user” property = “name” /></h2></body></html>

Page 45: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (12)

Darbībā <jsp:useBean> Parametrs id = “user” norāda bean

komponenta nosaukumu JSP – lappusē, līdzīgi tam, kā faila mainīgais norāda to failu, no kura tiks nolasīta vai kurā tiks ierakstīta informācija. Ja Bean komponents jau bija izveidots ar citu tagu <jsp:useBean>, tad id vērtībai ir jāsakrīt ar to vērtību, kas tika izmantota pirmajā tagā. Parametrs scope = “[page] | [request] | [session] | [ application]” norāda redzamības apgabalu, kurā eksistē bean komponents un kurā ir pieejama parametra id vērtība. Pēc noklusēšanas – page. Parametrs class = “pakete.klase” izveido bean – komponentu ar vārdu new un klases konstruktoru. Papildus tagā <jsp:useBean> var izmantot sekojošus parametrus:

Page 46: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (13)

Taga <jsp:useBean> parametri:• type = “pakete.klase”. Ja Bean komponents jau eksistē

redzamības apgabalā, tad parametrs nozīmēs bean – komponentam datu tipu, kas atšķiras no tā, pēc kura tas tika izveidots. Par type vērtību var būt klases class superklase vai interfeis, kas tika realizēts klasē class. Ja parametrs type tiek izmantots bez parametra class vai beanName, tad Bean komponenta eksemplārs netiks izveidots;

• Class = “pakete.klase” type = “pakete.klase” izveido norādītās klases Bean eksemplāru un nozīmē tam norādīto datu tipu;

• beanName = “{ pakete.klase | <% = izteiksme %>}” type = “pakete.klase” /> ķermenis </ jsp:useBean> izveido Bean komponenta eksemplāru no klases, serializēta

šablona vai izteiksmes, kuras rezultāts ir klase vai šablons.

Page 47: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (14)

Taga <jsp:useBean> parametri Parametra beanName izmantošanas gadījumā Bean komponentu izveido metode java.bean.Beans.instantiate(). Metode pārbauda,vai klase ir šablons. Šablona gadījumā metode Beans.instantiate() nolasa serializētu formu (ar nosaukumu, līdzīgu package.class.ser) ar klašu ielādes programmu. Tādejādi darbība <jsp:useBean> tiek izmantota, lai sameklētu vai izveidotu JavaBean komponentu, kurš tiks izmantots lappusē. No sākuma Web konteineris mēģina sameklēt Bean komponentu pēc tā atribūtiem id un scope. Ja tāds bean – komponents nav sameklēts, tad konteineris izveido tā eksemplāru no klases vai serializēta šablona.

Page 48: Programmēšana datortīklu vidē

TEHNOLOGIJA JAVASERVER PAGES (15)

Darbības <jsp:useBean> raksturojums Ir jāatzīmē, ka tags

<jsp:useBean> neatbalsta Enterprize JavaBeabs. Bet lai piekļūtu pie Enterprize Java Beans ar tagu <jsp:uzeBean> var izsaukt standarta JavaBean komponentu, kurš savkārt var izsaukt Enterprize JavaBeans. Var arī izveidot tādu lietotāja tagu, kurš tieši izsauks Enterprize JavaBeans.

Lai nomainītu java klases mainīgā vērtību, JSP lappusē ir jāizmanto sekojoša konstrukcija:

<jsp:setProperty name =“klases identifikātors id”

property = “mainīga nosaukums”

value = “mainīga vērtība” />

Page 49: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (16)

Darbība <jsp:getProperty> Tags <jsp:getProperty> saņem Bean komponenta īpašību, pārveido to tekstveida rindā un izvieto to izejas plūsmā out. Piemērs:

<jsp:useBean id = “saletax” scope = “page” class = “beans.tax” /><H2>Nodoklis:<jsp:getProperty name = “saletax”Property = “curr_tax” />

</H2>

Page 50: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (17)

Darbība <jsp:setProperty> Tags <jsp:setProperty> iestata vienu vai vairākas bean komponenta īpašības. Taga <jsp:setProperty> parametra name vērtībai ir jāsakrīt ar taga <jsp:useBean> parametra id vērtību. Taga sintakse:

<jsp:setProperty name =

“bean komponenta nosaukums jsp lappusē”

{property = “*” | property = “īpašības_nosaukums”

[param = “parametra_nosaukums] |

property = “īpašības _nosaukums” value = {rinda |

<% = izteiksme %> }“

}

/>

Page 51: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (18)

Darbība <jsp:setProperty> Parametrs property = “*” saglabā visus pieprasījuma parametrus, kurus lietotājs ievadīja lappusē, atbilstošajās Bean komponenta īpašībās. Šajā gadījumā bean komponenta īpašību nosaukumiem ir jāsakrīt ar pieprasījuma parametru nosaukumiem. Parametrā property = “īpašības nosaukums” [ param = parametra nosaukums ] property nosaka Bean komponenta īpašības nosaukumu, bet param – pieprasījuma parametra nosaukumu. Ja Bean komponenta īpašībai un pieprasījuma parametram ir dažādi nosaukumi, tad ir jānorāda property un param. Ja nosaukumi ir vienādi, var norādīt tikai property. Tagā <jsp:setProperty> nedrīkst vienlaicīgi izmantot parametrus param un value.

Page 52: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (19)

Darbība <jsp:setProperty> Pieprasījuma parametriem vienmēr ir tips String. Lai saglabātu tos Bean komponenta īpašībās, String tipa vērtības ir jāpārveido citos datu tipos. Pamattipu pārveidošanas metodes:

• java.lang.Boolean.valueOf(String) • java.lang.Byte.valueOf(String)• java.lang.Character.valueOf(String)• java.lang.Double.valueOf(String)• java.lang.Integer.valueOf(String)• java.lang.Float.valueOf(String)• java.lang.Long.valueOf(String)

Page 53: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (20)

Darbība <jsp:include> Iepriekš minēta direktīva <%@ include = “iekļaujamās

lappuses URL” %> iestarpina JSP – lappusē statisku saturu translācijas posmā. Tags <jsp:include> ļauj iestarpināt lappusē dinamisku saturu. Ja iekļaujamais resurs starp pieprasījumiem izmainijās, tad nākošais pieprasījums JSP – lappusei attēlos jaunu resursa saturu. Taga sintakse:

<jsp:include page = “{relatīvs URL | <%= izteiksme %>}” flush = “true”/> Vai<jsp:include page = “{ relatīvs URL | <%= izteiksme %>}” flush = “true” > <jsp:param name = “parametra nosaukums” value = “{ parametra vērtība | <%= izteiksme %>}” />

</ jsp:include >

Iekļaujamam resursam var nosūtīt vairākus parametrus, lietojot vairākas

izteiksmes <jsp:param>

Page 54: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (21)

Darbība <jsp:forward> Tags <jsp:forvard> pāradresē

pieprasījumu HTML – failam, servletam vai citai JSP lappusei. Taga sintakse:

<jsp:forvard page = “{relativs URL | <%= izteiksme %>}” />

vai

<jsp:forward page = “{relatīvs URL | <%= izteiksme %>}” >

<jsp:param name = “parametra nosaukums”

value = “{ parametra vērtība | <%= izteiksme %>}” />

</jsp:forward>

Page 55: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (22)

Darbība <jsp:plugin> Tags <jsp:pjugin> izveido kodu, kas ielādē lietotāja pārlūkprogrammā appletu vai komponentu JavaBean. Taga piemērs:

<jsp:plugin type = applet code = “Module.class” codebase = “/html” > <jsp:params><jsp:param name = “molecule” value = “molecules/benzene.mol” /> </jsp:params> <jsp:fallback><p> nav iespējams ielādēt </p> </jsp:fallback></jsp:plugin>

Page 56: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (23)

Kļūdu apstrāde Direktīvai page ir parametrs errorPage, kas satur tās lappuses relatīvo URL, kura izvada kļūdas ziņojumu. Ja lappusē notiek izņēmums, klienta pieprasījums tiek pāradresēts atbilstošai lappusei. Kļūdas ziņojuma lappuses parametram isErrorPage ir jāpiešķir vērtība “true”. Tas nozīmē, ka mainīgais exception ir pieejams un norāda uz klases java.lang.Throwable eksemplāru. Kļūdas ziņojuma lappuses piemērs:

<%@ page isErrorPage = “true” %>

<html>

<head>

<title> kļūda </title>

</head>

<body>

Kļūda: <%= exception.toString() %>

</body>

</html>

Page 57: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (24)

Kļūdu apstrāde Fails ar kļūdas ziņojuma lappusi ir

jāizvieto pielikuma saknes katalogā. Lai citas

lappuses varētu atsaukties uz kļūdas ziņojuma

lappusi, direktīvas page parametram errorPage ir

jānorāda uz errorPage lappusi, piemēram:

<%@page errorPage = “/jspError.jsp” %>

Page 58: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (25)

Lietotāju tagu bibliotekas Lietotāju tagi dod iesoēju aizvietot sarežgītas darbības servera pusē ar vienkāršiem tagiem. Lietotāja taga izmantošanai ir nepieciešami trīs komponenti: taga apstrādes klase, kas nosaka taga rīcību, tagu bibliotekas deskriptors – Tag Library Descriptors (TLD), kas nosaka atbilstību starp tagu nosaukumiem un tagu apstrādes klasēm, un JSP fails, kurā tagu biblioteka tiek izmantota. Taga apstrādes klasei ir jārealizē interfeisu javax.servlet.jsp.tagext.Tag. Lai to panāktu, tagu apstrādes klasei ir jāpaplašina klase TagSupport vai klase BodyTagSupport. Piemērs: uzrakstīt vienkāršu tagu apstrādes klasi, kas iestarpina tekstu “Custom tag example (coreservlets.tags.ExampleTag)” taga izvietošanas vietā.

Page 59: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (26)

Lietotāju tagu bibliotekas Vienkāršas tagu apstrādes klases piemērs:

package coreservlets.tags;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;import java.io.*;public class ExampleTag extends TagSupport { public int doStartTag() { try { JspWriter out = pageContext.getOut(); out.print(“coreservlets.tags.ExampleTag”); } catch(IOException ioe) { System.out.println(“Error in ExampleTag:“ +ioe); } return(SKIP_BODY); }}

Page 60: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (27)

Lietotāju tagu bibliotekas Ja tagam neeksistē ķermenis, tagu apstrādes klasei ir jāpaplašina klase TagSupport un jāpārlādē metode doStartTag(), kura tiek izsaukta pieprasījuma laikā, ja tiek sastapts taga sākumelements. Lai ģenerētu izejas plūsmu, tiek izmantots klases JspWriter eksemplārs out. PageContext tipa laukā pageContext ir ne tikai metode getOut(), bet arī citas metodes, kas ļauj saņemt saistītas ar pieprasījumu datu struktūras. Svarīgākās no tām ir getReguest(), getResponse(), getServletContext(), un getSession().

Page 61: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (28)

Lietotāju tagu bibliotekas Sakarā ar to, ka metode

print() var ģenerēt izņēmumu IOException, to ir

jāizvieto blokā try/catch. Lai paziņotu lietotājam par

citām kļūdām, ir jādefinē, ka metode doStartTag() var

ģenerēt izņēmumu JspException un pēc tam ģenerēt

šo izņēmumu kļūdas rasšanās gadījumā. Ja tagam

neeksistē ķermenis, metodei doStartTag() ir jādot

atpakaļ konstanti SKIP_BODY. Šī konstante norāda

sistēmai ignorēt jebkuru informāciju, kas ir izvietota

starp sākuma un beigu tagiem.

Page 62: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (29)

Tagu bibliotekas deskriptors Tagu bibliotekas deskriptors tiek pierakstīts XML valodā un nosaka atbilstību starp tagu nosaukumiem un tagu apstrādes klasēm. Tagu deskriptoru bibliotekas fails satur virsrakstu, kas nekad netiek izmainīts, un tagu bibliotekas deskriptoru. Ja tagam nav parametru, tad starp sākuma <tag> un beigu </tag> deskriptora elementiem ir jānorāda čerti parametri:

• name – taga nosaukums, pirms kura jsp lappusē ir jānorāda tagu bibliotekas prefikss;

• tagclass – pilns tagu apstrādes klases nosaukums;

• info – uzdot īsu taga aprakstu;

• bodycontent – ja tagam nav ķermeņa, tad šī parametra vērtība ir EMPTY, bet tagam ar ķermeni – JSP.

Page 63: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (30)

Tagu bibliotekas deskriptors Deskriptora piemērs:<taglib><tlibversion>1.0</tlibversion><jspversion>1.1</jspversion><shortname>csajsp</shortname><info> A tag library http://www.coreservlets.com/ </info><tag> <name>example</name> <tagclass>coreservlets.tags.ExampleTag</tagclass> <info> example: insert one line of output </info> <bodycontent>EMPTY</bodycontent><! - - vēlāk definēti tagi ... - - > </taglib>

process

Page 64: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (31)

Lietotāja tagu izmantošana JSP failā

JSP – failā pirms jebkura lietotāja taga kā prefiks ir jāizmanto tā vērtība, kas tika norādīta deskriptora tagā <shortname>, bet pirms visiem lietotāja tagiem jāizvieto direktīva <%@ taglib uri = “tagu deskriptoru bibliotekas faila izvietošanas vieta” prefix = “tagu deskriptoru bibliotekas prefiks” %>. Tag Library Descriptors (TLD) faila izvietošanas vietu var norādīt ar absolūto vai relatīvo URL. Ja TLD fails ir izvietots tajā pat katalogā, kurā ir izvietots JSP – fails, var izmantot relatīvo URL.

process

Page 65: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (32)

JSP faila piemērs

<html>

<head>

<%@ taglib uri = “taglib.tld” prefix = “csajsp” %>

<title><csajsp:example/></title>

</head>

<body>

<h1><csajsp:example/>< /h1>

<csajsp:example/>

</body>

</html> process

Page 66: Programmēšana datortīklu vidē

TEHNOLOGIJA JAVASERVER PAGES (33)

Lietotāja tagi ar parametriem Lietotāja tags var ietvert neierobežotu parametru skaitu. Parametru vērtības tiek pierakstītas apostrofos. Tagu ar parametriem piemēri:

<util:iterate times = ‘4’>

<util:iterate times = ‘<%=izteiksme%>’>

Otrajā gadījumā parametra vērtība tiks aprēķināta pieprasījuma laikā. Lai lietotāja tags atbalstītu parametru, ir jāizpilda trīs darbības:

1. Jāpapildina tagu ar parametru JSP – failā.

2. Jāpapildina tagu bibliotekas atbilstošais deskriptors ar tagu <attribute>.

3. Jārealizē metode setParametra_nosaukums() tagu apstrādes klasē.

Failu pārvaldība

fai

ie

Page 67: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (34)

Lietotāja tagi ar parametriem Tagu apstrādes klase var

realizēt arī neobligātu metodi getParametra_nosaukums(), lai ieliktie tagi varētu saņemt ārējā taga parametrus. Piemērs: ja Web lappusē ir forma ar rediģēšanas laukiem, tad tie ir atkārtoti jāattēlo, ja lietotājs nepareizi aizpildīja kādu no laukiem (kopā ar kļūdas ziņojumu). Rediģēšanas laukos vēlams attēlot to tekstu, kuru iepriekš ievadīja lietotājs. No sākuma pamēģināsim atrisināt šo problēmu sekojošā veidā:

<input type = ‘text’ size = 15 name = ‘firstName’

value = ‘<%=request.getParameter(“firstName”) %>’>

Page 68: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (35)

Lietotāja tagi ar parametriem Parametram value tiks piešķirta atbilstoša redigēšanas lauka vērtība. Bet šim risinājumam ir būtisks trūkums. Ja forma tiks izmantota pirmo reizi, metode getParameter dos atpakaļ vērtību null, kura tiks izvadīta rediģēšanas laukā. Šo problēmu var atrisināt ar lietotāja tagu, kurš dod atpakaļ pieprasījuma parametru vai tukšu rindu, ja parametrs neeksistē.

Taga apstrādes klase:

package tags;

import javax.servlet.ServletRequest;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.TagSupport;

Page 69: Programmēšana datortīklu vidē

TEXNOLOĢIJA JAVASERVER PAGES (36)Lietotāja tagi ar parametriem Taga apstrādes klase:public class GetRequestParameterTag extends TagSupport { private String property; public void setProperty(String property){ this.property = property; } public int doStartTag()throws JSPException { ServletRequest req = pageContext.getRequest(); String value = req.getParameter(property); try{pageContext.getOut().print( value ==null ? “” : value); }catch(java.io.IOException ex) { throw new JspException(ex.getMessage()); } return SKIP_BODY; }}

Page 70: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (37)

Lietotāja tagi ar parametriem Tagu apstrādes klasē pirms metodes doStartTag() ir jādefinē visu parametru set – metodes. Set – metodes tiek izsauktas pirms metodes doStartTag() pirmā izsaukuma. Tagu bibliotekas deskriptoram jāizskatās veidā:

<taglib><tag><name> requestParameter </name><tagclass>tags.GetRequestParameterTag</tagclass><bodycontent>empty</bodycontent><attribute> <name>property</name> <required>true</required> <rtexprvalue>true</rtexprvalue></attribute></tag></taglib>

Page 71: Programmēšana datortīklu vidē

TEHNOLOIJA JAVASERVER PAGES (38)

Lietotāja tagi ar parametriem Iepriekšējā slaida tagā

name ir jānorāda parametra nosaukums, tagā required vērtību

true, ja parametrs ir obligāts, tagā rtexprvalue vērtību true, ja

parametra vērtību var norādīt ar JSP izteiksmi.

JSP fragmenta piemērs:<table> <tr> <td> First Name: </td> <td><input type=‘text’ size=15 name=‘firstName’ value=‘<html:requestParameter property=“firstName”/>’> </td> </tr>

Page 72: Programmēšana datortīklu vidē

TEHNOLOĢIJA JAVASERVER PAGES (39)

Lietotāja tagi ar parametriem

<tr>

<td>LastName:</td>

<td><input type=‘text’ size=15 name=‘lastName’

value=‘<html:requestParameter property=“lastName” />’>

</td>

</tr>

</table>

...

Page 73: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (1)

Ja drošības un lietojumprogrammas mēroga izmainīšanas aspekti ir ļoti būtiski, jāizmanto Enterprize JavaBeans (EJB). Tehnologija EJB izmanto protokolu RMI vai interneta protokolu Inter – ORB (RMI – IIOP) attālinātu metožu izsaukumam un nosaukumu dienestu JNDI (Java Naming and Directory Interface), lai sameklētu objektu pēc tā nosaukuma. EJB objekti tiek izpildīti EJB konteinera vidē, kas nodrošina dažādas sistēmas funkcijas: vada transakcijas, savienojumu pūlu, datu aizsardzību un citas funkcijas. Atšķirībā no komponenta JB, komponents EJB tiek izvietots failu grupā. Šo failu mijiedarbība nodrošina vajadzīgo funkcionēšanu.

Page 74: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (2)

Klases EJB struktūra ir atkarīga no komponenta tipa un uzdevuma. Klase, kas realizē EJB tipa session, satur biznes- metodes, kas ir saistītas ar procesiem. Klase, kas realizē EJB tipa entity bean, satur metodes, kas aizvieto datu bāzes datus. Klase, kas realizē EJB tipa message – driven bean, satur biznes- metodes, kas dot iespēju apstrādāt asinhronus ziņojumus.Klients nekad neizsauc tieši EJB metodes. Klienta mijiedarbība ar EJB notiek ar atbilstošiem interfeisiem. Piemēram, remote interfeisā ir definētas visas komponenta biznesmetodes, kuras var izsaukt klients. Pēc remote interfeisa metodes izsaukšanas EJB konteineris automātiski izveido remote EJB objektu, kas satur nepieciešamās funkcijas un EJB realizācijas klases visu biznesa metožu kopijas, kuras apstrādā klienta pieprasījumu.

Page 75: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (3)

Sakarā ar to, ka remote EJB objekts, kuru ģenerēja konteineris, satur sistēmas funkcijas, programmētājam nav jārupējās par transakciju vadību, datu aizsardzību un citām sistēmas funkcijām. Interfeisā Home ir definētas EJB objektu izveidošanas, meklēšanas un iznīcināšanas metodes. Šo interfeisu realizē home objekti, kuri ir EJB konteinera daļa un kurus automātiski ģenerē konteineris. Home objekts ir EJB objektu fabrikas nosaukums (EJB objekt factory), kurš piedāvā klientam atsauci uz remote EJB objektu. (Lai izsauktu EJB komponenta metodi, klientam ir jāzina, kur atrodās remote EJB objekts). Papildus home objekts dot iespēju konteineram saņemt EJB komponenta metadatus ar interfeisu javax.ejb.EJBMetaData, kad lietojums tiek izvietots serverī.

Page 76: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (4)

Lai palielinātu lietojuma ātrdarbību gadījumos, kad klienti un komponenti ir izvietoti vienā konteinera robežās un izmanto vienu un to pašu java virtuālo mašīnu, specifikācija EJB 2.0 tika papildināta ar lokālu interfeisu. Lokāla interfeisa izmantošanas gadījumā home interfeis tiek aizvietots ar local home interfeisu, objekts home – ar local home objektu.

Page 77: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (5)

Katram EJB komponenta tipam eksistē arī standartie interfeisi, kas atbilst komponenta īpašībām:

• interfeis javax.ejb.sessionBean - komponentam session bean;

• Interfeis javax.ejb.ēntityBean – komponentam entity bean;

• Interfeis javax.ejb.MessageDrivenBean – komponentam message – driven bean.

Ja EJB komponenta nosaukums ir Calculator, tad tā remote interfeis tiek definēts failā Calculator.java, home interfeis – failā CalculatorHome.java, EJB realizācijas klase – failā CalculatorBean.java vai CalculatorEJB.java, izvietojuma deskriptora nosaukums vienmēr ir ejb – jar.xml. Tādejādi, EJB komponents vienmēr tiek izvietots četros failos.

Page 78: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (6)

Home interfeis tiek izmantots, lai sameklētu vai izveidotu EJB komponenta eksemplāru, remote interfeisā tiek definētas komponenta biznesmetodes, EJB realizācijas klasē tiek izvietotas biznesmetodes (remote interfeisa realizācija). Izvietojuma deskriptorā tiek aprakstīta lietojumprogrammas nepieciešamā konfigurācija. Ja tiek izmantotas remote interfeisa metodes, parametri tiek nodoti pēc vērtības, bet home interfeisa metožu izmantošanas gadījumā - pēc atsauces.

Objektus EJB un objektus home automātiski ģenerē konteinera instrumentālie līdzekļi un tie ir konteinera daļa.

Page 79: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (7)

Seansu komponenti Komponents Session Enterprise JavaBean ir klienta pārstāvis lietojumprogrammu serverī. Tas realizē biznesa loģiku, algoritmus un procesus, kas ir raksturīgi klientam. EJB konteineris garantē, ka ja viens klients izsauc EJB eksemplāra kādu metodi, tad neviens cits klients nevarēs sadarboties ar to pašu eksemplāru.

Tiek izmantoti divi komponenta session bean tipi:

• Stateless session beans;

• Stateful session beans.

Komponents Stateless session bean nesaglabā informāciju par savu stāvokli, bet komponents Stateful session bean var saglabāt informāciju par savu stāvokli, kamēr eksistē seans.

Page 80: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (8)

Komponenta session bean izsaukšana Platforma J2EE nodrošina izvietojuma caurspīdīgumu, tas ir lietojumam nav svarīgi, kur konkrēti izvietots objekts. Objekta meklēšanai interneta tīklā protokola RMI – IIOP izmantošanas gadījumā klienti izmanto JNDI, CORBA klienti – CORBA Naming Service (COS Naming). Abos gadījumos komponenta EJB izsaukšanai ir jāizpilda darbības sekojošā secībā:

1. Objekta meklēšana;

2. Objekta EJB izveidošana ar objekta home palīdzību;

3. Objekta EJB biznesmetodes izsaukšana;

4. Objekta EJB iznīcināšana.

Page 81: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (9)

Objekta meklēšana

Lai būtu iespējams sameklēt EJB objektus vai home objektus interneta tīklā, izvietojumu deskriptorā tos ir jāsaista ar īsu, saprotamu nosaukumu, kuru izmantojot J2EE platforma var sameklēt objekta fizisko izvietojumu.

Page 82: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (10)

Komponenta Session bean realizācijas klases standartās metodes Komponenta Session bean standartās metodes izsauc EJB konteineris. Metode setSessionContext (SessionContext ctx) saista komponenta eksemplāru ar seansa kontekstu. Metodi izmanto pirms komponenta eksemplāra inicializācijas. Metode ejbCreate() inicializē komponenta eksemplāru. Komponentā Stateless session bean var definēt tikai vienu metodi ejbCreate() bez parametru. Metodes ejbActivate() un ejbPassivate() komponentā Stateless session bean netiek izmantotas, bet komponenta realizācijas klasē ir jādefinē tukšas metodes. Metodi ejbRemove() konteineris izsauc pirms komponenta iznīcināšanas. Tā atbrīvo visus resursus, kurus izmantoja komponents. Komponents eksistē tikai klienta seansa laikā, kamēr ir atvērts pārlūkprogrammas logs.

Page 83: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (11)

Statelesses session bean komponenta dzīves cikls Par komponentu izveidošanu un iznīcināšanu atbild konteineris. Tas var izveidot vai iznīcināt Stateless session bean komponentu jebkurā brīdī, un tas nav saistīts ar klienta rīcību. Komponenta dzīves cikla sākumā konteineris izsauc metodi newInstance(), kura izveido jaunu komponenta eksemplāru. Pēc tam konteineris izsauc metodes setSessionContext() un elbCreate(). Dzīves cikla beigu posmā konteineris izsauc metodi ejbRemove().

Page 84: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (12)

Piemērs Izveidot kalkulatoru divu skaitļu saskaitīšanai, izmantojot Stateless session bean komponentu. Realizācijas klase CalculatorBean:

package j2eebook.ejb;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import java.rmi.RemoteException;

import javax.ejb.EJBException;

import javax.ejb.CreateException;

public class CalculatorBean implements SessionBean {

private SessionContext ctx;

Page 85: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (13)

public void setSessionContext(SessionContext context) throws

RemoteException, EJBException{

ctx = context;

}

public void ejbActivate() throws EJBException{}

public void ejbPasswivate() throws EJBException{}

public void ejbRemove() throws EJBException{}

public void ejbCreate() throws CreateException, EJBException {}

public float addition(float itemOne, float itemTwo) {

return itemOne + itemTwo;

}

}

Page 86: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (14)

Komponentam stateless session bean konstruktors nav nepieciešams. kad izveidot un iznīcināt komponenta eksemplāru, nolemj konteineris. Tas nav saistīts ar metožu create() un remove() izsaukumiem. Metodi setSessionContext() izsauc konteineris, lai saistītu komponentu ar seansa kontekstu. Seansa konteksts (session context) dot iespēju komponentam sadarboties ar konteineri, lai piekļūtu pie sistēmas funkcijām. Realizācijas klasei ir jārealizē visas biznes-metodes, kas ir definētas interfeisā remote.

Page 87: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (15)

Inerfeis CalculatorHome:

package j2eebook.ejb;

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

import javax.ejb.EJBException;

import java.rmi.RemoteException;

public interface CalculatorHome extends EJBHome {

Calculator create() throws CreateException,

EJBException, RemoteException;

}

Page 88: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (16)

Lai inicializētu EJB komponenta eksemplāru, klientam jāizmanto home interfeiss. Home interfeisā ir tikai metode create(). Ar šo metodi klients var piekļūt metodei ejbCreate(), kas pieder realizācijas klasei. Klientam nav iespējams tieši piekļūt komponenta eksemplāram. Komponenta eksemplāra inicializāciju var veikt tikai ar home interfeisa metodi create().

Page 89: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (17)

Remote interfeis Calculator

package j2eebook.ejb;

import javax.ejb.EJBobjekt;

import java.rmi.RemoteException;

import javax.ejb.EJBException;

public interface Calculator extends EJBobject{

float addition(float itemOne, float itemTwo) throws

RemoteException, EJBException;

}

Page 90: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (18)

Remote interfeisā ir jādefinē visas realizācijas klases biznesmetodes, kas ir pieejamas klientam. Klients nevar tieši izsaukt biznesmetodes, kas pieder komponenta realizācijas klasei. Tas tiek panākts ar remote interfeisa palīdzību. Visi Stateless session bean komponenti ir ekvivalenti un var apkalpot dažādus klientus. Lai palielinātu komponentu izmantošanas efektivitāti, konteineris var izveidot šo komponentu pūlu un novietot tajā dažus komponentus, kurus būs iespējams izmantot nepieciešamības gadījumā.

Page 91: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (19)

Klients komponentam CalculatorBean

package j2eebook.ejb.client;

import javax.naming.Context;

import javax.naming.InitialContext;

Import javax.rmi.portableRemoteObject;

Import j2eebook.ejb.CalculatorHome;

Import j2eebook.ejb.Calculator;

Public class CalculatorClient{

Public static void main(String[] argv) {

try {

Context initial = new InitialContext();

Object objref = initial.lookup(JNDI);

Page 92: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (20)

j2eebook.ejb.CalculatorHome home =

(j2eebook.ejb.CalculatorHome)

PortableRemoteObject.narrow(objref,

j2eebook.ejb.CalculatorHome.class);

j2eebook.ejb.Calculator aCalculator = home.create();

System.out.println(“3 + 5 =“ + aCalculator.sum(3, 5));

} catch(Exception ex){ ex.printStackTrace(); }

}

private final static String JNDI =

“j2eebook.ejb.CalculatorHome”;

}

Page 93: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (21)

Klients izpilda sekojošas darbības:

1. Nozīmē nosaukumu dienesta sākumkontekstu (tas ir katalogu struktūras sākumkontekstu sakaru nodibināšanai).

2. Sameklē komponenta EJB objektu home, kas realizē home interfeisu, izmantojot JNDI nosaukumu un home interfeisu j2eebook.ejb.CalculatorHome. Rezultātā klients saņem atsauci uz hone objektu.

3. Inicializē komponentu ar home interfeisa metodes create() palīdzību.

4. Ar remote interfeisa palīdzību izsauc biznesmetodi sum().

Page 94: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (22)

Lai pārveidotu nepieciešamā veidā objektu, kas tika saņemts ar tīkla resursu palīdzību, protokola RMI – IIOP izmantošanas gadījumā, klienta kodā jāizmanto metodi PortableRemoteObject.narrow(). Metodes pirmais parametrs – objekts, kas tika saņemts no tīkla, otrais parametrs – klase, kurā ir jāpārveido tas objekts, kas tika saņemts no tīkla.

Page 95: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (23)

Komponents Stateful session bean Komponents Stateful session bean saglabā savu stāvokli starp secīgiem izsaukumiem un dažādām transakcijām. Ja viena biznes- procesa robežās klients izsauc kādu metodi, tad metodes rezultāts tiks saglabāts un to var izmantot citu metožu izsaukumiem. Seansa stāvoklis tiek saglabāts līdz seansa pārtraukšanai vai komponenta iznīcināšanai.

Atšķiribā no stateless session bean komponentu pūla, kurā viens komponents var apkalpot ļoti daudz klientu, katrs Stateful session bean pūla komponents var apkalpot tikai viena klienta

seansu ar noteiktu pūla komponentu.

Page 96: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (24)

Komponents Stateful session bean Sakarā ar to, ka vienam komponentam var būt ļoti daudz klientu, nav iespējams uzglabāt pūlā visu klientu komponenta eksemplārus. Lai samazinātu elementu skaitu operatīvajā atmiņā, konteineris var izkraut no pūla dažus elementus un iekraut citus. Objekta Stateful session bean atsauce, kuru klients saņēma seansa sākumā, tiek saglabāta līdz seansa beigām. Klientam ir atļauts izveidot sakaru seansus ar dažādiem komponentiem. Šajā gadījumā katram komponentam tiks izveidots atsevišķs eksemplārs, un ar

katru no tiem tiks atbalstīti sakari.

Page 97: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (25)

Komponents Stateful session bean Pasivācijas procesā daži no eksemplāriem, kuri dotajā brīdī netiek izmantoti, tiek ierakstīti magnētiskajā diskā. Pasivācijas procesu ierosina konteineris, kad pūlā uzkrājās pārāk daudz Stateful session bean eksemplāru. Tādejādi eksistē divi pūli – aktīvs un pasīvs. Ir aizliegts pasivēt tos eksemplārus, kuri piedalās transakcijās, līdz transakcijas beigām. Kad klients izsauc komponenta eksemplāru, kurš bija pasivēts, konteineris to automātiski aktivizē un atjauno resursus, kuri bija atbrīvoti

pasivācijas laikā.

Page 98: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (26)

Komponenta Stateful session bean dzīves cikls

• Komponenta dzīves cikls sākās, kad klients izsauc komponenta Stateful session bean interfeisa home metodi create() ar parametriem.

• Jauna eksemplāra izveidošanai konteineris izsauc metodi newInstance(), kura dot atpakaļ atsauci uz izveidoto objektu. Jauna eksemplāra izveidošanas laikā konteineris izsauc arī metodes setSessionContext() un ejbCreate().

• Komponenta eksemplārs atrodās pūlā un gatavs apkalpot klienta pāradresētu pieprasījumu, kas satur metodes izsaukumu.

Page 99: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (27)

Komponenta Stateful session bean dzīves cikls

• Ja konteineris nolemj īslaicīgi pasīvēt eksemplāra stāvokli, tiek izsaukta metode ejbPassivate(), kura ieraksta eksemplāra stāvokli magnētiskajā diskā. Pats eksemplārs šajā gadījumā var palikt pūlā un to var izmantot cits klients.

• Objekta aktivizācijai tiek izsaukta metode ejbActivate().

• Konteineris pāradresē metodes izsaukumu noteiktam komponenta eksemplāram. Šī metode var izmainīt eksemplāra stāvokli.

• Konteineris var pasivēt eksemplāra stāvokli.

Page 100: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (28)

Komponenta Stateful session bean dzīves cikls

• Klients izsauc komponenta Stateful sassion bean interfeisa home metodi remove().

• Konteineris pārtrauc eksemplāra dzīves ciklu izsaucot metodi ejbRemove().

Page 101: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (29)

Piemērs Izveidosim kalkulātoru ar atmiņu, lai iepriekšējās operācijas rezultāts tiktu saglabāts atmiņā un to būtu iespējams izmantot nākamajā operācijā. Pieņemsim, ka komponents CalkulatorBean ir izvietots vienā un tajā pat konteinerā kopā ar komponentu stateful session bean ar nosaukumu AdvancedCalculatorBean, kuru klients izmanto, lai izsauktu componenta Calculator Bean metodes. Sakarā ar to, viena konteinera robežās lietderīgāk izmantot lokālos interfeisus, home un remote interfeisu vietā izmantosim interfeisus local home un local ar to pašu metožu sarakstu. Realizācijas klases CalculatorBean kods, kas realizē interfeisu SessionBean, ne ar ko neatšķiras no iepriekšējā

piemēra koda.

Page 102: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (30)

Local home interfeis CalculatorHome

package j2eebook.ejb;

import javax.ejb.EJBLocalHome; import javax.ejb.FinderException;

import javax.ejb.EJBException;

import javax.ejb.CreateException;

public interface CalculatorHome extends EJBLocalHome {

Calculator create() throws CreateException, EJBException;

}

Page 103: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (31)

Local interfeis Calculator

package j2eebook.ejb;

import javax.ejb.EJBLocalObject; import javax.ejb.FinderException;

public interface Calculator extends EJBLocalObject {

float addition(float itemOne, float itemTwo) throws EJBException;

}

Page 104: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (32)

Interfeisa SessionBean realizācijas klase

package j2eebook.ejb;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import java.rmi.RemoteException;

import javax.ejb.EJBException;

import javax.ejb.CreateException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

import javax.ejb.RemoteException;

Page 105: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (33)

public class AdvancedCalkulatorBean implements SessionBean {

private SessionContext ctx;

private float myResult;

private Calculator myCalculator;

static private final String calculator_ref = “calculator_ref”;

public void setSessionContext(SessionContext context) throws RemoteException, EJBException {

ctx = context;

}

public void ejbActivate() throws EJBexception {

}

public void ejbPassivate() throws EJBException {

}

Page 106: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (34)

public void ejbRemove() throws EJBException {

try {

myCalkulator.remove();

} catch (RemoteException ex) {

ex.printStackTrace();

throw new EJBException(ex.getMessage());

}

}

Page 107: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (35)

public void ejbCreate(float initValue) throws CreateException,EJBException {

myResult = initValue;

CalculatorHome home = lookup(“java:comp/env/” + calculator_ref);

myCalculator = home.create();

if (myCalculator == null) {

throw new CreateException(“Can’t lookup Calculator bean”);

}

}

Page 108: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (36)

public float addition(float item) {

myResult = myCalcilator.addition(myResult, item);

return myResult;

}

private CalkulatorHome lookup(String jndi) {

try {

Context initial = new InitialContext();

Object objref = initial.lookup(jndi);

return (CalculatorHome)PortableRemoteObject.narrow(objref, CalkulatorHome.class);

} catch (Exception ex) {

Page 109: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (37)

ex.printStackTrace();

throw new EJBException(ex.getMessage());

}

}

public void clear() {

myResult = 0;

}

}

Page 110: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (38)

Home interfeis Advanced Calculator Home

package j2eebook.ejb;

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

import javax.ejb.EJBException;

import java.rmi.RemoteException;

public interface AdvancedCalculatorHome extends EJBHome{

AdvancedCalculator create(float initValue) throws CreateException, EJBException, RemoteException;

}

Page 111: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (39)

Remote interfeis Advanced Calculator

package j2eebook.ejb;

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

import javax.ejb.EJBException;

public interface AdvancedCalculator extends EJBObject {

float addition(float item) throws RemoteException, EJBException;

void clear() throws RemoteException, EJBException;

}

Page 112: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (40)

Lietojumprogrammas izvietošana serverī Lai izvietotu lietojumprogrammu serverī, ir jāizpilda sekojošas darbības:

• Jānokompilē klases CalculatorBean.java, CalculatorHome.java, Calculator.java, AdvancedCalculatorBean.java, AdvancedCalculatorHome.java un AdvancedCalculator.java;

• jāizveido piegādes deskriptorus ejb-jar.xml, application.xml un sun-j2ee-ri.xml;

• Jāizveido tilpfailu calculator.jar, kurā jāiepako nokompilētie klašu faili un piegādes deskriptors ejb-jar.xml;

• Jaizveido tilpfailu Calculator.ear, kurā jāiepako piegādes deskriptori application.xml, sun-j2ee-ri.xml un fails calculator.jar.

Page 113: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (41)

Piegādes deskriptors ejb-jar.xml

<?xml version=“1.0”?>

<!DOCTYPE ejb-jar PUBLIC ‘-//Sun Microsystems, Inc.//DTD Enterprise Java Beans 2.0//EN’

‘http://java.sun.com/dtd/ejb-jar_2_0dtd’>

<ejb-jar>

<enterprise-beans>

<session>

<display-name></display-name>

<ejb-name>CalculatorBean</ejb-name>

<local-home>j2eebook.ejb.CalculatorHome</local-home>

<local>j2eebook.ejb.Calculator</local>

Page 114: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (42)

<ejb-class>j2eebook.ejb.CalculatorBean<ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</sassion>

<session>

<display-name></display-name>

<ejb-name>AdvancedCalculatorBean</ejb-name>

<home>j2eebook.ejb.AdvancedCalculatorHome</home>

<remote>j2eebook.ejb.AdvancedCalculator</remote>

<ejb-class>j2eebook.ejb.AdvancedCalculatorBean</ejb-class>

<session-type>Stateful</session-type>

Page 115: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (43)

<transaction-type>Container</transaction-type>

<ejb-local-ref>

<ejb-ref-name>cakculator</ejb-ref-name>

<ejb-ref-type>Session</ejb-ref-type>

<local-home>j2eebook.ejb.CalculatorHome</local-home>

<local>j2eebook.ejb.Calculator</local>

<ejb-link>CalculatorBean</ejb-link>

</ejb-local-ref>

</session>

</enterprise-beans>

</ejb-jar>

Page 116: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (44)

Piegādes deskriptors application.xml

<?xml version=“1.0”?>

<!DOCTYPE application PUBLIC “-//SunMicrosystem, Inc.//DTD J2EE Application 1.3//EN”

http://java.sun.com/dtd/application_1_3.dtd>

<application>

<display-name>ejb</display-name>

<module>

<ejb>ejb.jar</ejb>

</module>

</application>

Page 117: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (45)

Piegādes deskriptors sun-j2ee-ri.xml

<?xml version=“1.0”?>

<j2ee-ri-specific-information>

<server-name>SunEEAppServer</server-name>

<rolemapping/>

<enterprise-beans>

<module-name>ejb.jar<module-name>

<ejb>

<ejb-name>CalculatorBean</ejb-name>

<jndi-name>j2eebook.ejb.CalculatorBean</jndi-name>

</ejb>

Page 118: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (46)

<ejb>

<ejb-name>AdvancedCalculatorBean</ejb-name>

<jndi-name>j2eebook.ejb.AdvancedCalculatorHome

</jndi-name>

</ejb>

</enterprise-beans>

</j2ee-ri-specific-information>

Page 119: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (47)

Fails Calculator.ear Calculator.ear

META-INF

application.xml

sun-j2ee-ri.xml

calculator.jar

META-INF

ejb-jar.xml

j2eebook\ ejb\

AdvancedCalculator.class

AdvancedCalculatorBean.class

AdvancedCalculatorHome.class

Calculator.class

CalculatorBean.class

CalculatorHome.class

Page 120: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (48)

Komponenta AdvancedCalculatorBean klients

package j2eebook.ejb.client;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

import j2eebook.ejb.AdvancedCalculatorHomep;

import j2eebook.ejb.AdvancedCalculator;

public class CalculatorClient {

public static void main(String[] argv) {

try {

Context initial = new InitialContext();

Object objref = initial.lookup(JNDI);

Page 121: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (49)

j2eebook.ejb.AdvancedCalculatorHome home =

(j2eebook.ejb.AdvancedCalculatorHome)

PortableRemoteObject.narrow(objref,

j2eebook.ejb.AdvancedCalculatorHome.class);

float item = 0;

float result = 0;

j2eebook.ejb.AdvancedCalculator aAdvancedCalculator =

home.create(result);

result = aAdvancedCalculator.addition(3);

System.out.println(“” + item + “ + 3 = “ + result);

item = result;

result = aAdvancedCalculator.addition(4);

Page 122: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (50)

System.out.println(“” + item + “ + 4 = “ + result);

item = result;

aAdvancedCalculator.remove();

} catch (Exception ex) {

ex.printStackTrace();

}

}

private final static String JNDI =

“j2eebook.ejb.AdvancedCalculatorHome”;

}

Page 123: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (51)

Klients izpilda sekojošas darbības:

• Iestata nosaukumu dienesta sākumkontekstu (sākumpunkts sakaru nodibināšanai ar kataloga struktūru).

• Izmantojot komponenta JNDI nosaukumu un home interfeisu j2eebook.ejb.AdvancedCalculatorHome, sameklē komponenta EJB objektu home, kas realizē home interfeisu. Rezultātā klients saņem objekta atsauci.

• Ar metodi narrow() pārveido objektu vajadzīgajā formā.

• Piešķir mainīgiem item un result sākumvērtības vienādas ar 0.

• Inicializē komponentu ar home interfeisa metodi create().

• Ar remote interfeisu izsauc biznesmetodes.

Page 124: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (52)

Objektu komponenti Komponenti Entity Enterprize JavaBean ir paredzēti darbam ar datu bāzu tabulām. Komponentu realizācijas klase ir saistīta ar datu bāzes tabulas definīciju, bet šīs klases eksemplāri ir saistīti ar atsevišķām tabulas rindām. Klases eksemplāra metodes ejbCreate() izsaukšana izveido jaunu rindu datu bāzē, bet metodes ejbRemove() izsaukšana likvidē atbilstošu rindu datu bāzē. Tādejādi, darbs ar datu bāzes tabulas rindām tehnoloģijā J2EE tika aizvietots ar Entiti JavaBean objektu izmantošanu. Tas ļāva panākt EJB programmas neatkarību no izmantojamās datu bāzes tipa: Microsoft Access, Cloudscape, Oracle vai Microsoft SQL Server X.

Page 125: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (53)

Komponents message – driven bean Šis Komponents izmanto java ziņojumu servisu (Java Messaging Service – JMS) ziņojumu pārraidei. Java ziņojumu serviss izmanto divus modeļus:

• point – to – point (punkts – punkts);

• publish – subscribe (publicēt – parakstīties).

Modelis point – to – point balstās uz rindu izmantošanu. Viselastīgākais variants atbilst gadījumam, kad ziņojumi tiek ierakstīti rindā zem JNDI nosaukuma.

Page 126: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (54)

Komponents message – driven bean

Modeļa “publish – subscribe” izmantošanas gadījumā kā ziņojumu glabātava tiek izmantota kokveida struktūra. Ziņojuma avots pārsūta ziņojumus kokveida struktūras mezglam (topic). Glabātavas struktūru nosaka lietojumprogramma. Ziņojumu saņēmējiem, lai saņemtu ziņojumus, ir jāparakstās uz atbilstoša mezgla ziņojumiem. Kad kādā mezglā tiek izvietots ziņojums, ziņojumu saņēmēji, kas ir parakstījušies uz atbilstošu ziņojumu saņemšanu, saņem paziņojumus un ziņojuma kopijas.

Page 127: Programmēšana datortīklu vidē

TEHNOLOĢIJA ENTERPRIZE JAVABEANS (55)

Komponents message – driven bean

Tādejādi message – driven bean komponents saņem ziņojumus no konteinera rindām (queues) vai nodaļām (topics) un izpilda biznesa loģiku , kas atbilst ziņojuma saturam. Lai būtu iespējams aizsūtīt ziņojumu, ziņojuma adrese ir jānorāda piegādes deskriptora tagā <message – driven – destination>. Klients var noskaidrot ziņojumu rindas adresi izmantojot JNDI un inicializācijas kontekstu:

Context initialContext = new InitialContext();

Queue stockInfoQueue = (javax.jms.Queue)

initialContext.lookup(“java:com/env/jms/stockInfoQueue”);