Perché Java richiede un servlet container per un semplice servizio RPC?

4

Ho un grande controller di database che è scritto in Java. Il controller legge le informazioni dal database e le interpreta in strutture di dati che vengono quindi visualizzate in una CLI.

Java è stato scelto perché scrivere codice in esso è veloce e facile. Ora voglio creare un server RPC sulla parte superiore del controller (XML-RPC o JSON-RPC per le future chiamate AJAX), ma sembra che abbia bisogno di un contenitore servlet per il mio servizio RPC. Sono confuso perché l'anno scorso quando avevo bisogno di questo tipo di capacità per un altro progetto in python, mi ci sono voluti meno di 5 minuti per creare la stessa funzionalità usando SimpleXMLRPCServer

La stessa facilità di creazione si applica anche a C # per quanto ricordo.

Ma in Java la storia è diversa; ora ho bisogno di un servlet e quindi di un servlet container (cioè Tomcat, Jetty), il che significa che ho bisogno di installare e mantenere server web. Da quello che posso dire, JSON-RPC richiede Spring framework per funzionare.

Ho già trascorso circa due ore ad apprendere la progettazione e l'ordinamento di Tomcat come funziona senza scrivere una sola riga di codice.

Ho cercato sul Web e ho scoperto che ho opzioni autonome: posso usare questa libreria , ma non sembra mantenuto ed è anche un po 'complesso (sto cercando qualcosa con decoratori / annotazioni).
L'altra opzione che ho trovato è quella di utilizzare il cosiddetto molo "embedded" e quindi provare a impostarlo e configurarlo tramite il codice che sembra anche un compito noioso.

Perché non esiste un meccanismo autonomo per un'interfaccia così popolare? Mi sto perdendo qualcosa qui?

    
posta Guy L 08.03.2013 - 12:25
fonte

4 risposte

5

Presupposti errati

Il presupposto che tu abbia bisogno di servlet e server è mal guidato e scorretto . ci sono un sacco di server HTTP incorporabili in Java , alcuni sono classi singole, non sono server completi, ma un server HTTP è solo un protocollo basato su socket TCP / IP. L'API Servlet è solo una bella astrazione lontana dai dettagli.

Non vuoi fare RPC, vuoi REST

Avrai bisogno di un contenitore Servlet minimo per usare qualcosa che acceleri il tuo sviluppo come RESTEasy.

    
risposta data 08.03.2013 - 13:19
fonte
1

Le funzionalità enterprise di Java (come quelle in JEE) non sono implementate da Oracle / Sun e sono invece contenute nelle specifiche Java Enterprise Edition.

Di conseguenza esistono numerose implementazioni dei server delle applicazioni: Tomcat, Jetty, WebSphere, ecc., che implementano diverse parti delle specifiche JEE.

Poiché si utilizzano le funzionalità Java aziendali, è necessario un server delle applicazioni, quindi la situazione attuale.

Jetty è un server molto leggero e potresti avere un po 'di fortuna se hai problemi con Tomcat.

Capisco da dove vieni, fare questo genere di cose in .NET è banalmente semplice, Java ha bisogno di un po 'più di lavoro per arrivarci, ma il risultato alla fine è lo stesso.

    
risposta data 08.03.2013 - 12:52
fonte
0

È possibile avviare semplicemente un'istanza di Jetty dal codice, senza un file web.xml o alcun tipo di configurazione servlet.

Ciò è possibile implementando un gestore personalizzato e passandolo all'istanza del server, ignorando così completamente l'API del servlet.

HttpServletRequest e HttpServletResponse sono ancora usati, quindi tutto è estremamente simile, tranne che sembra molto più simile a fare una cosa simile in python ^^

Il lato negativo è che è molto meno frequente farlo, quindi google potrebbe non essere del tutto così utile.

D'altro canto, le differenze nell'utilizzo dell'API del servlet sono davvero ridotte, quindi quando qualcosa va profondamente male, probabilmente finirai con messaggi di eccezioni molto simili e tracce di stack, quindi non sarai del tutto da solo caso le cose dovrebbero un giorno decidere di prendere una piccola traccia laterale in discesa ^^

    
risposta data 07.03.2017 - 22:52
fonte
-2

Vuoi creare un server e sei sorpreso di dover installare e mantenere il software del server?

Il "concetto o visione" a cui stai andando incontro è l'idea che se stai usando un server, dovresti davvero usare qualcosa di solido e maturo che può essere monitorato con strumenti standard, invece di eseguire solo del codice e inizia a lanciare i tuoi strumenti di amministrazione non appena vuoi fare qualcosa di più con esso.

Inoltre, non è come se impostare Tomcat (per non parlare di Jetty) fosse così complesso. Non devi capire tutte le sue capacità per usarlo per un progetto semplice come questo.

    
risposta data 08.03.2013 - 12:50
fonte

Leggi altre domande sui tag