Java po stronie serwera / CGI

0

Siemka,

Czy Java może być wykorzystywana po stronie serwera jak skrypty cgi?
Jeżeli tak to rozumiem ze najpierw trzeba by było ją przekompilowac?

Najlepiej jakby ktoś mógł rozwinąc temat
Chciałem też zapytać o możliwości pod tym katem js, widziałem na necie przyklady z cgi-node ale srednio mi to chce ruszyc.

Dzieki za odpowiedz

0

Ogólnie to słaby pomysł wykorzystywać javę do CGI. (CGI to generalnie kiepska technologia).
Ale jeśli jakoś jesteś zmuszony i nie możesz normalnego serwera postawić to warto użyć nowego feature czyli kompilacji aot:
http://openjdk.java.net/jeps/295

btw. wiadomo, że skompilowane programy są relatywnie powolne (tyle, że szybko sie startują w odróżnieniu od normalnego odpalania jvm)

0

Niestety docelowy serwer to boa na małym uClinux, potem sobie przejże na spokojnie tą dokumentacje. z tego co tak na szybko na temat Aot spojrzalem to kompilowanie języka np javy na natywny (maszyny-> assembler?). Zakładając ze dobrze rozumiem i dokonałbym już takiej kompliacji na język natywny to jak takie coś wykorzystać od strony serwera? Pisanie w Perlu mnie trochę odstrasza, a po sprawdzeniu krótkich skryptów to Python powoduje dwa razy większe zużycie niż perl, co w przypadku serwera embedded, może mieć tam jakieś znaczenie.

I jeszcze takie pytanie moge np z takiego skrypty w Pyhonie czy tam czymkolwiek odpalic biblioteke napisaną np w javie?

0

Teraz to Cie nie rozumiem. Zakładalem, że chcesz uruchamiać programiki javowe przez CGI. Co ma do tego perl czy python?
Btw. Z pythona mozesz javę na kilka sposobów wywołać. Nie tozumiem tylko skoro już bedziesz pisał w pytonie po co Ci java. I odwrotnie na co Ci ten pyton jak masz javę.
Technicznie skoro możesz odpalić javę to możesz odpalić też server w javie i olać to boa, czy też zobaczyć czy sie da go zamienić w przelotkę/proxy do javowego. (Tak się robi z apache-httpd).

EDIT:Już doczytałem. Ten boa nie ma żadnego proxy raczej. Bieda.

0

Do kompilacji Javy do natywnej binarki możesz użyć https://www.graalvm.org/docs/reference-manual/aot-compilation/ Musisz jednak mieć odpowiednie biblioteki w systemie:

Prerequisites

To build a native image of your program use the native-image utility located in the bin directory of the GraalVM distribution. For compilation native-image depends on the local toolchain, so please make sure: glibc-devel, zlib-devel (header files for the C library and zlib) and gcc are available on your system.

0

Co po stronie serwera chcesz robić i jaki sprzęt jest pod tym uClinuksem?

0

@jarekr000000: Bardzo możliwe ,że bredze bo nie do końca ogarniam temat wiec czekam mile widziana zjebka za bledy w myśleniu :p Tak, taki był zamysł pytania zeby odpalic jave jako cgi, a drugie pytanie "I jeszcze takie pytanie moge np z takiego skrypty w Pyhonie czy tam czymkolwiek odpalic biblioteke napisaną np w javie?" to mialem taka mysl, bo nie wiem używać Pythona (a gdyby sie nie dalo zbytnio zrobic cgi z javy) to z tego co widze Perl mniej obciąza układ ale za to srednio chce mi sie w nim pisac. Bo z szybkiego reseachu Pythona jak wyglada pod wzgledem implementowania funkcjonalność tzn. jeżeli chodzi o dostęp do COM, jakies timery itd chyba jest ok. za to w perlu bym sie je... :D
Znaczy wolałbym to oczywiście zrobić za pomocą jednego języka, wątpliwości dotyczą tego co najmniej obciązy procek.

