pytanie o architekture

0

Czesc, chcialabym sie Was poradzic odnosnie architektury do dosc prostego programu. Ma on czytac pliki, parsowac i wrzucac do bazy. Sprawa bylaby (dla mnie) prosta gdyby to mialo byc zwykle j2se - bo zrobilabym to pewine na zasadzie TimerTaska, ktory co zadany czas szukalby nowego pliku, czytal i wrzucal do bazy. Musze jednak zrobic to w j2ee z ktora za wiele nie mialam doczynienia.
Czy ktos z Was moglby mi cos zaproponowac? Czego moglabym uzyc? Program jest prosty wiec i rozwiazanie powinno byc proste..

bede wdzieczna za wszystkie sugestie!
pzdr,
misty

0

Zdefiniuj co rozumiesz przez "zrobić z JEE". To ma być jakaś aplikacja webowa? Masz w niej korzystać faktycznie z pełnego serwera aplikacyjnego? Na dobrą sprawę skoro musisz użyć JEE to możesz po prostu łączyć się z bazą przez JPA i warunek będzie spełniony.

0

myslalam by uzyc DAO + Hibernate, ale to chyba nie czyni mi jeszcze aplikacji j2ee?
nie, nie ma to byc aplikacja webowa. W j2se bym powiedziala ze to raczej cos na zasadzie daemona - co zadany czas sprawdza czy przyszedl nowy plik i robi logike. Lub sprawdza czy jest nowy plik na jakis trigger (slyszalam ze jest jakas biblioteka w javie ktora pozwala monitorowac katalog - myslalam zeby jej tu uzyc).

0

Dorzuć Springa :p

slyszalam ze jest jakas biblioteka w javie ktora pozwala monitorowac katalog - myslalam zeby jej tu uzyc

W Javie 7 jest nawet API do tego, no ale Java 7 nie jest rozpowszechniona jeszcze.

0

żeby czynić JEE trzeba mieć 15 lat doświadczenia, znać wszystkie frameworki jakie były dostępne przez ostanie 10 lat oraz recytować JEE tutorial z pamięci od wersji 1.4. Oczywiste, że należy wyrecytować dify między wersjami na zawołanie. Wtedy nieważne co czynisz - całe Twoje życie, każdy czyn oraz myśl to JEE.
Bez tego, nieważne co piszesz - TO NIE JEST JEE! Co najwyżej EE..EE...EE..EE dochodzące z miejsca gdzie nawet programista piechotą chodzi.

0

@Wibowit Spring to nie jest Java EE! To że coś może działać na serwerze aplikacyjnym nie robi z tego jeszcze EE ;] Java EE ma dość jasną specyfikację i Springa w niej nie ma ;]
Tak samo jak Hibernate - to nie jest Java EE. JPA (jako ze wyewoluowalo z Entity Enterprise Java Beanów) wykorzystujące np. Hibernate już tak.

0

Przyznam ze nie raz probowalam ugryzc springa i mi nie szlo. A teraz sie zastanawiam - co mi ten framework tak na prawde daje? Czy ktos z Was moglby mi jak tumanowi wytlumaczyc?

co do Javy 7 - nie moge uzyc.

pzdr,
misty

0

Shalom, no a w ejb tego nie ma?

Moze sformuuje pytanie inaczej - gdyby ktorys z Was mial napisac taki program-czego byscie uzyli?

0

