Serwer aplikacji Java + Linux

0

Po przeczytaniu chyba kilkunastu postów, mam pytanie, jestem początkujący w Javie - ale od ponad 10 lat piszę w Delphi i PHP. Mam do napisania dla firmy w której pracuję cudo w javie które na linuxie działa jak usługa, nic nie robi do czasu kiedy ktoś zapisze w folderze plik (nic wielkiego xml który zawiera fakturę/faktury) kiedy taki plik się pojawi ma stworzyć wątek który to załaduje ten plik sparsuje sprawdzi czy ktoś się nie pomylił np. w numerze nip, etc. wrzuci do tabeli w bazie danych fakturę, wygeneruje na jej podstawie ładny dokument w pdfie i wyśle emailem do Pani Krysi, która go przeklepie do dosowego programu księgowego. Niby nic - w windowsie bym to napisał w sekund 200 ale założenie jest java na linux - więc się produkuję w tym kierunku. Czytając tu i ówdzie wyszło że pomysł użycia do tego Springa jest średnio dobry, Czy spotkał się ktokolwiek z przykładem w javie który robił podobne rzeczy czyli uruchamiał wątek który dodawał rekord do bazy danych a główny program działał 24h/7 dni w tygodniu ? Czego użyć aby nie przesadzić, jak mądrze w jawie to napisać - ma to być możliwie wydajne - faktur nie będzie bardzo dużo (max. kilkadziesiąt dziennie) ale oczywiście każdy będzie wysyłał je o 15:55 czyli pięć minut przed wyjściem do domu i nie chcę aby mi się ciągle wieszał. A jeśli system nie przyjmie i nie przetworzy plików sprawnie to będzie afera, dlatego zastanawiam się czy nie użyć po prostu JDBC i jednej funkcji main ale jestem bardzo ciekawy każdej mądrej doświadczonej opinii jak to się powinno robić w wersji dla poczatkującego i zaawansowanego - słyszałem o EJB'ach i JBossach ale to troszkę za wysokie progi dla mnie.

Pozdrawiam i serdecznie proszę o możliwie obszerną podpowiedź, dziękuję Andrzej

0

Zostaw czekanie na dodanie pliku poleceniu dnotify, skup się na przeróbce xml-pdf. Nie ma co się bawić w usługi, sprawdzanie w pętli zmian w katalogach i inne takie pierdoły, jak istnieje już proste rozwiązanie.

0

Tak abstrahując od tego konkretnego problemu chciałbym poruszyć to, co napisałeś o springu: to nie jest kwestia "spring się nie nadaje", bo mam wrażenie, że nawet nie wiesz do czego on służy i po co się stosuje takie rozwiązania. Wydajność w aplikacji to nie jest sztuka zastosowania jak najmniejszej ilości funkcji i abstrakcji. Wrzucenie wszystkiego do jednego maina brzmi jak jakaś metoda, ale z punktu widzenia tworzenia oprogramowania biznesowego bezwzględnie zła. Jestem w 100% pewien, że równie ważne jest dla ciebie (i twoich pracodawców) łatwe utrzymanie oprogramowania, rozwój, testowanie i co za tym idzie stabilność softu. Po to się stosuje te wszystkie springi, DI, kontenery IoC i masę innych rzeczy.

0

Wrzucenie tego do "jednego maina" to chory pomysł. Zaoszczędzisz może z 5% wydajności kosztem zerowych możliwości dostosowania tego w jakikolwiek sposób. Użycie JDBC jest już znacznie lepszym pomysłem. JEE bym tu może nie zaprzęgał jeśli nie ma żadnych sensownych przesłanek, a skoro to ma działać na jednej maszynie to raczej nie ma sensu.

0