@Wibowit jak przekompiluje do binarki na kompie A to po wrzuceniu do kompa B (gdzie jest serwer) bedzie ten plik smigał?

@yarel serwer ma umożliwić konfiguracje urządzenia a także mieć możliwość synchronizacji czasu z neta -> czyli muszę moc korzystać z portu COM, timery, wysyłanie ramki
A sprzet to XPORT PRO, na razie działam pod raspberry zeby sprzetowo zbliżone.
Tylko nie wiem jak tak wyglada do końca wrzucanie plikow i obsluga tego, sprzet bede mial dopiero za jakis czas ( w pracy wolno zamawiaja)

Dzięki Panowie za zainteresowanie, jak bredze to możecie mnie na kierować na dobry tok rozumowania ;)

0

Na raspi AOT kompilacja podobno działa. Natomiast skoro to jest taki sprzęt to nijak nie rozumiem na kiego grzyba jest tam to boa. Jakim cudem Cię do korzystania z tego zmuszą ? wywal /skasuj/ zamieć - opornym ludziom zalutuj otwory gębowe. Powiedz, że bez boa bedzie lepiej. (bo będzie)
Postaw normalnie serwer w javie, nawet nie baw sie w żadne CGI, ani kompilacje AOT. Rób normalnie, jak ludzie. Profit.

0

@jarekr000000: boa jest w specycikacji tego urzadzenia jako dedykowana biblioteka jako web server, ciezko mi powiedziec jak to wszystko wyglada. W sumie to mnie nikt nie zmusza, bo na poczatku pisalem programy w C# ale pojawil sie inny temat i jest na zasadzie "wez Pan to zrob" a u nas są dwie osoby piszące cokolwiek ja i gosciu z c++ wiec nie ma kogo sie dopytac :| To jakie technologie polecasz zeby to bylo jak najmniej obciązające i żeby też sie nie namęczyc?
Szczerze powiedziawszy nie mam duzego rozenania w javie, pisalem programy w springu i tam zeby uruchomic server uzywalem Tomcat'a ale pewnie można też zrobić to na zasadzie Http server = new HttpServer... tylko wtedy pewnie bez widokow itd?
Robiłem wcześniej server w pracy (C#) ale to tylko komunikacyjny po udp (nasluchiwanie - odbieranie - generowanie odpowiedzi - odpowiedz ).

1

Najmniej obciążający (względnie popularny) serwer w javie to chyba ratpack. To jest tzw. non blocking server. Prędzej czy później będziesz musiał poznać co to znaczy. (Jeden watek starczy każdemu). Możesz jeszcze obejrzeć sparkjava. Lub bardzo klasycznie jetty. O tomcacie zapomnij - szkoda czasu. (Jetty jest prawie jak tomcat (wspiera servlety), a o wiele łatwiej coś napisać).

1

Nie do końca rozumiem problem jaki chcesz rozwiązać, tzn. mam pewne przypuszczenia, które streściłbym jako "chcę zarządzać urządzeniami z przeglądarki".

Co powiedziałbyś na takie klocki:
Klient webowy -->** Bramka Rest-SNMP** -- Urządzenie z agentem SNMP.

  • Klient webowy - Twoja przeglądarka z jakimś Java Scriptem wołąjącym resta.
  • Bramka Rest-SNMP - Twój dedykowany serwer webowy z ulubionym stosem technologicznym, zapewnia konwersję REST<->SNMP
    Na urządzeniu możesz mieć agenta SNMP i rozszerzyć go o skrypty shellowe, które coś na danym urządzeniu dziobią (myślę tu o czymś mega prostym, np. skrypt korzystający z file systemu /proc: echo 1 > /proc/costam/diody/commands - zależnie od tego jak wygląda abstrakcja danego urządzenia w proc )

Materiały poglądowe:
http://www.net-snmp.org/
https://geekpeek.net/extend-snmp-run-bash-scripts-via-snmp/
https://dzone.com/articles/restful-snmp-over-http
https://github.com/rhuitl/uClinux/tree/master/user/net-snmp

-- edited: Nie napisałem tego wprost, ale serwer webowy widziałbym poza samym urządzeniem.

0

Jest takie coś jak tomcat i to jest tez zainstalowane wraz z serwerem apache w pakiecie xamp pod linuksem też masz i tam sie uruchamia pliki .java tak jak skrypty.

1

Zrób to w C/Go/Rust - jak człowiek.
https://docs.rs/serialport/2.3.0/serialport/
https://github.com/jacobsa/go-serial
http://xanthium.in/Serial-Port-Programming-on-Linux

Zapomnij o skryptach, chyba  że chcesz potem instalować dodatki zaimplementowane w... powyższych językach.

Java miałaby minimalny sens gdybyś:

  • mógł postawić coś więcej niż CGI
  • miał całe rozwiązanie oparte o Jave i musiał dorobić jeden moduł COM
  • miał kontrolę nad środowiskiem i mógł sobie zainstalować JRE jakie Ci tam pasuje

Edit: A tak w ogóle, to w przypadku XPort Pro to rozmowa o COM to chyba nie ten poziom abstrakcji?
Z tego co zrozumiałem to jest to port LAN podłączony przez szeregowy?
To raczej by pasowało tym się zainteresować:
http://www.mosaic-industries.com/embedded-systems/instrumentation/lantronix-xport-wiport-ethernet-wifi/c-examples/webserver-embedded-email-server

0

Po przeczytaniu postu @vpiotr, który odrobił lekcję i zajrzał do specyfikacji... zagadzam się, że najlepiej chyba iśc w go.
Tam jest 8/16MB RAM (to zupełnie nie ten poziom co Raspi). Generalnie Java jest przy tych wartościach niepewnym rozwiązaniem. Trzeba by sprawdzić czy coś w ogóle ruszy.
W latach 90tych męczyłem się mając 8MB na linuxu z javą.

EDIT:
Właśnie widze, że tam jest Freescale ColdFire czyli potomek rodziny Motorola 68k.
Taki procek się nawet wygodnie w asm programuje :-)