Ja tam pisze non stop w EE: wysyłam maile (JavaMail - EE) z apletu (też już standardzie EE) i czasami przychodzi mi jakiś XML to go sobie parsne (parsowanie XML'i to też przecież java EE). :)

0

Hej, to jak masz takie duze doswiadczenie to moze moglbys mi doradzic czego moglabym uzyc do napisania programu ktory opisalam?

pzdr,
misty

0

Jako że Java SE całkowicie zawiera się w Java EE, proponuję napisać aplikację najpierw w Java SE, a potem dodać wybrane API z Java EE.

0

Tylko jak ja mam to odpalic? Juz tlumacze o co mi chodzi: w j2se bede miala klase Main w ktorej sobie utworze obiekt klasy nasluchujacej zmian na folderze.I to sobie bedzie zylo i robilo swoja logike gdy pojawi sie nowy plik. Ale jak z tego teraz zrobic j2ee? Tzn moge to chyba spakowac w war'a i wrzucic na serwer aplikacyjny, ale co dalej? Tam sie przeciez sam Main nie odpali? Kumasz o co mi chodzi?

0

Problem polega głównie na tym, że do tego co chcesz zrobić nie potrzeba aplikacji J2EE. Nawet jest niezalecane, aby taka aplikacja korzystała z systemu plików, z założenia powinna czytać z bazy i do bazy zapisywać. Dlatego nie ma tam mechanizmu monitorowania zawartości katalogu. Można wykorzystać Timer i co pewien czas sprawdzać, czy coś się wydarzyło. Albo zdefiniować jakiś interfejs dostępu i z czymś to połączyć.

0

hmm, czyli Twoja sugestia jest taka ze powinnam jednak uzyc j2se?

0

Jak znajdziesz uzasadnienie na JEE, to owszem. Czyli że jest to aplikacja rozproszona, serwer robi coś, czego nie może zrobić klient, udostępniasz to wielu klientom albo jeszcze coś. Ale z tego co piszesz, to według mnie nie ma takiej potrzeby i lepiej to zrobić jako SE.

0

@misty

To co chcesz zrobić to robisz to dla siebie, robisz to jako projekt na uczelnie czy jest to zadanie służbowe (zarobkowe)?

Bo ja widzę że Ty nie wiesz właściwie po co Ci w tym JEE. Nie zrozum mnie źle ale jeżeli masz jasno określony cel jak widzę, to dobierz technologie, które to najlepiej zrobią (only JSE i tyle). Wciskanie na siłę w te akurat zadanie jakiś frejmworków tylko zeby można w opisie napisać "wykorzystano to i to z Enterprise Edition" to nieporozumienie.

W czystej javie Twoje zadanie jest do zrobienia w 3-4 godziny.

0

No ja bym to robila w j2se bo to zadanie jest dosc proste, ale jakos tak mi sie wydaje ze klient oczekiwac bedzie aby to bylo na serwerze aplikacji - stad ten pomysl na ee. a ze nie wiedzialam jak to ugryzc - dlatego przyszlam po porady do Was. Wczesniej w j2ee mialam niewiele doswiadczenia - pisalam tylko troche webservice'ow, jakas prosta webowa aplikacje, jakies trzy na krzyz serwlety.. moja wiedza jest wiec bardzo ograniczona i po prostu myslalam ze sa jakies rozwiazania ktore powinnam wykorzystac w przypadku tego projektu, a jak tego nie zrobie to bedzie jakas masakra ze nie uzywam najnowszych, porzadnych narzedzi.. Ale teraz jak z Wami rozmawiam to widze ze moje pierwotne przeczucie (j2se, dorzuce hibernate, i albo timer task albo ta biblioteka do monitorowania katalogu) bylo sluszne. Dzieki serio za wszystkie rady.

pzdr,
misty

1

A baza danych stoi w tym samym miejscu co aplikacja? Bo jeśli nie to możesz z poziomu aplikacji klienckiej łączyć się z JPA na serwerze i zapisywać sobie cośtam do bazy i będziesz miała JEE i jeszcze super nowe JPA :P

0

Tego jeszcze nie wiem. Ale jesli by stala w innym miejscu, to co proponujesz, bym jakies ejb napisala?
Swoja droga - czy ja w ejb (pytam bo serio nie wiem) moglabym uzyc takiego listenera ktory nasluchiwalby mi zmian na katalogu?

Po weekendzie zbiore wiecej informacji i wymagan i wtedy bardzo chetnie wroce do dyskusji z Wami.

0

No i jak jakoś się z tą bazą będziesz musiała łączyć. A ładniej będzie wyglądać jak będzie to JPA niż jak będzie to JDBC ;)

0

No to mam jeszcze 2 pytania:

  1. Hibernate chyba implementuje JPA? Czy zle mysle? Bo chcialam wlasnie Hibernate uzyc

  2. Skoro w ejb bym mogla uzyc tego mojego listenera nasluchujacego na zmiane w katalogu, to rozumiem ze mam tez on cos w "rodzaju metody Main"? tzn mam na mysli - jesli odpalam ejb na serwerze to on od razu zaczyna zyc? i ten moj listener nasluchuje? Czy musze tego ejb wpierw utworzyc i wywolac jakas jego metode - to np przez servlet?

0

