Domanda

Ho una situazione in cui devo inviare comandi a un'applicazione java in esecuzione, ora sto usando il socket tcp / ip per inviare comandi all'applicazione utilizzando una voce di menu di scelta rapida di Internet Explorer. Ma non appena l'applicazione viene avviata, gli scanner antivirus si lamentano che l'applicazione ha iniziato ad ascoltare, anche se sto solo ascoltando le connessioni locali. Penso che questo possa essere fonte di confusione per gli utenti. Sto cercando altri modi di comunicare senza far incazzare gli scanner av?

È stato utile?

Soluzione

Per questo, è meglio avere una coda FIFO basata su file. O usando Java Native Access / Java Native Interface per scrivere su un NamedPipe o su una memoria condivisa. Se segui il percorso JNA / JNI, potresti creare un Evento denominato .

Ma probabilmente non c'è modo di fare quello che vuoi, con qualsiasi quantità di efficienza senza seguire la rotta JNA / JNI.

Altri suggerimenti

Puoi usare Java Management Extentions (JMX) per esporre i metodi in un processo in esecuzione attraverso una semplice interfaccia web.

I socket sono praticamente il modo tradizionale di fare IPC, ma se davvero vuoi evitarli, potresti essere in grado di trovare una soluzione usando il locale filesystem. Non vorrai usare letture / scritture di file standard, dal momento che molto probabilmente vorrai implementare una coda nel filesystem.

Se I implementasse IPC attraverso il filesystem, probabilmente userei SQLite ( che può essere thread-safe una volta compilato) e avere una tabella per ogni listener. Probabilmente userei una tabella a colonna singola per inserire il messaggio e l'ascoltatore estrarrebbe la riga con il rowid , quindi elimina detta riga.

Ma il mio approccio non è affatto specifico di Java, quindi potrebbero esserci modi migliori per farlo usando Java (come la risposta di @ darthcoder).

Molte persone usano qualcosa come JMS in questo scenario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top