Rohit Bajaj
asked on
java.net.BindException: Address already in use But process keeps on running
Hi,
I am using embedded jetty to start my spring MVC project. Here is my main file :
I start the application like :
In the log file i see the following output :
Now ideally my process should have shutdown. But i see the process running when i do
ps -ef | grep snippet
502 35205 34773 0 6:47PM ttys001 0:04.82 /usr/bin/java -DFLOCK_APPS_CONFIG=stagin g -jar target/snippet.jar
Even after the Exception is thrown. How can i make it stop if this happens .
Thanks
I am using embedded jetty to start my spring MVC project. Here is my main file :
package org.directi.code;
import org.apache.log4j.PropertyConfigurator;
import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.SimpleInstanceManager;
import org.eclipse.jetty.annotations.ServletContainerInitializersStarter;
import org.eclipse.jetty.apache.jsp.JettyJasperInitializer;
import org.eclipse.jetty.plus.annotation.ContainerInitializer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.log.JavaUtilLog;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.webapp.WebAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class AppStart {
private int port;
private Server server;
public static void main(String[] args) throws Exception {
String env = System.getProperty("FLOCK_APPS_CONFIG");
Properties props = new Properties();
props.load(AppStart.class.getResourceAsStream("/properties/" + env + "/jetty.properties"));
int port = Integer.parseInt(props.getProperty("port"));
AppStart appStart = new AppStart(port);
appStart.start();
appStart.waitForInterrupt();
}
public AppStart(int port) {
this.port = port;
}
public void start() throws Exception {
server = new Server();
ServerConnector connector = connector();
server.addConnector(connector);
WebAppContext webAppContext = getWebAppContext();
server.setHandler(webAppContext);
server.start();
}
private ServerConnector connector() {
ServerConnector connector = new ServerConnector(server);
connector.setPort(port);
return connector;
}
private WebAppContext getWebAppContext() throws IOException {
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setDescriptor("webapp/WEB-INF/web.xml");
context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/.*taglibs.*\\.jar$");
context.setResourceBase(new ClassPathResource("webapp").getURI().toString());
context.setAttribute("org.eclipse.jetty.containerInitializers", jspInitializers());
context.setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager());
context.addBean(new ServletContainerInitializersStarter(context), true);
context.setClassLoader(getUrlClassLoader());
return context;
}
private List<ContainerInitializer> jspInitializers() {
JettyJasperInitializer sci = new JettyJasperInitializer();
ContainerInitializer initializer = new ContainerInitializer(sci, null);
List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>();
initializers.add(initializer);
return initializers;
}
private ClassLoader getUrlClassLoader() {
ClassLoader jspClassLoader = new URLClassLoader(new URL[0], this.getClass().getClassLoader());
return jspClassLoader;
}
public void stop() throws Exception {
server.stop();
}
public void waitForInterrupt() throws InterruptedException {
server.join();
}
}
I start the application like :
java -DFLOCK_APPS_CONFIG=staging -jar target/snippet.jar >>./snippet2.log 2>&1 &
In the log file i see the following output :
Exception in thread "main" java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:326)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:244)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.server.Server.doStart(Server.java:384)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.directi.code.AppStart.start(AppStart.java:54)
at org.directi.code.AppStart.main(AppStart.java:35)
Now ideally my process should have shutdown. But i see the process running when i do
ps -ef | grep snippet
502 35205 34773 0 6:47PM ttys001 0:04.82 /usr/bin/java -DFLOCK_APPS_CONFIG=stagin
Even after the Exception is thrown. How can i make it stop if this happens .
Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.