Można użyć Hibernate jako dostawcę JPA, ale można go też używać korzystając z jego natywnego API.
Nie nie, EJB tak nie działa! Zależnie od tego o jakim beanie mówimy to beany są tworzone i niszczone w zależności od potrzeb. Odwołujesz się do beana a kontener się martwi tym żeby miał kto to obslugiwać.

0
  1. Zapewnie Hibernate implementuje JPA, ale to nie w tą stronę działa. Specyfikacja opisuje JPA i używając JPA możliwe, że działa on na hibernate, bo to serwer aplikacji implementuje. Jeżeli zdecydujesz się na Hibernate, to nie będziesz używać JPA, tylko Hibernate. Jeżeli zdecydujesz się na JPA, to nie będzie cię interesować czy używa Hibernate czy innej implementacji tego interfejsu.
  2. Właśnie tak po prostu to ciężko. Bo tobie jest potrzebna metoda w stylu onStartApplication. Próbowałem kiedyś coś takiego zrobić, ale się zniechęciłem, to nie jest standardowe zachowanie (w JEE5, nie wiem jak jest w 6). Ostatecznie chyba skorzystałem z timera. Poza tym jak już wspomniałem ta architektura nie zaleca wykorzystywania lokalnego systemu plików. Komponenty EJB mają swój cykl życia i są zarządzane przez serwer, a ten twój musiałby działać cały czas.
    Dla mnie zastosowanie dla EE byłoby takie, że piszesz klienta implementującego interfejs zdalne komponentu i ten klient nasłuchuje zmian w katalogu. Nie działa na serwerze aplikacji, czyli to twoja aplikacja SE. Teraz piszesz aplikację serwerową odpowiedzialną za komunikację z bazą, twój klient korzysta z tej aplikacji do zapisu i masz modelowe zastosowanie technologii JEE.
0

Chodziło mi dokladnie o coś takiego o czym pisze @chodnik:

  • piszesz klienta w SE który monitoruje katalog i jeśli pojawią się zmiany to komunikuje się z JPA na serwerze
  • JPA na serwerze zajmuje się persystowaniem danych w bazie
0

W servletach jest ContextListener.contextInitialized - wywolywany podczas startu aplikacji webowej. W Java EE 6 sa EJB @Singleton z anotacja @Startup, ktore sprawiaja ze EJB jest inicjalizowany na starcie. W jego metodzie @PostConstruct mozesz dodac co Ci sie podoba. To sa standardowe mechanizmy wykonywania operacji na starcie aplikacji EE.

0

Jesli napisze klienta w j2se, oraz czesc serwerowa w postaci jakiegos ejb to:

  1. Mam niestety 2 programy, a chcialam miec 1. A moze sie myle? Moze wlasnie to podejscie jest poprawne by miec klienta a zapis do bazy w ejb?

  2. Co mi da to ejb? tzn chodzi mi o to, ze z podejsciem ze klient jest w j2se i wywoluje "cos" na serwerze co zrobi mi zapis do bazy, to w sumie moze to byc rownie dobrze jakis webservice, prawda? Co lepszego da mi tutaj ze uzyje ejb?

  3. Zakladajac ze ide wlasnie tym pomyslem, powiedzcie mi jeszcze taka jedna rzecz-klient czeka na zmiane w katalogu, przychodzi nowy plik-wiec go czyta, parsuje.. i.. wlasnie - co mialoby isc do takiego ejb? Plik? Sparsowany plik? A moze tablica juz gotowych obiektow (bedacych wynikiem parsowania pliku oraz zapisania tego do odpowiednich pol w odpowiednim obiekcie)? Czy taki ejb powinien dostac juz liste gotowych obiektow do zapisu? czy moze wlasnie powinien zrobic troche wiecej logiki, tj sparsowac i przygotowac obiekty?

pzdr

0
  1. I tak musisz mieć dodatkową aplikację jaką jest baza danych ;) Ogólnie jest teraz moda na wielowarstwowe aplikacje bo pozwala to uniezależnić od siebie wiele elementów, pozwala na lepsze bezpieczeństwo etc
  2. Gdybyś chciała użyć Stateless EJB to faktycznie jest ono łudząco podobne do Webservice'u. Wydaje mi się jednak że EJB działa szybciej bo nie ma narzutu xmlowego, ale z drugiej strony aplikacje korzystające z EJB muszą być w Javie, a Webservice nie ma tego ograniczenia. Ale jeśli użyjesz JPA to nie musisz się martwić o jakiegokolwiek SQLa i pisanie zapytań - wystarczy że sobie dodasz adnotacje do odpowiednich klas a kontener i dostawca JPA sami się zajmą wszystkim.
  3. To zależy od ciebie ale w tym wypadku parsowaniem chyba powinna zajmować się aplikacja kliencka, bo jak ktoś wrzuci do monitorowanego katalogu kilkuset megabajtowy klik albo jeszcze większy to co? Zabijesz użytkownikowi sieć aż sie nie uploaduje na serwer a na serwerze zabijesz quotę? ;]