0

@jarekr000000: : przeklikalem sobie troche ten serwer i z tego co wyklikalem widze ze taki ratpack inaczej sie zachowuje niż to co odpalalem za pomocą gradla albo tomcata (kontrolery z adnotacjami nie działaja tylko te ktore zaimplementuje się w ratpacku).

@yarel niestety musi to byc na urządzeniu z tego musi być też podłaczenie na wporst kablem bez sieci odpalenie przegladarki ustawienie tego co sie chce (wiem ze można by to dla tego przypadku zrobic apka ale takie mam wytyczne ).

@vpiotr z tego co przeczytalem te metody służa do obsługi serialport ale pozostaje kwestia serwa która miałby rozwiązać http://www.mosaic-industries.[...]bserver-embedded-email-server?
Znaczy ten XPORT to z tego co rozumiem to LAN - Linux - serialPort (Uart) chociaż nie do końca rozumiem jak to jest widziane z linuxa, chyba jako port com? no bo raczej nie mamy dostępu do pinów jak w przypadku procka zeby sobie ustawic tranmisje uratu itd.

@jarekr000000 faktycznie poniosło mnie troche z tym Raspi :DD no w tym module jest 16/16 ale to i tak mało :)
Nieno pod assemblerem to bym się chyba zajechał, nawet na polibudzie już sie nikomu nie chce w nim pisać :p

Czyli podsumowując:

  • Przy tych zasobach i braku bezpośredniego dostępu do środowiska Java i jej serwery odpadają lub jest to rozwiązanie bardzo niepewne.
  • Jeżeli serwer typu boa + cgi to trzeba trzeba użyc bibliotek podanych przez @vpiotr

Temat jest dość abstrakcyjny także dzięki ,że ktoś się interesuje :)

0

Jeżeli Java jest za ciężka do tego sprzętu, to chyba trzeba zmienić sprzęt.

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