User Tools

Site Tools


Problem constructing authldap
laboratoare:reflection
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
laboratoare:reflection [2015/01/05 01:48]
cosmin.boaca created
laboratoare:reflection [2015/01/07 00:28] (current)
cosmin.boaca [Java Native Interface (JNI)]
Line 2: Line 2:
  
 * Responsabil:​ Cosmin Boacă * Responsabil:​ Cosmin Boacă
-* Data publicării: ​04.01.2015 +* Data publicării: ​05.01.2015 
-* Data ultimei modificări: ​04.01.2015+* Data ultimei modificări: ​05.01.2015
  
 ==Obiective== ==Obiective==
-Scopul acestui laborator este familiarizarea studenţilor cu noţiunnile de **Reflection** ​si de **Java Native Interface**.+Scopul acestui laborator este familiarizarea studenţilor cu noţiunnile de **Reflection****Java Native Interface** și **Annotations**.
  
 ==Java Native Interface (JNI)== ==Java Native Interface (JNI)==
Line 19: Line 19:
  
 <code java NativeMethodDeclaration.java>​ <code java NativeMethodDeclaration.java>​
-private int native_add(int num1, int num2);+package laborator;​ 
 + 
 +class NativeTest { 
 +     private int nativeAdd(int num1, int num2); 
 +}
 </​code>​ </​code>​
  
-Declararea și definirea funcției ​in C este ceva mai complicată și nu va fi prezentată.+Functia ​in C/C++ trebuie sa aiba urmatoarea definite 
 + 
 +<code C> 
 +extern "​C"​ { 
 +Java_laborator_NativeTest_nativeAdd(JNIEnv *env, JObject obj, Jint a, Jint b) { 
 +     ​return a + b; 
 +
 +
 +</​code>​ 
 + 
 +Numele metodei in C derivă din numele fully qualified al metodei din Java. (nume_pachet.nume_clasa.nume_metoda). Pentru metoda de mai sus, acest nume este laborator.NativeTest.nativeAdd. 
 +Numele metodei din C se formeaza prin concatenarea Java_ la numele metodei în care . este inlocuit cu _ . 
 +Metoda ​va fi compilată într-o bibliotecă partajată (shared_library) cu linking de C (extern "​C"​),​ acest lucru fiind necesar pentru a putea fi găsită corect din Java. 
  
 ==Reflection== ==Reflection==
Line 37: Line 54:
  
 <code java> <code java>
-private native Field[] ​      getDeclaredFields0(boolean publicOnly); +private native Field[] ​      getDeclaredFields(); 
-private native Method[] ​     ​getDeclaredMethods0(boolean publicOnly); +private native Method[] ​     ​getDeclaredMethods(); 
-private native Constructor<​T>​[] ​getDeclaredConstructors0(boolean publicOnly); +private native Constructor<​T>​[] ​getDeclaredConstructors(); 
-private native Class<?>​[] ​  getDeclaredClasses0();+private native Class<?>​[] ​  getDeclaredClasses();
 private native Annotation[] getDeclaredAnnotations();​ private native Annotation[] getDeclaredAnnotations();​
 </​code>​ </​code>​
Line 65: Line 82:
 } }
  
-class TCPTransporter ​implements ​Transporter;​ +class TCPTransporter ​extends ​Transporter;​ 
-class UDPTransporter ​implements ​Transporter;​ +class UDPTransporter ​extends ​Transporter;​ 
-class HTTPSTransporter ​implements ​Transporter; ​+class HTTPSTransporter ​extends ​Transporter; ​
  
 class XMLSerializer implements ISerializer;​ class XMLSerializer implements ISerializer;​
Line 84: Line 101:
     <​component name="​transporter"​ type="​HTTPSTransporter">​     <​component name="​transporter"​ type="​HTTPSTransporter">​
         <​component name="​serializer"​ type="​JSONSerializer"​ />         <​component name="​serializer"​ type="​JSONSerializer"​ />
-        <​component name="​public_key"​ source_file="​id_rsa.pub"​ /> 
     </​component>​     </​component>​
     <​component name="​storage"​ type="​CloudStorage">​     <​component name="​storage"​ type="​CloudStorage">​