0

No dobra, to ciagnac dalej temat ejb.. jakiego w tym wypadku powinnam uzyc? w sumie to kojarze tylko te MessageDriven (o ile dobrze pamietam), te ktore nasluchuja na wiadomosc - ale na pewno nie taki jest mi tu potrzebny.. wiec ktory-ten stateless czy jakis inny?

No i jesli aplikacja kliencka ma robic parsowanie i przygotowac mi juz obiekty ktore zostana wyslane do ejb-a ten mi tylko je zapisze, to:

  1. I po str klienta i po str ejb musze miec klasy ktore beda mi odwzorowywac tabele w bazie. Czy to nie bedzie duplikowanie kodu? A moze powinnam wydzielic jeszcze osobno mini-bilioteke z takimi klasami i zaimportowac to i w aplikacji klienta i w ejb?

  2. czy JPA to tez DAO?

pzdr i dzieki za wszystkie odpowiedzi :)

0
  1. To zależy od ciebie jak to zrobisz ;]
  2. Nie, JPA dostarczy ci ORM, zarządzanie transakcjami i cały mechanizm persystencji. W efekcie dodanie nowego elementu do bazy w twoim DAO to będzie coś w stylu:
em.getTransaction().begin();
em.persist(obiekt);
em.getTransaction().commit();

Przeleć sobie ten tutorial:
http://jaiswaltraining.com/jpa/index.php

0

Wiesz mysle ze powoli zaczynam ogarniac, ale zrodzilo mi sie znow pare pytan (w ogole wybacz ze tak Cie zasypuje pytaniami ale czasem lepiej pogadac z kims doswiadczonym niz spedzac cale dnie na forach i tutorialach - bo czasem po prostu ciezko zaczac bez zadania paru pytan osobie ktora to po prostu kuma):

  1. Czy EntitiyManager nie powinien byc singletonem? Bo tak to sobie wyobrazam ze to jest cos na zasadzie polaczenia/zarzadcy polaczenia? Wiec
    moze warto miec jedna jego instancje? Z drugiej str - chyba warto tez po wykonanej transakcji zamknac takie polaczenie, bo w sumie nie wiadomo
    kiedy znow sie odwolam by wykonac cos na bazie (moze dopiero za 2 dni to po co ma byc polaczenie otwarte?)

  2. Czy JPA = transakcyjnosc? Czy ja musze o to sama zadbac?

  3. Tworze klasy ktore sa odwzorowaniem moich tabel + dla kazdej takiej klasy tworze klase obslugujaca jej zapytania (czy na pewno nie jest to DAO?)

  4. Z tego co widze, to JPA moglabym uzyc tez w stand-alone aplikacji.

  5. Z tego co tam pisza to do JPA moge uzyc dostawcy - Hibernate lub TopLink - co bedzie w tym przypadku lepsze/prostsze?
    Wlasciwie teraz troche nie kumam, bo pisaliscie wczesniej ze Hibernate nie jest JPA. A moze jest to po prostu nakladka na JPA?

  6. Czy ejb mi pojdzie na Tomcat? Czy musze miec JBoss?

  7. W przypadku ejb widze ze dla kazdej klasy ktora odzwierciedla mi tabele w bazie, pisze interfejs a potem klase ktora mi to implementuje
    (czyli wszystkie metody jakie chce typu select/insert/update etc) - czy to oznacza ze dla kazdej takiej klasy (mojej tabeli w bazie)
    ja potrzebuje osobnego ejb? Wiec bede miala tyle ejb ile tabel? Czy to nie tak?

  8. Jak ja sie z takiego programu klienckiego (j2se) odwolam do takiego ejb?

  9. Czy dobrze rozumiem - JPA konfiguruje mi polaczenie z baza (gdzie dane do tego trzymam w xml) i daje mi api z ktorego korzystajac
    moge dodawac/usuwac/updateowac (itd) pola bez koniecznosci uzywania sql?

pzdr :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1