Reputation: 315
so I am trying to setup an embedded jetty 9 server. However when I try:
mvn clean compile exec:java
The execution halts at :
INFO:oejs.Server:com.main.SimpleServer.main(): jetty-9.0.0.RC2
After a while I get exceptions like:
WARN:oejuc.AbstractLifeCycle:com.main.SimpleServer.main(): FAILED org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110e keys=-1 selected=-1: java.io.IOException: Unable to establish loopback connection
java.io.IOException: Unable to establish loopback connection java.net.ConnectException: Connection refused: connect
My code looks like this:
public class HelloHandler extends AbstractHandler {
final String _greeting;
final String _body;
public HelloHandler() {
_greeting = "Hello World";
_body = null;
}
public HelloHandler(String greeting) {
_greeting = greeting;
_body = null;
}
public HelloHandler(String greeting, String body) {
_greeting = greeting;
_body = body;
}
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>" + _greeting + "</h1>");
if (_body != null) response.getWriter().println(_body);
}
}
and
public class SimpleServer {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
server.setHandler(new HelloHandler());
server.start();
server.join();
}
}
my pom.xml looks like:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TestJetty</groupId>
<artifactId>TestJetty</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<jettyVersion>9.0.0.RC2</jettyVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jettyVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-websocket</artifactId>
<version>7.4.4.v20110707</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jettyVersion}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jettyVersion}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution><goals><goal>java</goal></goals></execution>
</executions>
<configuration>
<mainClass>com.main.SimpleServer</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
Upvotes: 2
Views: 7848
Reputation: 1
Jetty server was configured and working for me. on one fine day it start giving "Unable to establish loopback connection" error. I have restated my machine and it starts working again .So I think this error is totally related to windows operating system.
Upvotes: -1
Reputation: 49462
This means something about your localhost loopback is either misconfigured (such as reporting as a non loopback IP address), or being prevented from being used by something (most common cause being microsoft windows policy decisions and firewall rules).
Less common is a machine that does not have IPv4 available (only IPv6).
Try compiling and running this...
package stackoverflow.jetty;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
public class AddrList
{
public static void main(String[] args)
{
try
{
InetAddress loopback = InetAddress.getLoopbackAddress();
dump("Loopback",loopback);
}
catch (Throwable t)
{
System.out.println("Unable to getLoopbackAddress()");
t.printStackTrace();
}
try
{
InetAddress localhost = InetAddress.getLocalHost();
dump("LocalHost",localhost);
}
catch (Throwable t)
{
System.out.println("Unable to getLocalHost()");
t.printStackTrace();
}
try
{
InetAddress alladdr = InetAddress.getByName("0.0.0.0");
dump("0.0.0.0",alladdr);
}
catch (Throwable t)
{
System.out.println("Unable to getLocalHost()");
t.printStackTrace();
}
try
{
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface iface : Collections.list(nets))
{
try
{
System.out.println("DisplayName = " + iface.getDisplayName());
System.out.println("Name = " + iface.getName());
List<InetAddress> addrs = Collections.list(iface.getInetAddresses());
int i = 0;
for (InetAddress addr : addrs)
{
dump(Integer.toString(i++),addr);
}
}
catch (Throwable t)
{
System.out.println("Unable to InetAddress for NetworkInterface: " + iface.getDisplayName());
t.printStackTrace();
}
}
}
catch (SocketException e)
{
System.out.print("Unable to get all network interfaces");
e.printStackTrace();
}
}
public static void dump(String type, InetAddress addr)
{
String header = String.format("[%s] InetAddress",type);
try
{
System.out.println(header + " = " + addr);
System.out.println(header + ".isAnyLocalAddress = " + addr.isAnyLocalAddress());
System.out.println(header + ".isLinkLocalAddress = " + addr.isLinkLocalAddress());
System.out.println(header + ".isLoopbackAddress = " + addr.isLoopbackAddress());
}
catch (Throwable t)
{
System.out.printf("[%s] Failed to list InetAddress details%n",type);
t.printStackTrace();
}
try
{
header = String.format("[%s] InetSocketAddress",type);
InetSocketAddress isockaddr = new InetSocketAddress(addr,8080);
System.out.println(header + " = " + isockaddr);
System.out.println(header + ".isUnresolved = " + isockaddr.isUnresolved());
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
This should list all variations of Network Interfaces on your machine. If you have an error or exception you will need to address that first, before you can start Jetty on that machine.
On a normal machine you see the following output:
[Loopback] InetAddress = localhost/127.0.0.1
[Loopback] InetAddress.isAnyLocalAddress = false
[Loopback] InetAddress.isLinkLocalAddress = false
[Loopback] InetAddress.isLoopbackAddress = true
[Loopback] InetSocketAddress = localhost/127.0.0.1:8080
[Loopback] InetSocketAddress.isUnresolved = false
[LocalHost] InetAddress = lapetus/127.0.1.1
[LocalHost] InetAddress.isAnyLocalAddress = false
[LocalHost] InetAddress.isLinkLocalAddress = false
[LocalHost] InetAddress.isLoopbackAddress = true
[LocalHost] InetSocketAddress = lapetus/127.0.1.1:8080
[LocalHost] InetSocketAddress.isUnresolved = false
[0.0.0.0] InetAddress = /0.0.0.0
[0.0.0.0] InetAddress.isAnyLocalAddress = true
[0.0.0.0] InetAddress.isLinkLocalAddress = false
[0.0.0.0] InetAddress.isLoopbackAddress = false
[0.0.0.0] InetSocketAddress = /0.0.0.0:8080
[0.0.0.0] InetSocketAddress.isUnresolved = false
(snip ... long list of other interfaces)
This shows me that all 3 choices: loopback, localhost, and 0.0.0.0 (any interface) work as possible listeners for Jetty.
Lastly, upgrade to final non-RC Jetty 9.0.0.v20130308.
Upvotes: 2