lunedì 31 maggio 2010

GNU/Linux + Eclipse + JUnit test in debug mode: Cannot connect to VM

Mi stupisco di come ci sia sempre da imparare lavorando con una macchina Linux-based. Rivedendo gli ultimi post si potrebbe iniziare a pensare che non vada molto a genio alla mia Lenny; a me invece, piace pensare che ciò sia dovuto alla mia inesperienza... non smetterò mai di essere un niubbo!
Dopo le vicissitudini con Samba mi sono ritrovato senza possibilità di eseguire dei back up alle JUnit test in Eclipse per il seguente errore

java.net.SocketException: Socket closed
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
at java.net.ServerSocket.implAccept(ServerSocket.java:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.eclipse.jdi.internal.connect.SocketTransportService
.accept(SocketTransportService.java:95)
at org.eclipse.jdi.internal.connect.SocketTransportImpl
.accept(SocketTransportImpl.java:56)
at org.eclipse.jdi.internal.connect.SocketListeningConnectorImpl
.accept(SocketListeningConnectorImpl.java:135)
at org.eclipse.jdt.internal.launching.StandardVMDebugger$ConnectRunnable
.run(StandardVMDebugger.java:107)
at java.lang.Thread.run(Thread.java:619)


Divagazione letteraria
JUnit è un framework java che permette di scrivere test automatici. Una lettura introduttiva sull'argomento si trova in questo articolo dell'IBM. Nell'ambito del processo di Continuos Integration nello sviluppo e mantenimento di un prodotto software la parte di test automatici ha sempre un aspetto importante e ne garantisce una certa qualità, o per lo meno garantisce il controllo sugli impatti di modifiche apparentemente non correlate a certe parti di codice.

Soluzione
Tornando invece al problema contingente di Eclipse, non ho trovato molto a riguardo a meno di questo commento di Oliver nel forum di Oracle (... addio SUN) che si è rivelato essere risolutivo.
Il mio file di configurazione /etc/hosts era incompleto. Infatti mancava l'entry
127.0.0.1 localhost
Solo per appunto il file /etc/hosts mappa la risoluzione di alcuni nomi (come farebbe un DNS) in modo che i programmi che necessitino di questo servizio possano interrogare il file prima del DNS (link). Mancando l'entry precedente il povero Eclipse non potevacreare un socket in localhost non riuscendo a trovare l'indirizzo ip 127.0.0.1

0 commenti:

Posta un commento