Documente Academic
Documente Profesional
Documente Cultură
Coordonator tiinific,
Lect. Univ. Dr. Crengua M. Bogdan
Asist. Univ. Gabriela Ciobanu
Absolvent,
Nedelcu Florin Cristian
CONSTANA
2
2012
Cuprins
1. Introducere..........................................................................................................................5
1. 1 Structura lucrarii...........................................................................................................5
2. Definirea problemei............................................................................................................6
2.1 Descrierea problemei.....................................................................................................6
2.2 Obiectivele sistemului....................................................................................................6
2.3 Participanti.....................................................................................................................6
2.4 Scenarii de baza.............................................................................................................7
3. Analiza software..................................................................................................................8
3.1 Documentul de cerinte...................................................................................................8
3.1.1 Descrierea sistemului.............................................................................................8
3.1.2 Actorii software......................................................................................................9
3.1.3 Functile sistemului.................................................................................................9
3.1.3 Cereri nefunctionale.............................................................................................11
3.1.4 Descrierea cazurilor de utilizare..........................................................................11
3.2 Diagrame de secvente de sistem..................................................................................18
3.3 Modelul domeniului.....................................................................................................22
3.3.1 Concepte..............................................................................................................22
3.3.2 Identificarea claselor............................................................................................23
3.3.3 Identificarea atributelor........................................................................................24
3.3.4 Relatii de asociere................................................................................................24
3.3.5 Diagrama de clase a modelului de domeniu........................................................25
4. Servicii web......................................................................................................................26
4.1 Descrierea serviciilor web............................................................................................26
4.2 Avantajele si dezavantajele utilizarii serviciilor web...................................................28
4.3 Arhitectura SOA...........................................................................................................29
5.1 Identificarea serviciilor web candidate........................................................................31
5.1.1 Identificarea serviciilor web candidate pentru cazul de utilizare Trimitere
cerere...........................................................................................................................32
5.1.2 Identificarea serviciilor web candidate pentru cazul de utilizare Primire cerere
.......................................................................................................................................33
5.1.3 Identificarea serviciilor web candidate pentru cazul de utilizare Trimitere
radiografie...................................................................................................................34
5.1.4 Identificarea serviciilor web candidate pentru cazul de utilizare Primire
radiografie...................................................................................................................35
5.1.5 Identificarea serviciilor web candidate pentru cazul de utilizare Creare fisa
medicala......................................................................................................................36
5.1.6 Identificarea serviciilor web candidate pentru cazul de utilizare Modificare
fisa...............................................................................................................................37
5.1.7 Identificarea serviciilor web candidate pentru cazul de utilizare Vizualizare
fisa...............................................................................................................................38
5.1.8 Identificarea serviciilor web candidate pentru cazul de utilizare Adaugare
radiolog.......................................................................................................................39
5.1.9 Identificarea serviciilor web candidate pentru cazul de utilizare Creare cont. 40
5.1.10 Identificarea serviciilor web candidate pentru cazul de utilizare Autentificare
.......................................................................................................................................41
5.2 Stabilirea serviciilor web.............................................................................................41
6.1 Diagrame de interactiuni..............................................................................................44
6.1.1 Proiectarea cazului de utilizare Trimiterea unei cereri.....................................44
6.1.2 Proiectarea cazului de utilizare Primire cerere................................................46
3
1. Introducere
Lucrarea de fata isi propune sa prezinte posibilitatea utilizarii unor platforme
light in cadrul unor aplicatii distribuite. Se urmareste atat analiza si constructia unui
astfel de sistem, cat si prezentarea tehnologiilor folosite si modul lor de aplicare.
In plus, in lucrare este prezentata si construirea unei aplicatii concrete, denumita
eMedicalCenter, aplicatie distribuita cu modulul client pentru sistemul de operare Android
si modulul server dezvoltat pe platforma Java.
1. 1 Structura lucrarii
Structura lucrarii este impartita in 8 capitole ce vor fi prezentate in continuare.
Al doilea capitol prezinta definirea scurtafinitia succinta a problemei, obiectivele pe
care sistemul trebuie sa le atingaindeplineasca, participantii si o scurta prezentare a
modului de lucru in aplicatie.
Capitolul cu numarul trei prezinta analiza software a sistemului. Aici se sprezinta se
identifica documentul de cerinte, se identifica actorii software si interesele lor
(functiilecerintele functionale ale sistemului), se realizeaza atat analiza si descrierea
cazurilor de utilizare, cat si diagramele de secvente de sistem. Tot aici se construieste
diagrama de clase a modelului de domeniu prin identificarea conceptelor si a claselor,
precum si a relatiilore dintre acestea.
Capitolul patru aduce la cunostinta termenul de serviciu web. Este prezentata
structura serviciilor web in general, tehnologiile utilizate, modul de declarare al serviciilor,
precum si avantajele si dezavantajele utilizarii serviciilor web. Tot aici este introdus si
termenul de arhitectura SOA, principiile si metodele de dezvoltare descrise de aceasta
arhitectura.
Capitolul cinci prezinta analiza software orientata spre servicii web a sistemului. Se
incearca stabilirea serviciilor web ce vor fi implementate mai tarziuulterior prin
identificarea serviciilor web candidate, iar din acestea serviciile web concrete.
Proiectarea si implementarea aplicatiei sunt este descrisea in capitolul sase.
ElAcesta cuprinde proiectarea fiecarui caz de utilizare, precum si proiectarea si structura
bazei de date. In plus, capitolul contine cele mai importante secvente ale codului aplicatiei.
Urmatorul capitol exprima concluziile trase stabilite in urma analizei, proiectarii si
implementarii aplicatiei, precum si contributiile proprii in dezvoltarea acesteia.
Capitolul cu numarul opt descrie pe scurt tehnologiile utilizate, cum ar fi SOAP si
6
2. Definirea problemei
2.
evenimente pentru care in prealabil s-au inscris. Ori de cate ori se conecteaza la retea,
platforma isi cauta evenimentele cerandu-le unui server de gestiune a evenimentelor care
pastreaza un eveniment pana la descarcarea lui de catre toti abonatii inscrisi pentru acel tip
de eveniment.
2.3 Participanti
Participantii unui sistem informational sunt oameni care influenteaza direct sau
indirect sau sunt afectati sau influentati de dezvoltarea si/sau utilizarea sistemului. In raport
cu mediul (intreprindere, organizatie, etc.) in care va fi executat sistemul informational,
participantii pot fi:
Un rol este o responsabilitate definita ce poate fi asumata de unul sau mai participanti (oameni, echipa sau
organizatie) intr-un context bine-definit: aparitia unui eveniment, o actiune care trebuie dusa la indeplinire
sau un sablon de relatii.
asemenea, posibilitatea de a modifica sau sterge informatiile continute intr-o fisa medicala.
Dupa crearea unei fise medicale, pacientul caruia ii apartine poate accesa informatiile
continute in fisa cu ajutorulfolosind aplicatiaei doar pentru vizualizarea informatiilor.
10
3. Analiza software
Analiza software reprezinta primul pas in procesul de dezvoltare in care are loc
definirea a ceea ce trebuie dezvoltat. Principalele obiective urmarite sunt:
intelegerea problemelor curente ale organizatiei client (in cazul nostru, sistemul
medical);
Sistem
Flux alternativ:
[A1]. Datele introduse sunt incorecte:
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 2 din fluxul principal
Caz utilizare: primirea unei cereri de catre radiolog
14
Sistem
Flux alternativ:
[A1] Radiologul cere inchiderea notificariiavertizarii
1. Fluxul principal se incheie
Caz utilizare: trimiterea unei radiografii
Descriere: descrie interactiunea sistemului cu radiologul in vederea trimiterii unei
radiografii
Actori: radiologul
Eveniment: radiologul cere sistemului trimiterea unei radiografii
Preconditii: sistemul a verificat dreptul utilizatorului de trimitere a unei radiografii
Postconditii: radiografia a fost trimisa
Referinte incrucisate: F3.1 F3.4
Flux principal:
Radiolog
Sistem
Flux alternativ:
[A1] Datele introduse sunt incorecte
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 2 din fluxul principal
15
Sistem
Flux alternativ:
[A1] Medicul cere inchiderea avertizarii
1. Sistemul inchide avertizarea
2. Fluxul principal se incheie
Caz utilizare: crearea unei noi fise medicale
Descriere: descrie interactiunea sistemului cu medicul in situatia crearii unei noi
fise medicale
Actor: medicul
Eveniment: medicul a cerut sistemului crearea unei noi fise medicale
Preconditii: sistemul a verificat dreptul utilizatorului de crearea a unei noi fise
medicale
Postconditii: fisa medicala a fost creata
Referinte incrucisate: F5.1 F5.4
Flux principal:
Medic
Sistem
Flux alternativ:
[A1] Datele introduse sunt incorecte
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul se continua cu pasul 2 din fluxul principal
Caz utilizare: modificarea unei fise medicale
Descriere: descrie interactiunea sistemului cu medicul in situatia modificarii unei
fise medicale
Actori: medicul
Eveniment: medicul a cerut modificarea unei fise
Preconditii: sistemul a verificat dreptul utilizatorului de modificare a unei fise
medicale
Postconditii: fisa medicala a fost modificata
Refeinte incrucisate: F6.1 F6.7
Flux principal:
Medic
Sistem
5.
Selecteaza
fisa
care
se
modificatadorita
se doresc a fi modificate
Flux alternativ:
[A1] Sistemul nu gaseste nicio fisa corespunzatoare cautarii
1. Sistemul afiseaza un mesaj
2. Fluxul continua cu pasul 2 din fluxul principal
[A2] Datele introduse sunt incorecte
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 8 din fluxul principal
17
Sistem
2. Cauta fisa medicala dupa informatiile
contului cu care pacientul s-a logat
3. Afiseaza o interfata de cautare in fisa
medicala dupa anumite criterii
Medic
Sistem
Flux alternativ:
[A1] Datele introduse sunt incorecte:
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 2 din fluxul principal
Caz utilizare: creare cont
Descriere: interactiunea sistemului cu utilizatorul in cazul crearii unui cont nou
Actori: utilizatorul
Eveniment: utilizatorul a cerut crearea unui cont nou
Preconditii: sistemul functioneaza
Postconditii: contul a fost creat si memorat
Referinte incrucisate: F9.1 F9.4
Flux principal:
Utilizator
1. Cere crearea unui cont nou
3. Introduce si trimite datele
Sistem
2. Cere introducerea datelor contului
4. Verifica datele introduse [A1]
5. Salveaza contul
6. Confirma salvarea contului
Flux alternativ:
[A1] Datele introduse sunt incorecte:
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 2 din fluxul principal
Caz utilizare: autentificare
Descriere: interactiunea sistemului cu utilizatorul in cazul autentificarii
Actori: utilizatorul
Eveniment: utilizatorul a cerut autentificarea in sistem
Preconditii: sistemul functioneaza
Postconditii: utilizatorul s-a autentificat
Referinte incrucisate: F10.1 F10.3
Flux principal:
Utilizator
Sistem
19
Flux alternativ:
[A1] Datele introduse sunt incorecte:
1. Sistemul afiseaza un mesaj de eroare
2. Fluxul continua cu pasul 2 din fluxul principal
In Fig 1. Figura 1 prezentam diagrama cazurilor de utilizare software ale sistemului
eMedicalCenter.
activare descrie (perioada de executie a unei operatii de catre un obiect sau de alte
obiecte cu care acesta colaboreaza;)
Trimitere cerere
Primire cerere
Trimitere radiografie
21
Primire radiografie
22
23
Creare cont
Autentificare
24
3.3.1 Concepte
Am Se identificat din definitia problemeia si descrierile cazurilor de utilizare
urmatoarele concepte:
Fisa medicala (clasa)
Cetatean (clasa)
Drepturi (atribut)
Modificari (atribut)
Timestamp (atribut
eveniment)
Mesaj (clasa)
formal)
Care consumer (rol cetatean)
Radiografie (clasa)
cetatean)
Sex (atribut pacient)
pacient)
Document (clasa)
Imagine (clasa)
Modificare (clasa)
FisaMedicala
Cetatean
Medic
Mesaj
Cerere
Radiolog
Radiografie
Eveniment
Document
Imagine
Modificare
ListaModificari
ListaEvenimente
Pacient
atribute:
Cetatean: Nume
Radiografie: TipRadiografie
Relatiile identificate intre clasele de mai sus sunt prezentate in urmatorul tabel:
Fisa medicala Pacient
Medic Radiografie
Cetatean Pacient
Medic Cetatean
Medic - Cerere
Radiolog Radiografie
Eveniment - Document
Eveniment Imagine
Eveniment Modificare
Pacient - Cerere
Mesaj - Radiolog
Eveniment ListaEvenimente
Modificare - ListaModificari
27
28
4. Servicii web
Un serviciu web este o metoda de comunicare intre doua dispozitive electronice
prin intermediul internetului.
Definitia celor de la W3C pentru servicii web este:
Serviciul web este un sistem software dezvoltat sa suporte interactiuni de tipul
masina-masina prin intermediul unei retele. Contine o interfata descrisa intr-un limbaj
(WSDL) ce poate fi usor procesat de catre masina. Alte sisteme interactioneaza cu serviciul
web intr-un mod prestabilit de acesta utilizand mesaje de tip SOAP, transmise utilizand
protocolul HTTP, serializate in format XML in legatura cu alte standarde Web.
metode;
2.
}
@SOAPBinding(style=SOAPBinding.Style.RPC)
29
Pentru o interpretare cat mai simpla a serviciului web, pot fi folosite adnotari precum
@WebParam, care particularizeaza numele parametrilor folositi de metodele serviciului
web in fisierul WSDL corespunzator. De exemplu, metoda TrimiteCerere in care a fost
utilizata adnotarea @WebParam arata ca in descrierea de mai jos:
<message name="TrimiteCerere">
<part name="IDUserMedic" type="xsd:int"/>
<part name="Continut" type="xsd:string"/>
</message>
Fara utilizarea acestei adnotari, metoda ar fi fost mai greu de interpretat de catre
consumatorii serviciului:
<message name="TrimiteCerere">
<part name="arg0" type="xsd:int"/>
<part name="arg1" type="xsd:string"/>
</message>
Protocolul de structurare a serviciului web este SOAP (Simple Object Access Protocol).,
Acest protocol ce specifica modul de schimb al informatiei structurate in implementarea
serviciului web.
30
extindere si reutilizare: serviciile web pot fi foarte usor extinse prin noi
manipulari ale datelor, putand fi vazute drept un modul al propriei aplicatii. De
asemenea, resursele aceluiasi serviciu web pot fi consumate ori de cate ori este
nevoie in oricate aplicatii.
accesare in retea: serviciile web permit logicii business sa fie expusa in retea.
Astfel, exista posibilitatea de alegere a serviciilor de care am nevoie in propria
aplicatie, reducand cu mult timpul si resursele de dezvoltare a acesteia.
desi simplitatea serviciilor web este un avantaj din unele puncte de vedere, este in
acelasi timp si un dezavantaj. Serviciile web utilizeaza text pentru transmiterea
datelor, fiind mult mai mari cererile acestora decat alte cereri ce utilizeaza
protocoale binare. Totusi, acesta este un dezavantaj numai in situatiile conexiunilor
slabe sau foarte solicitate.
31
protocolul HTTP nu permite memorarea starilor, altfel spus daca un client trimite o
cerere catre serviciul web, iar apoi acesta pierde conexiunea cu serviciul din diferite
motive, serviciul nu stie ca aplicatia client nu mai este disponibila.
reutilizare
granularitate
modularitate
(proprietatea
sistemului
de
fi
divizat
in
mai
multe
interoperabilitate
cu celelalte
sisteme.
3. Reutilizare: logica este divizata in mai multe servicii pentru promovarea reutilizarii.
4. Abstractizare: logica nu este cunoscuta de catre celelalte sisteme, de asemenea nici
modul de implementare (limbaj, platforma).
5. Autonomie: serviciul controleaza exclusiv logica pe care o incapsuleaza; nu poate
fi modificata de alt sistem, ci doar utilizata, extinsa.
32
33
34
Operatie de sistem
Categorie
VerificareDateSW
CerereNouaSW
NotificareSW
efectuata
Verifica datele introduse
Inregistreaza cerere
Avertizeaza radiologii de
Entity-centric
Task-centric
Infrastructural
35
5.1.2 Identificarea serviciilor web candidate pentru cazul de utilizare Primire cerere
Operatie de sistem
Categorie
CerereSW
CerereSW
NotificareSW
efectuata
Afiseaza detaliile cererii
Seteaza cerere drept citita
Anunta primirea unei cereri
Entity-centric
Entity-centric
Infrastructural
noi
36
Operatie de sistem
Categorie
VerificareDateSW
RadiografieNouaSW
NotificareSW
efectuata
Verifica datele introduse
Inregistreaza radiografie
Avertizeaza medicul de
Entity-centric
Task-centric
Infrastructural
37
Operatie de sistem
Categorie
NotificareSW
efectuata
Avertizeaza primirea unei
Infrastructural
RadiografieSW
RadiografieSW
radiografii
Afiseaza radiografia
Seteaza radiografia drept
Entity-centric
Entity-centric
vizualizata
38
5.1.5 Identificarea serviciilor web candidate pentru cazul de utilizare Creare fisa
medicala
Operatie de sistem
Categorie
VerificareDateSW
FisaMedicalaSW
efectuata
Verifica datele introduse
Creare fisa medicala
Entity-centric
Task-centric
39
Categorie
Task-centric
FisaMedicalaSW
VerificareDateSW
FisaMedicalaSW
introduse
Afiseaza informatiile selectate
Verifica datele introduse
Salveaza modificarile
Task-centric
Entity-centric
Entity-centric
40
41
Categorie
Task-centric
Task-centric
Task-centric
Task-centric
Operatie de sistem
Categorie
CautareRadiologSW
RadiologSW
efectuata
Cauta radiolog
Salveaza date radiolog
Task-centric
Task-centric
42
5.1.9 Identificarea serviciilor web candidate pentru cazul de utilizare Creare cont
Operatie de sistem
Categorie
VerificareDateSW
ContNouSW
efectuata
Verifica datele introduse
Creaza contul
Entity-centric
Task-centric
43
Operatie de sistem
Categorie
VerificareDateSW
AutentificareSW
efectuata
Verifica datele introduse
Autenfica utilizator
Entity-centric
Task-centric
status-ului acestora;
45
6. Proiectare si implementare
Evolutia
metode
dependente
In contrast cu clasele din modelul de domeniu, clasele de proiectare sunt software si
48
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
public interface ISrvCereri
{
public String TrimiteCerere(
@WebParam(name="IDUserMedic") int IDUserMedic,
@WebParam(name="Continut") String Continut
);
}
cereri.ControllerCerere;
erori.ControllerErori;
erori.Eroare;
general.Cerere;
@WebService(endpointInterface="SRV.ISrvCereri", targetNamespace="SRV")
public class SrvCereri implements ISrvCereri {
@Override
public String TrimiteCerere(int IDUserMedic, String Continut) {
String rez = "";
try
{
49
Pattern-ul Creator este aplicat si in acest caz de utilizare, srvCereri fiind responsabil de
crearea clasei ControllerCerere, clasa ControllerCerere are responsabilitatea crearii clasei
ManagerCerere iar aceasta are responsabilitatea crearii clasei frmCerere.
Pentru primirea cererilor pe modulul client si procesarea informatiei primite, este folosit
codul de mai jos.
- metoda ce apeleaza serviciul web
private SoapObject getCereriNoi()
{
String NAMESPACE = "http://SRV/";
String METHOD_NAME = "getCereriNoi";
String URL = "";
String SOAP_ACTION = "http://SRV/getCereriNoi";
SoapObject ret = null;
50
SharedPreferences settings =
frm.getActivity().getSharedPreferences(frm.getActivity().getString(R.string.APPPREF),
0);
int IDUser = settings != null ?
Integer.parseInt(settings.getString("IDUserLogat", "")) : 0;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("IDUserRadiolog", IDUser);
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = false;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
String serverIP = settings != null ? settings.getString("serverIP", "") : "";
URL = "http://" + serverIP + "/SrvCereri?wsdl";
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
ret = (SoapObject) envelope.getResponse();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (XmlPullParserException e)
{
e.printStackTrace();
}
}
return ret;
- metoda de mai sus returneaza un obiect de tip SoapObject ce urmeaza a fi procesat astfel:
final Handler myHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
SoapObject obj = (SoapObject) msg.obj;
SimpleAdapter adapterListAlerte = new SimpleAdapter(
frm.getActivity().findViewById(R.id.listAlertaNoua).getContext(),
listAlerteNoi, R.layout.rowcererenoua, new String[] {"DeLa",
"Data","Detalii", "IDCerere"},new int[] {R.id.lblDeLa, R.id.lblData,
R.id.lblDetaliiCerereNoua, R.id.lblIDCerere});
listAlerteNoi.clear();
if (obj != null)
for (int i = 0 ; i < obj.getPropertyCount() ; i++)
{
SoapObject so = (SoapObject) obj.getProperty(i);
SoapObject so2 = (SoapObject) so.getProperty("medic");
so2 = (SoapObject) so2.getProperty("persoana");
String[] tmp =
so.getProperty("dataCerere").toString().substring(0, 10).split("-");
HashMap<String,String>();
51
temp.put("Data", so.getProperty("nrCerere").toString() +
"/" + tmp[2]+"-"+tmp[1]+"-"+tmp[0]);
temp.put("Detalii",
so.getProperty("continutCerere").toString());
temp.put("IDCerere",
so.getProperty("IDCerere").toString());
listAlerteNoi.add(temp);
}
ListView lvAlerte = (ListView)
frm.getActivity().findViewById(R.id.listAlertaNoua);
lvAlerte.setAdapter(adapterListAlerte);
if (((ListView)
frm.getActivity().findViewById(R.id.listAlertaNoua)).getCount() == 0)
{
HashMap<String,String> temp = new
HashMap<String,String>();
temp.put("DeLa", "Nicio cerere");
temp.put("Data","");
temp.put("Detalii", "Nu aveti nico cerere noua
nevizualizata");
temp.put("IDCerere", "0");
listAlerteNoi.add(temp);
}
else
{
lvAlerte.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View
view, int position, long id)
{
FragmentTransaction ft =
frm.getFragmentManager().beginTransaction();
Fragment frmCerere =
frm.getFragmentManager().findFragmentByTag("frmVizualizareCerere");
if (frmCerere != null)
{
ft = ft.remove(frmCerere);
frmCerere = new
frmCerere(StareFereastraCereri.Vizualizare);
}
frmCerere = new
frmCerere(StareFereastraCereri.Vizualizare);
ft.add(android.R.id.content, frmCerere,
"frmVizualizareCerere");
ft.hide(frm);
ft.commit();
Cerere c = new Cerere();
c.setIDCerere(Integer.parseInt(((TextView)view.findViewById(R.id.lblIDCerere)).getText()
.toString()));
Medic m = new Medic();
Persoana p = new Persoana();
p.setProperty(1,
((TextView)view.findViewById(R.id.lblDeLa)).getText().toString());
m.setPersoana(p);
c.setMedic(m);
c.setContinutCerere(((TextView)
view.findViewById(R.id.lblDetaliiCerereNoua)).getText().toString());
c.setNrDataCerere(((TextView)
view.findViewById(R.id.lblData)).getText().toString());
52
((frmCerere) frmCerere).setCerereDeAfisat(c);
frm.getActivity().getActionBar().setTitle("");
((eMedicalMain)frm.getActivity()).stareFereastra =
StareFereastraPrincipala.VizualizareCerere;
}
});
}
}
};
(new Thread(new Runnable()
{
@Override
public void run()
{
Message msg = myHandler.obtainMessage();
msg.obj = getCereriNoi();
}
})).start();
myHandler.sendMessage(msg);
Apelarea metodei getCereriNoi() se face pe un alt thread, iar trimiterea datelor primite in
thread-ul principal pentru afisarea acestora se face cu ajutorul unui obiect de tip Handler.
6.1.3 Proiectarea cazului de utilizare Trimitere radiografie
Pentru cazul de utilizare Trimitere radiografie, vom adauga clasele:
53
Pentru cazurile de utilizare Trimitere radiografie si Primire radiografie, unde este nevoie de
trimiterea unor fisiere de tip imagine prin retea, este folosita o conversie a imaginii intr-un
sir de caractere, acesta fiind cel trimis apoi prin retea. De exemplu, pentru citirea
radiografiei selectate si convertirea acesteia in sir de caractere se foloseste urmatoarea
secventa de cod:
String radiografie = "";
try
{
Intent intent = Intent.getIntent(URIIMagineDeTrimis);
Uri uri = intent.getData();
Bitmap bmp = MediaStore.Images.Media.getBitmap(
owner.getActivity().getContentResolver(), uri);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 0, bos);
54
bmp.recycle();
byte[] img = bos.toByteArray();
bos.close();
radiografie = Base64.encodeBytes(img);
}
catch (URISyntaxException e1) { e1.printStackTrace(); }
ControllerFrmRadiografie:
clasa
Controller
ce
se
ocupa
cu
gestiunea
In urma analizei si a acestui caz de utilizare, prin folosirea pattern-ului Creator:, frmMain
primeste ca responsabilitate crearea clasei frmRadiografie, aceasta din urma avand
responsabilitatea crearii clasei ControllerFrmRadiografie.
crearea
clasei
ControllerFrmFisaMedicala;,
srvFisaMedicala
are
56
Atributiile claselor pentru acest caz de utilizare sunt similare celor descrise in cazul de
utilizare anterior.
In urma analizei si acestui caz de utilizare, clasa frmMain va primi ca atributie crearea
clasei frmRadiolog, frmRadiolog primeste atributia responsabilitatea de creare a clasei
ControllerFrmRadiolog.
ControllerFrmAutentificare:
clasa
Controller
ce
se
ocupa
cu
gestiunea
59
FK_StatusCereri_Radiologi
Radiografii *
IDRadiografie
Radiologi *
FK_MedicRadiologi_Radiologi
NrRadiografie
IDRadiolog
ConstanteConfig
FK_Radiografii_Radiologi DataRadiografie
IDPersoana
IDRadiolog
AdresaCabinet
IDMedic
IDConfig
Pacient
Nume
Imagine
Valoare
Extensie
Activ
FK_Radiografii_Medici Observatii
ModificariContinutFisaMedicala *
IsPrimita
Medici *
IDModificare
Denumire
Atasament
Continut
IDTipModificare
IDPersoana
MedicRadiologi *
IDEroare
IDMedic
DataEroare
IDRadiolog
ClassName
IDFisaMedicala
IDPacient
na cala_ContinutFisaMedicala
FK_ModificariCGrupaSangui
ontinutFisaMedi
DataNastere
Sex
CuloareOchi
StareSanatate
Inaltime
Greutate
ModificariFiseMedicale *
IDModificare
FK_ModificariFiseMedi
calefi_FicariseMedi
calecale_Pacienti
FK_Modi
FiseMedi
IDPacient
AdresaCoresp
GrupaSanguina
Telefon
CuloareOchi
StareSanatate
FK_ContinutFisaMedicala_FiseMedicale
Inaltime
Greutate
IDTipModificare
FiseMedicale_TipModificare
ContiFK_Modi
nutFificarisaMedi
cala *
IDContinut
IDFisaMedicala
Denumire
TipModificare *
IDTipModificare
IDLogare
FK_Logari_Useri
IDUser
DataLogare
FK_Useri_TipuriCont
TipuriCont *
IDTipCont
Denumire
Nume
CNP
ModificariPersoane *
FK_ModificariPacienti_Pacienti
DataNastere
Sex
Logari *
IDUser
IDPersoana
AlteInformatii
IDPacient
IDPersoana
NrCerere
Useri *
Persoane *
LineNumber FK_Pacienti_Persoane
Pacienti *
IDFisaMedicala
DataCerere
IsCitita
LoginName
ContinutCerere
IDMedic
IDRadiolog
FK_Useri_Persoane
MethodName
FiseMedicale *
IDCerere
IDCerere
IDPersoana
FK_Cereri_Medici
IDTipCont
Erori
AdresaCabinet
FK_MedicRadiologi_Medici
IDMedicRadiolog
FK_StatusCereri_Cereri
IDStatusCerere
Parola
IDMedic
IDContinut
Cereri *
StatusCereri *
IDModificare
IDPersoana
ModificariPacienti *
IDModificare
FK_ModificariPersoane_Persoane
Nume
CNP
IDPacient
IDTipModificare
AdresaCoresp
Telefon
IDTipModificare
FK_ModificariPacienti_TipModificare
FK_ModificariPersoane_TipModificare
Denumire
Atasament
Continut
Dupa cum se poate observa din schema descrisa in imaginea de mai sus, baza de date
60
deoarece exista posibilitatea trimiterii unei cereri mai multor radiologi, dar in
acelasi timp este urmarita si starea cererii in raport cu fiecare radiolog, se creeaza o
tabela asociere intre cereri si radiologi, numita StatusCereri;
pentru a putea trimite cererea mai multor radiologi, este nevoie de o asociere intre
medici si radiologi. Pentru asta avem tabela MedicRadiologi, in care sunt
inregistrati radiologii inscrisi de catre fiecare medic pentru trimiterea cererilor;
interventii
medicale)
ce
sunt
inregistrate
in
tabela
ContinutFisaMedicala;
-
baza de date contine si o tabela in care sunt salvate toate erorile aparute in serviciul
web.
In plus, Bbaza de date cuprinde si doua proceduri stocate, care incrementeaza valorile
ultimei cereri si a ultimei radiografii din tabela ConstanteConfig, proceduri apelate in
momentul trimiterii unei cereri, respectiv unei radiografii.
In baza de date sunt configurate si constrangeri de introducere a valorilor de tip NULL,
precum si de introducere a unor valori implicite atunci cand o instructiune de tip insert nu
specifica o valoare pentru un anumit camp.
De exemplu, in campul DataOperarea din tabela ModificariPersoane nu trebuie introdus
nicio valoare, introducandu-se automat data curenta.
61
7. Concluzii
eMedicalCenter introduce in domeniul medical o noua abordare in comunicarea
dintre medici si radiologi, gestiunea informatiilor schimbate intre acestia, precum si fisele
medicale, fise medicale care pot fi usor consultate de catre pacienti. Abordarea consta in
dezvoltarea unei ahitecturi software client-server orientata spre servicii web.
Pentru maximizarea usurintei de utilizare si acces la sistem, modulul client a fost dezvoltat
pentru platforme light pe care ce ruleaza sistemul de operare Android.
De asemenea, pentru centralizarea tuturor informatiilor, este folosita o baza de date in fata
careia se gaseste modulul de gestiune a datelor continute in aceasta, dezvoltat cu ajutorul
sub forma unui serviciiloru web utilizand arhitectura SOA.
implementarea aplicatiei;
gasirea unei solutii optime de implementare a modulului server care sa aiba atat
cerinte minime de sistem, cat si posibilitatea de a fi usor de utilizat intr-o aplicatie
pentru sistemul de operare Android;
62
63
8. Anexe
b. SOAP
SOAP este acronimul expresiei Simple Object Access Protocol (Protocol simplu de
accesare al obiectelor).
SOAP specifica modalitatea de a transmite schimb de informatiie structuratea (obiecte)
prin retea. Are la baza structura XML pentru constructia mesajelor.
SOAP a luat nastere in urma cercetarilor facute de catre companiilelor Microsoft si IBM in
procesul de dezvoltare a unui protocol de comunicare bazat pe XML pentru dezvoltarea
serviciilor web.
Protocolul SOAP este compus din trei parti:
1.
Un plicO coperta (envelope) care descrie ce contine mesajul si cum este acesta
procesat;
2.
3.
Protocoalele de transport ce pot fi utilizate impreuna cu SOAP sunt diverse, printere care
enumeram: HTTP, HTTPS, FTP, TCP etc.
Cel mai raspandit protocol de transport utilizat impreuna cu SOAP este HTTP.
SOAP nu impune un anumite model de programare, putand fi utilizat atat in aplicatii
desktop dezvoltate dupa arhitectura orientata spre obiecteobject oriented, cat si aplicatii
web.
De asemenea, SOAP este un protocol cross-platforminteroperabil, sistemele ce
interactioneaza putand fi implementate pe platforme diferite; aceasta libertate este data de
faptul ca SOAP este un protocol bazat pe XML ce poate fi usor interpretat de masini cu
configuratii diferite.
SOAP defineste un standard de reprezentare RPC (Remote Procedure Call), acest lucru
implicand descrierea structurii pentru un apel de procedura la distanta precum si structura
raspunsului acesteia. De aceea, SOAP poate fi privit ca o extensie a modelului RPC in
schimbul de mesaje in retea prin apelul de proceduri.
Urmatorul exemplu ilustreaza modul in care functioneaza SOAP.
<definitions xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
xmlns:tns="SRV" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http:
//schemas.xmlsoap.org/wsdl/" targetNamespace="SRV"name="SrvConturiService
">
65
<import namespace=http://SRV/
location="http://192.168.6.101:9000/SrvConturi?wsdl=1" />
<binding xmlns:ns1="http://SRV/" name="SrvConturiPortBinding"
type="ns1:ISrvConturi">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc
"/>
<operation name="CreazaCont">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://SRV/"/>
</input>
<output>
<soap:body use="literal" namespace="http://SRV/"/>
</output>
</operation>
<operation name="Autentifica">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://SRV/"/>
</input>
<output>
<soap:body use="literal" namespace="http://SRV/"/>
</output>
</operation>
</binding>
<service name="SrvConturiService">
<port name="SrvConturiPort" binding="tns:SrvConturiPortBinding">
<soap:address location="http://192.168.6.101:9000/SrvConturi"/>
</port>
</service>
</definitions>
<definitions xmlns:tns=http://SRV/
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoa
p.org/wsdl/" targetNamespace="http://SRV/">
<types>
<xsd:schema>
<xsd:import namespace="http://SRV/"
schemaLocation="http://192.168.6.101:9000/SrvConturi?xsd=1"/>
</xsd:schema>
</types>
<message name="CreazaCont">
<part name="loginName" type="xsd:string"/>
<part name="parola" type="xsd:string"/>
<part name="numeUser" type="xsd:string"/>
<part name="CNP" type="xsd:string"/>
<part name="Adresa" type="xsd:string"/>
<part name="IDTipCont" type="xsd:int"/>
</message>
<message name="CreazaContResponse">
<part name="return" type="xsd:string"/>
</message>
<message name="Autentifica">
<part name="loginName" type="xsd:string"/>
<part name="parola" type="xsd:string"/>
</message>
<message name="AutentificaResponse">
<part name="return" type="tns:user"/>
</message>
<portType name="ISrvConturi">
<operation name="CreazaCont" parameterOrder="loginName parola numeUser
CNP Adresa IDTipCont">
<input message="tns:CreazaCont"/>
66
<output message="tns:CreazaContResponse"/>
</operation>
<operation name="Autentifica" parameterOrder="loginName parola">
<input message="tns:Autentifica"/>
<output message="tns:AutentificaResponse"/>
</operation>
</portType>
</definitions>
<xs:schema xmlns:tns="http://SRV/" xmlns:xs="http://www.w3.org/2001/XMLSc
hema" version="1.0" targetNamespace="http://SRV/">
<xs:element name="user" type="tns:user"/>
<xs:complexType name="user">
<xs:sequence>
<xs:element name="IDUser" type="xs:int"/>
<xs:element name="loginName" type="xs:string" minOccurs="0"/>
<xs:element name="persoana" type="tns:persoana" minOccurs="0"/>
<xs:element name="tipCont" type="tns:tipCont" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="persoana">
<xs:sequence>
<xs:element name="CNP" type="xs:string" minOccurs="0"/>
<xs:element name="IDPersoana" type="xs:int"/>
<xs:element name="nume" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tipCont">
<xs:sequence>
<xs:element name="denumireTip" type="xs:string" minOccurs="0"/>
<xs:element name="IDTipUser" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
c. WSDL
WSDL este acronimul expresiei Web Service Definition Language. Acesta este un
format XML care are ca scop descrierea serviciilor web.
Un document WSDL descrie un serviciu web drept o colectie de puncte finale (endpoints) .
Elementele utilizate in documentul WSDL pentru definirea serviciilor web sunt:
-
types: un container in care sunt definite tipurile de date utilizate, tot aici se observa
si structura datelor complexe (obiectele serializate);
port type: un set de operatii pe care un endpoint le poate executa; aici este descrisa
si forma (ordinea parametrilor) sub care serviciul web poate fi apelat;
Utilizarea acestor elemente este demonstrata in exemplul de mai jos, ce contine definirea
unui serviciu web cu o singura operatie (AdaugaFisaMedicala):
<binding xmlns:ns1="http://SRV/"
name="SrvFisaMedicalaPortBinding" type="ns1:ISrvFisaMedicala">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" styl
e="rpc"/>
<operation name="AdaugaFisaMedicala">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://SRV/"/
>
</input>
<output>
<soap:body use="literal" namespace="http://SRV/"/
>
</output>
</operation>
</binding>
<service name="SrvFisaMedicalaService">
<port name="SrvFisaMedicalaPort" binding="tns:SrvFisaMedicalaPortBi
nding">
<soap:address location="http://192.168.6.103:9000/SrvFisaMedi
cala"/>
</port>
</service>
<message name="AdaugaFisaMedicala">
<part name="NumePacient" type="xsd:string"/>
<part name="CNPPacient" type="xsd:string"/>
<part name="AdresaCorespondenta" type="xsd:string"/>
<part name="TelefonPacient" type="xsd:string"/>
<part name="GrupaSanguina" type="xsd:string"/>
<part name="dataNastere" type="xsd:string"/>
<part name="sex" type="xsd:string"/>
<part name="inaltime" type="xsd:int"/>
<part name="greutate" type="xsd:int"/>
<part name="culoareOchi" type="xsd:string"/>
<part name="stareSanatate" type="xsd:string"/>
</message>
<types>
<xsd:schema>
<xs:complexType name="continutFisaMedicala">
<xs:sequence>
<xs:element name="areAtasament" type="xs:boolean"/>
<xs:element name="atasament" type="xs:base64Binary" minOccurs="0"/>
<xs:element name="continut" type="xs:string" minOccurs="0"/>
<xs:element name="data" type="xs:string" minOccurs="0"/>
<xs:element name="denumire" type="xs:string" minOccurs="0"/>
<xs:element name="IDContinutFisa" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xsd:schema>
</types>
WSDL permite importul altor documente WSDL in definitia unui singur serviciu, astfel:
68
69
Bibliografie
[1] http://www.techit.ro/analiza_software2.php
[2] Thomas Erl, Service-Oriented Architecture: Concepts, Technology, and Design,
Thomas Erl, editura, anul publicarii
[3] http://www.omg.org/technology/readingroom/SOA.htm
[4] http://www.omg.org/news/meetings/workshops/proceedings.htm
[5] http://www.opendrum.upt.ro/labs/poo/lab4.html
[6] http://nikojava.wordpress.com/2010/03/13/a-simple-web-service-in-java/
[7] http://en.wikipedia.org/wiki/Service-oriented_architecture
[8] http://www.soaprinciples.com/
[9] http://www.ibm.com/developerworks/webservices/library/ws-soa-design1/
[10] http://www.w3.org/TR/wsdl
[11] Wei Meng Lee, Beginning Android 4 Application Development, Wei Meng Lee,
editura, anul publicarii
[12] Thomas Erl, SOA Principles of service design, Thomas Erl editura, anul publicarii
[13] Crenguta Bogdan, Note de curs Proiectarea arhitecturilor software, Bogdan
Crenguta , note de curs, 2011
[14] Lenuta Alboaie, Sabin Buraga, Servicii Web - Concepte de baza si implementari,
Lenuta Alboaie, Sabin Buraga editura, anul publicarii
70