Mozesz uzyc Javy 7? Jesli tak, to tam jest cos co sie nazywa WatchService - dostajesz powiadomienia o zmianie w katalogu(ach) gdy cos sie doda, usunie, zmieni. W Twoim przypadku obserwujesz czy ktos dodal nowy plik, parsujesz go i slesz do bazy.
No wlasnie, do bazy - uzylbym tutaj czystego JDBC, bez zadnych OR/M bo to troche przesada. Tak samo, zadne JBossy czy inne EE bo to armata na muche.
Samo automatyczne uruchomienie aplikacji Java jako usluga pod linuksem to juz prosta sprawa, ale zalezna od dystrybucji. Chyba, ze nie potrzebujesz zeby sie uruchamiala na starcie - wtedy nie ma zadnego problemu.
PDF - znam tylko iText, ale Tobie by sie pewnie przydalo cos w stylu utworzenia wzorca / template z polami w fakturze, i pozniej tylko wypelnianie tego - nie znam nic takiego, ale jak ktos inny zna, to sie chetnie dowiem nazwy, bo sam moglbym skorzystac ;d
Slanie email - prosta sprawa.
Wszystko w main - kiepski pomysl, napisz to porzadnie, te milisekundy ktore 'stracisz' odzyskasz gdy trzeba bedzie kod poprawiac / zmieniac / rozszerzac w momencie pierwszego odpalenia IDE w tym celu.

0

iText pozwala na wypełnianie interaktywnych pdfów (tzn takich z polami w które coś można wpisać) więc bardzo możliwe że pozwala też takie wzorce tworzyć. Poza tym można nim generować pdfy.

0
mućka napisał(a)

PDF - znam tylko iText, ale Tobie by sie pewnie przydalo cos w stylu utworzenia wzorca / template z polami w fakturze, i pozniej tylko wypelnianie tego - nie znam nic takiego, ale jak ktos inny zna, to sie chetnie dowiem nazwy, bo sam moglbym skorzystac ;d

Jest Apache FOP, który robi PDF z pliku xml o określonej, standardowej składni. Trzeba sobie napisać XSL, który konwertuje dane wejściowe na ten format i przepuścić przez procesor. Dokładnie takie wykorzystanie było tematem ćwiczenia na studiach, więc wyjątkowo trudne nie jest. Tutorial jest na w3schools.
Drugie narzędzie to coś, co kiedyś nazywało się Flying Saucer. Robi PDFy z plików XHTML zawierających CSS. Wg mnie łatwiejszy.

0

A czy jest cos takiego jak JasperReports? Dla tych co nie znaja, tam pisze sie w XML wzorzec (jest tez iReports, narzedzie ktore za pomoca GUI tworzy ten XML) ktory opisuje wlasciwosci dokumentu i pol (polozenie, czy maja rosnac z danymi, czy nie, itp), i jak sie eksportuje PDF to podaje sie ten wzorzec, JasperReports kompiluje go i wypelnia danymi. Bardzo by mi pasowalo cos podobnego, ale bez tej calej otoczki ktora ma Jasper, to jest wielka kobyla. Aha, XML moge pisac z palca.
Ten FOP obczaje, moze to jest cos czego szukam. Dzieki.

0

To jeszcze pytanie zasadnicze jaki framework - bo zdania są podzielone ? Wiem że dużo nie wiem, wielu rzeczy nie jestem świadomy. Czytając opinie o nowych frameworkach są różne opinie, ale kieruję się w kierunku Spring (Spring-Batch z Spring-Batch Admin). Kierunek przyjąłem jedynie po przeczytaniu powyższych opinii i znalezionych przykładów użycia - jest ich masa w przypadku nowych frameworków bywa różnie. Jakie opinie sugestie. Faktycznie zignorowałem troszkę pomysł umieszczania aplikacji oczekującej na zdarzenie i kieruję się w kierunku crona i uruchamiania co x minut skryptu gdzie w oknie od 15 ... 17 uruchamianie go z większą częstotliwością a tym samym uzyskując prawie wielowątkowość, połączone z prostym systemem blokowania plików przetwarzanych już przez zmianę jego nazwy. Pomysł może marny ale zawsze jakiś. Analizuję teraz podpowiedzi dotyczące generowania PDFów i faktycznie skłaniam się ku Apache FOP gdyż prostota jego jest porażająca niestety brak bardziej rozbudowanych niż Hello World przykładów też.

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