Specyfikacja projektu:
Utworzenie schematu bazy danych przy pomocy własnego ORM Niberhate w liście mailingowej
„Mailing Clear”
Motywacja:
W dzisiejszych czasach podstawowym problemem społeczeństwa jest szybka możliwość przekazania informacji, które w jasny, szybki i klarowny sposób przedstawią problem o którym mówi korespondencja. Program Mailing Clear zostałby kupiony przez klientów z powodu dużego nacisku który kładzie on na przejrzystość otrzymywanych informacji, ich zbiorów i połączeń.
Podstawowym powodem dla którego ludzie wybiorą nasz produkt będzie niska cena oraz wysoka jakość produktu w połączeniu z supportem w postaci aktualizacji.Jednym ze sposobów zarobienia na tym pieniędzy będzie opłata pobierana za każda licencję, oraz opłaty za support w postaci rocznego abonamentu.
Opis istniejących rozwiązań:
Jednym z przykładowych istniejących już rozwiązań jest „Email Marketing Software”, który określa siebie najlepszym oprogramowaniem do wysyłania list emailowych na świecie. Oprogramowanie to umożliwia zakładanie oraz pełne zarządzanie listą mailingową. Lista ta jest dostępna z każdego komputera na świecie. Oprogramowanie jest uruchomione na serwerach firmy produkującej to oprogramowanie. Wszystkie e-maile są również wysyłane najszybciej jak się da przez serwery pocztowe producenta. Producent chwali się 12 latami doświadczenia i więcej niż 12 tysiącami klientów, co przekłada się na ponad 50 000 tysięcy lista mailingowych w ponad 100 krajach.
Innowacyjność rozwiązania:
Innowacyjnością w projekcie jest sposób w jaki użytkownik może odbierać wiadomości z różnych list, do których jest zapisany. Będzie miał możliwość odbierać same tytuły wiadomości, tytuły+załącznik do wiadomości lub całe wiadomości. Umożliwi to dopasowanie otrzymywanych zbiorów wiadomości do potrzeb czytającego, pozwoli mu to zaoszczędzić czas na przeglądanie setek wiadomości.
Funkcjonalność produktu:
Projekt będzie posiadał następujące funkcjonalności:
nagłówki wiadomości będące linkami do pełnych wiadomości pełne wiadomości z linkami do załączników Zadania, moduły do wykonania:
Promocja i reklama: Słowa kluczowe dla projektu tu:
Jednym z miejsc gdzie można by reklamować oprogramowanie byłyby strony firm sprzedających hosting we wszelkiej postaci. Jest to uwarunkowane tym że oprogramowanie to jest raczej specyficznym produktem, którego nie warto reklamować na przykład na portalach społecznościowych. Jest on przeznaczony dla z góry określonej rzeszy odbiorców, zainteresowanych w szybkim i sprawnym informowaniu swoich klientów czy pracowników.
Opis wykonanego systemu ORM Niberhate
Specyfikacja wymagań:
Środowisko uruchomieniowe:
Projekt docelowo jest przeznaczony dla środowiska w jakim został zaprojektowany i przetestowany. Odmienne wersje poszczególnych komponentów środowiska mogą powodować, że system nie będzie działał zgodnie z założeniami lub nie będzie funkcjonował w ogóle.
System operacyjny: Windows XP Proffesional SP3
Java: JDK 1.6 Update 18
Silnik baz danych: PostgreSQL 8.4
Pliki wchodzące w skład biblioteki:
Framework Niberhate składa się z jednego pliku JAR o nazwie „niberhate.jar”, zawierającego wszystkie klasy wchodzące w skład frameworka oraz z bibliotek pomocniczych, używanych przez framework, dostarczonych w folderze „lib”:
Wszystkie te pliki należy umieścić w lokalizacji CLASSPATH swojego projektu.
Plik konfiguracyjny:
Aby móc korzystać z frameworka Niberhate należy w folderze „META-INF” w zasobach swojego projektu umieścić plik o nazwie „niberhate.xml” zawierający poprawną konfigurację frameworka w formacie XML.
Przykładowy plik konfiguracyjny:
<?xml version="1.0" encoding="UTF-8"?> <niberhate> <datasource> <connection-url>jdbc:postgresql://127.0.0.1/test</connection-url> <user>postgres</user> <password>postgres</password> </datasource> <properties> <show_sql>true</show_sql> <schema_name>nh</schema_name> <schema_action>create</schema_action> </properties> </niberhate>
datasource - zawiera informacje dotyczące źródła danych, z którym nawiązane ma zaostać połączenie. Ten element musi zawierać:
properties – Dodatkowe właściwości silnika persystencji:
Użycie silnika:
Rozpoczęcie działania frameworka Niberhate nie jest automatyczne. Należy wprost wywołać statyczną metodę start() klasy org.niberhate.Engine, która rozpocznie działanie silnika Niberhate. Należy wywołać tą metodę zanim zacznie się korzystać z jakichkolwiek encji oraz klasy EntityManager.
import org.niberhate.Engine; public class Main { public static void main(String[] args) { try { // Zainicjalizowanie silnika Niberhate Engine.start(); // Utworzenie EntityManagera EntityManager em = new EntityManager(); // Utworzenie instancji encji Customer cust = new Customer("Jan", "Iksiński"); // Utrwalenie encji em.persist(cust); // Zamknięcie EntityManagera em.close(); } catch (Exception e) { e.printStackTrace(); } } }
Adnotacje:
Klasa encyjna
Nie ma znaczenia, czy pola encji są publiczne, prywatne czy chronione. Dla każdego pola (oprócz pól oznaczonych przez @Transient) wymagana jest para metod: Metoda odczytująca (Getter) oraz metoda zapisująca (Setter), ponieważ tylko dzięki nim silnik persystencji uzyskuje dostęp do pól encji. Metody muszą być zgodne z ogólnie przyjętą konwencją (przykładem może być sposób w jaki Eclipse generuje gettery i settery).
Klasa musi posiadać bezparametrowy konstruktor. Silnik persystencji użyje właśnie tego konstruktora do dynamicznego tworzenia instancji encji.
Przykładowa, poprawnie zmapowana klasa encji:
@Entity(tableName = "CUSTOMERS") public class Customer { @Id(generationType=GenerationType.SEQUENCE, sequenceName="CUSTOMERS_SEQ") private int id; @Column(name="FISRT_NAME", length=40, nullable=false ) private String firstName; @Column(name="LAST_NAME", length=60, nullable=false) private String lastName; @OneToOne private Address address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
Użyte wzorce projektowe:
Dynamika obiektu encji: