Raport końcowy

Obsługa bazy danych i logika aplikacji

  • Baza danych została zaprojektowana z wykorzystaniem narzędzia Toad.
  • Ze stworzonych diagramów ERD, został wygenerowany skrypt w języku PostgreSQL.

Automatyczne generowanie skryptu bazy okazało się być rozwiązaniem wygodnym, jednak generującym błędy wymagające ręcznego poprawienia.

  • Logika aplikacji i komunikacja z bazą zostały zaimplementowane w języku Java.
  • Unordered List ItemJako silnik aplikacji został wybrany JBoss 6.0.
  • Mapowanie obiektowo-relacyjne zostało przperowadzone z wykorzystaniem modułu JPA i frameworku Hibernate.
  • Zapytania kierowane do bazy zostały stworzone w języku Hibernate Query Language (HQL) i zaimplementowane wewnątrz beanów w ramach modułu EJB (wykorzystana wersja 3.0).

Poniższy przyklad przedstawia fragment beana realizującego blokowanie konta użytkownika.

      @Override
      public void addEventComment(String eventName, String comment, String author) throws NoSuchEvent, NoSuchUserException {
	
	String getEvent = "SELECT a FROM Event as a WHERE a.eventName=?";
	Query getEventQ = em.createQuery(getEvent);
	getEventQ.setParameter(1, eventName);
	try{
		Event ev=(Event) getEventQ.getSingleResult();
		EventComment eventComment=new EventComment();
		eventComment.setComment(comment);
		eventComment.setEvent(ev);
		eventComment.setCreationDate(new Timestamp(Calendar.getInstance().getTimeInMillis()));
		
		String getAuthor= "SELECT a FROM User as a WHERE a.email=?";
		Query getAuthorQ=em.createQuery(getAuthor);
		getAuthorQ.setParameter(1, author);
		try{
			User u=(User)getAuthorQ.getSingleResult();
			eventComment.setUser(u);
			em.merge(eventComment);
			
		}
		catch(NoResultException e){
			throw new NoSuchUserException("");
		}
	}
	catch(NoResultException e){
		throw new NoSuchEvent();
	}
}
  

Działanie beanów zostało przetestowane przy pomocy testów jednostkowych z wykorzystaniem frameworku JUnit4. Przykład testu, pokazujący korzystanie z API dostarczonego przez moduł EJB.

     @Test
     public  void addEventComment() throws InactiveUserAccount, NoSuchUserException, ObjectAlreadyExistsException, NoSuchCategoryException, NotCompleteInfoException, WrongInputData, NoSuchEvent{
	long now=Calendar.getInstance().getTimeInMillis();
	long oneDayInMilis=24*60*60*1000;
	long startTime=now+oneDayInMilis*7;
	long singInDeadline=startTime-2*oneDayInMilis;
	long stopTime=startTime+2*60*60*1000;
	EventTimes times=new EventTimes(startTime, stopTime, singInDeadline, false, null);
	Location loc=new Location(100L, 200L);
	ParticipantRequirements reqs=new ParticipantRequirements(34, 12, false, RequiredGender.NONE, false, null);
	userEjb.addNewUser{{:pl:dydaktyka:ztb:2011:projekty:meetus:dodawanie_wydarzen.png|}}("dora", 23, false, false);
	catEjb.addCategory("noga", "dora");
	eventEjb.addEvent("mecz","noga" , "whatever", "dora",times,reqs,loc);
	eventEjb.addEventComment("mecz", "bylo fajnie", "dora");
	
}

Interfejs

Do aplikacji został dołącząny interfejs wwww.

Logowanie. Zostało zaimplementowane poprzez integrację z portalem facebook. Takie rozwiązanie umożliwia użytkownikom facebooka automatyczne logowanie do naszego serwisu.

Po zalogowaniu użytkownik przenoszony jest na stronę portalu gdzie dostępne są takie opcje jak wyszukiwanie wydarzeń, dodawanie wydarzeń, dodawanie kategorii, statystyki i inne. Przykładowy formularz dodawania wydarzenia:

W ramach projektu została zaimplementowana integracja z mapami Google umożliwiająca w prosty sposób wybór lokalizacji poszukiwanego zdarzenia:

Testy

Logika aplikacji została przetestowana z wykorzystaniem testów jednostkowych. Podczas tworzenia testów została wykorzystana technika nazewnictwa testów zaprezentwana w poniższym tutoriali http://vimeo.com/10569751 . Polega ona na nazwaniu klasy testowej zgodnie z konwencją: TestedClassShould, a kolejne metody testu określaja co klasa powinnna robić. Np. class UserBeanShould wraz z metodami testowymi @Test public void enableAddingNewUsers(), @Test public void returnNumberOfUsers(); Taka technika nazewnictwa sprawdza się szczególnie przy tworzeniu oprogramowania zgodnie z TDD. Pozwala na łatwe zdefiniowanie interfejsu klasy poptrzez stworzenie odpowiednich testów. Na podstawie testów uzupełniana jest implementacja klasy.

pl/dydaktyka/ztb/2011/projekty/tickets/raport_koncowy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0