2009-03-04 14 views
5

Sto lavorando su Java < -> interazione Perl. Mi piacerebbe sapere qual è il modo migliore per passare le informazioni da Perl a Java. (Grandi risposte su Perl e Java here e here btw).Come posso passare i dati da Perl a Java?

C'è molto testo e XML (XML :: Twig) Sto analizzando in Perl, in uno script che dovrei chiamare da un'app Web Java. Quindi ho raccolto tutti questi dati e ne ho bisogno per usarli all'interno di determinati oggetti in Java.

Quale potrebbe essere una buona strategia per inviare le informazioni da Perl a Java? È persino possibile restituire un oggetto o un'altra struttura di dati compatibile da Perl a Java?

Immagino che scrivere su un file di testo e leggerlo da Java renderebbe l'ottimizzazione ottenuta usando Perl senza significato.

Perlformance è un problema importante qui.

EDIT: Da quello che ho visto here, forse Inline-Java sarebbe una buona opzione?

+0

quindi stai cercando di trasformare il tuo vecchio codice Java in perl? – TStamper

+0

1. prova JSON 2. sbarazzarsi di perl e utilizzare solo Java :) –

+0

Stavo leggendo il post di quella domanda e mi è stato consigliato di usare JSON, Inline-Java, aprire TCP Connection e trasferire i dati e infine direttamente passare XML. * Quale è migliore tra gli approcci suggeriti? * Ci sono altre opzioni migliori per farlo, per quanto riguarda i servizi Web o altri suggerimenti? – Rachel

risposta

5

Se le prestazioni sono importanti, si consiglia di eseguire un processo Perl persistente. Avviare un interprete Perl ogni volta che vuoi eseguire il tuo codice sarà un bel sovraccarico.

Il modo più semplice per comunicare è che il processo Java apra una connessione TCP ai processi Perl, scriva alcuni dati e ne recuperi alcuni.

Il formato utilizzato per inviare dati dal processo Perl a quello Java dipende da ciò che si sta inviando e quanto generico e riutilizzabile si desidera che il codice sia. L'invio di stringhe XML sarà piacevole e generico, ma l'invio di matrici di byte create con pack in Perl e quindi la lettura di una con DataInputStream in Java sarà molto, molto più veloce.

+0

In realtà è possibile utilizzare Inline :: Java in questo modo. Può creare un processo jvm che comunica con il tuo processo Perl. È un formato o corso personalizzato, ma consente di utilizzare oggetti Java nativi in ​​Perl e viceversa – mpeters

2

se hai già XML, l'opzione migliore è probabilmente continuare a usarlo.

+0

La nostra prima implementazione aveva analizzato Java gli XML, ma abbiamo scoperto che Perl è molto più veloce e più efficace nel farlo. Quindi stiamo cercando di derivare quel lavoro a Perl che è migliore. –

+0

Probabilmente stai facendo qualcosa di molto strano se Perl sta analizzando XML più velocemente di Java. –

+0

Stavamo usando xPath per navigare nei file XML e ottenere i valori del nodo; ma, Perl non è orientato a quel tipo di lavoro (analisi del testo e cose del genere) ?? –

3

JSON è un formato semplice e leggero per il trasferimento dei dati.

è possibile aggiungere Rhino o qualcosa di simile al proprio toolkit e ottenere prestazioni aggiuntive (per non parlare di un motore di scripting), ma ciò dipenderà dalla complessità della pianificazione del progetto.

0

Inoltre trovo strano che il codice perl per l'analisi XML sia significativamente più veloce del codice equivalente in java. Anche se lo fosse, comunque, non posso immaginare che sarebbe mai più veloce del sovraccarico sostenuto dall'IPC. Anche se utilizzi un processo persistente perl, dovrai comunque inviarlo dati, presumibilmente tramite un socket, quindi recuperare alcuni dati e infine deserializzarli in qualcosa di utilizzabile.

Hai provato a migliorare le prestazioni dell'analisi XML in java? Se stai usando DOM o una libreria di terze parti come JDOM o castor, prova ad usare invece SAX. O forse solo usando le espressioni regolari invece di parsing XML sarebbe più veloce (jwz notwithstanding).

In ogni caso, mi consiglia di utilizzare un profiler con il codice Java per vedere se può essere migliorato.

+1

Esiste una libreria di analisi XML perl pura, ma nessuno a cui importa della velocità lo utilizza. La maggior parte dell'analisi XML perl prevede expat o libxml2 sotto il cofano che è veloce. – runrig

+0

Non vedo come questo possa fare molta differenza. Anche se l'analisi XML raw è significativamente più veloce, hai ancora il sovraccarico IPC. –

2

Inline::Java. Funziona molto bene una volta installato e funzionante.Qualche anno fa stavo lavorando a un progetto in cui un'applicazione web Perl comunicava con un server SOAP Java per alcune comunicazioni in tempo reale ed era semplicemente troppo lenta. Lo abbiamo sostituito con un sistema che utilizzava Inline :: Java per la comunicazione ed è stato molto più veloce. Sicuramente minimizza i punti in cui passi gli oggetti avanti e indietro e cerca di rendere semplici quegli oggetti (siamo bloccati con stringhe, numeri e matrici) per evitare che le cose vadano troppo fuori controllo. Ma sono decisamente un convertito!

Problemi correlati