Line 194: Line 210:
  
    - **(2p)** Creati clasa ''​ReflectionDummy'',​ o clasă care va conține 3 membri de tipul int, unul private, unul protected și unul public. Creați un obiect din această clasă și setați valorile membrilor folosind API-ul pentru Reflection. Folosiți metoda ''​getDeclaredFields''​ din clasa ''​Class'',​ și metodele ''​setAccessible''​ respectiv ''​set''​ din clasa ''​Field''​.    - **(2p)** Creati clasa ''​ReflectionDummy'',​ o clasă care va conține 3 membri de tipul int, unul private, unul protected și unul public. Creați un obiect din această clasă și setați valorile membrilor folosind API-ul pentru Reflection. Folosiți metoda ''​getDeclaredFields''​ din clasa ''​Class'',​ și metodele ''​setAccessible''​ respectiv ''​set''​ din clasa ''​Field''​.
-   - **(10p)** Acest task va urmări crearea unei clase ce poate rula teste având o funcționalitate de bază asemănătoare cu aceea a framework-ului Junit. Se vor folosi ​metodele ​''​getMethods''​ și ''​getAnnotations''​.+   - **(10p)** Acest task va urmări crearea unei clase ce poate rula teste având o funcționalitate de bază asemănătoare cu aceea a framework-ului Junit. Se vor folosi ​metodela ​''​Modifier.isPublic'' ​a clasei ''​Modifier'',​ cât și metodele ''​getGenericReturnType'',​ ''​getGenericParameterTypes'', ​''​getAnnotations'' ​ale clasei ''​Method''​. Puteți folosi orice alte metode considerați din API.
       * **(2p)** Definirea adnotărilor ''​@Test'',​ ''​@Before'',​ ''​@After''​.       * **(2p)** Definirea adnotărilor ''​@Test'',​ ''​@Before'',​ ''​@After''​.
-      * **(2p)** ​Rularea ​metodelor cu adnotarea ''​@Test'' ​și contorizarea testelor care au picat, care au trecut, sau care au avut erori de rulare. Un test are erori de rulare daca aruncă o excepție care nu este prinsă. Toate aceste metode trebuie să aibă tipul de retur ''​boolean''​ și să nu primească parametri. (Vor returna true dacă testul trece sau false daca pică). +      * **(2p)** ​Identificarea ​metodelor cu adnotarea ''​@Test''​. Toate aceste metode trebuie să aibă tipul de retur ''​boolean''​ și să nu primească parametri. (Vor returna true dacă testul trece sau false daca pică). Programul trebuie să arunce excepție dacă există vreo metodă cu adnotarea ''​@Test''​ care nu respectă semnătura și trebuie să ia în considerare doar metodele publice
-      * **(2p)** Identificarea ​și rularea ​metodelor cu adnotarea ''​@Before''​ înainte de fiecare test. +      * **(2p)** Identificarea metodelor cu adnotarea ''​@Before''​ înainte de fiecare test. Metodele trebuie să returneze void și șă nu primească parametri. Programul va verifica acest lucru și va lua în considerare doar metodele publice
-      * **(2p)** Identificarea ​și rularea ​metodelor cu adnotarea ''​@After''​ după fiecare test. +      * **(2p)** Identificarea metodelor cu adnotarea ''​@After''​ după fiecare test. Aceleași mențiuni ca si metodele cu adnotarea ''​@Before''​
-      * **(2p)** Implementarea unei clase ''​TestRunner''​ care conține o metodă statică run care primeste ca parametru un String reprezentând numele unei clase ce conține teste. Această clasă va rula testele din clasa primită ca parametru și va afișa o statistică sub forma :+      * **(2p)** Implementarea unei clase ''​TestRunner''​ care conține o metodă statică run care primeste ca parametru un String reprezentând numele unei clase ce conține teste. Această clasă va rula testele din clasa primită ca parametru ​precum și metodele de setup respectiv tear down și va afișa o statistică sub forma :
  
        ​numeMetoda1 failed/​passed/​error        ​numeMetoda1 failed/​passed/​error
Line 208: Line 224:
        ​failed : numărTesteEșuate        ​failed : numărTesteEșuate
        ​errors : numărTesteEronate        ​errors : numărTesteEronate
 +       
 +
laboratoare/reflection.1420415313.txt.gz · Last modified: 2015/01/05 01:48 by cosmin.boaca