Author: andygumbrecht
Date: Tue Jan 8 16:21:30 2013
New Revision: 1430355
URL: http://svn.apache.org/viewvc?rev=1430355&view=rev
Log:
Ensure KeepAliveServer closes socket resources.
commons-net 3.2
javassist 3.17.1-GA
Modified:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulBeanManagedTest.java
openejb/trunk/openejb/pom.xml
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulBeanManagedTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulBeanManagedTest.java?rev=1430355&r1=1430354&r2=1430355&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulBeanManagedTest.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulBeanManagedTest.java
Tue Jan 8 16:21:30 2013
@@ -95,6 +95,7 @@ public class StatefulBeanManagedTest {
beanOne.one("bob");
assertEquals("bob", beanOne.two());
+ //This should throw an exception because of the existing transaction
beanOne.one("sally");
}
Modified: openejb/trunk/openejb/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/pom.xml?rev=1430355&r1=1430354&r2=1430355&view=diff
==============================================================================
--- openejb/trunk/openejb/pom.xml (original)
+++ openejb/trunk/openejb/pom.xml Tue Jan 8 16:21:30 2013
@@ -170,7 +170,7 @@
<commons-lang3.version>3.1</commons-lang3.version>
<commons-lang.version>2.6</commons-lang.version>
<commons-io.version>1.4</commons-io.version>
- <commons-net.version>3.1</commons-net.version>
+ <commons-net.version>3.2</commons-net.version>
</properties>
<build>
@@ -1397,10 +1397,10 @@
<version>${osgi.framework.version}</version>
</dependency>
<dependency>
- <groupId>org.javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.15.0-GA</version>
- </dependency>
+ <groupId>org.javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.17.1-GA</version>
+ </dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
Modified:
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java?rev=1430355&r1=1430354&r2=1430355&view=diff
==============================================================================
---
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
(original)
+++
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
Tue Jan 8 16:21:30 2013
@@ -82,7 +82,7 @@ public class EjbDaemon implements org.ap
clusterHandler = new ClusterRequestHandler(this);
gzip = "true".equalsIgnoreCase(props.getProperty("gzip", "false"));
- DiscoveryAgent discovery =
SystemInstance.get().getComponent(DiscoveryAgent.class);
+ final DiscoveryAgent discovery =
SystemInstance.get().getComponent(DiscoveryAgent.class);
if (discovery != null) {
discovery.setDiscoveryListener(clusterHandler);
}
@@ -142,8 +142,8 @@ public class EjbDaemon implements org.ap
}
}
- public void service(InputStream in, OutputStream out) throws IOException {
- ProtocolMetaData protocolMetaData = new ProtocolMetaData();
+ public void service(final InputStream in, final OutputStream out) throws
IOException {
+ final ProtocolMetaData protocolMetaData = new ProtocolMetaData();
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
@@ -252,50 +252,56 @@ public class EjbDaemon implements org.ap
}
}
- private void processClusterRequest(ObjectInputStream in,
ObjectOutputStream out) throws IOException {
+ private void processClusterRequest(final ObjectInputStream in, final
ObjectOutputStream out) throws IOException {
clusterHandler.processRequest(in, out);
}
- protected BeanContext getDeployment(EJBRequest req) throws RemoteException
{
- String deploymentId = req.getDeploymentId();
- BeanContext beanContext = containerSystem.getBeanContext(deploymentId);
+ protected BeanContext getDeployment(final EJBRequest req) throws
RemoteException {
+ final String deploymentId = req.getDeploymentId();
+ final BeanContext beanContext =
containerSystem.getBeanContext(deploymentId);
if (beanContext == null) throw new RemoteException("No deployment: " +
deploymentId);
return beanContext;
}
- public void processEjbRequest(ObjectInputStream in, ObjectOutputStream
out) {
+ public void processEjbRequest(final ObjectInputStream in, final
ObjectOutputStream out) {
ejbHandler.processRequest(in, out);
}
- public void processJndiRequest(ObjectInputStream in, ObjectOutputStream
out) throws Exception {
+ public void processJndiRequest(final ObjectInputStream in, final
ObjectOutputStream out) throws Exception {
jndiHandler.processRequest(in, out);
}
- public void processAuthRequest(ObjectInputStream in, ObjectOutputStream
out) {
+ public void processAuthRequest(final ObjectInputStream in, final
ObjectOutputStream out) {
authHandler.processRequest(in, out);
}
- public javax.ejb.EJBMetaData getEJBMetaData(ProxyInfo info) {
+ @Override
+ public javax.ejb.EJBMetaData getEJBMetaData(final ProxyInfo info) {
return clientObjectFactory.getEJBMetaData(info);
}
- public javax.ejb.Handle getHandle(ProxyInfo info) {
+ @Override
+ public javax.ejb.Handle getHandle(final ProxyInfo info) {
return clientObjectFactory.getHandle(info);
}
- public javax.ejb.HomeHandle getHomeHandle(ProxyInfo info) {
+ @Override
+ public javax.ejb.HomeHandle getHomeHandle(final ProxyInfo info) {
return clientObjectFactory.getHomeHandle(info);
}
- public javax.ejb.EJBObject getEJBObject(ProxyInfo info) {
+ @Override
+ public javax.ejb.EJBObject getEJBObject(final ProxyInfo info) {
return clientObjectFactory.getEJBObject(info);
}
- public Object getBusinessObject(ProxyInfo info) {
+ @Override
+ public Object getBusinessObject(final ProxyInfo info) {
return clientObjectFactory.getBusinessObject(info);
}
- public javax.ejb.EJBHome getEJBHome(ProxyInfo info) {
+ @Override
+ public javax.ejb.EJBHome getEJBHome(final ProxyInfo info) {
return clientObjectFactory.getEJBHome(info);
}
Modified:
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java?rev=1430355&r1=1430354&r2=1430355&view=diff
==============================================================================
---
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
(original)
+++
openejb/trunk/openejb/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
Tue Jan 8 16:21:30 2013
@@ -42,6 +42,7 @@ import java.util.concurrent.BlockingQueu
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.zip.GZIPInputStream;
@@ -83,10 +84,12 @@ public class KeepAliveServer implements
}
final BlockingQueue<Runnable> queue = this.getQueue();
- if (queue == null) return;
+ if (queue == null)
+ return;
int backlog = queue.size();
- if (backlog <= 0) return;
+ if (backlog <= 0)
+ return;
final long now = System.currentTimeMillis();
@@ -99,7 +102,7 @@ public class KeepAliveServer implements
if (l.tryLock()) {
try {
- if (now - session.lastRequest > this.timeout) {
+ if (now - session.lastRequest.get() > this.timeout) {
backlog--;
@@ -116,7 +119,8 @@ public class KeepAliveServer implements
}
}
- if (backlog <= 0) return;
+ if (backlog <= 0)
+ return;
}
}
@@ -140,7 +144,11 @@ public class KeepAliveServer implements
l.unlock();
}
} else if (logger.isDebugEnabled()) {
- logger.debug("Allowing graceful shutdown of " +
session.socket.getInetAddress());
+ try {
+ logger.debug("Allowing graceful shutdown of " +
session.socket.getInetAddress());
+ } catch (Throwable e) {
+ //Ignore
+ }
}
}
@@ -151,7 +159,8 @@ public class KeepAliveServer implements
if (this.threadQueue == null) {
// this can be null if timer fires before service is fully
initialized
final ServicePool incoming =
SystemInstance.get().getComponent(ServicePool.class);
- if (incoming == null) return null;
+ if (incoming == null)
+ return null;
final ThreadPoolExecutor threadPool = incoming.getThreadPool();
this.threadQueue = threadPool.getQueue();
}
@@ -187,7 +196,7 @@ public class KeepAliveServer implements
private final Lock lock = new ReentrantLock();
// only used inside the Lock
- private long lastRequest;
+ private final AtomicLong lastRequest;
// only used inside the Lock
private final Socket socket;
@@ -195,24 +204,32 @@ public class KeepAliveServer implements
protected Session(final KeepAliveServer kas, final Socket socket) {
this.kas = kas;
this.socket = socket;
- this.lastRequest = System.currentTimeMillis();
+ this.lastRequest = new AtomicLong(System.currentTimeMillis());
this.thread = Thread.currentThread();
}
- protected void service(final Socket socket) throws ServiceException,
IOException {
+ protected void service() throws ServiceException, IOException {
this.kas.addSession(this);
int i = -1;
+ InputStream in = null;
+ OutputStream out = null;
try {
- final InputStream in;
- final OutputStream out;
- if (!KeepAliveServer.this.gzip) {
- in = new BufferedInputStream(socket.getInputStream());
- out = new BufferedOutputStream(socket.getOutputStream());
- } else {
- in = new GZIPInputStream(new
BufferedInputStream(socket.getInputStream()));
- out = new BufferedOutputStream(new
FlushableGZIPOutputStream(socket.getOutputStream()));
+
+ final Lock l1 = this.lock;
+ l1.lock();
+
+ try {
+ if (!KeepAliveServer.this.gzip) {
+ in = new
BufferedInputStream(this.socket.getInputStream());
+ out = new
BufferedOutputStream(this.socket.getOutputStream());
+ } else {
+ in = new GZIPInputStream(new
BufferedInputStream(this.socket.getInputStream()));
+ out = new BufferedOutputStream(new
FlushableGZIPOutputStream(this.socket.getOutputStream()));
+ }
+ } finally {
+ l1.unlock();
}
while (KeepAliveServer.this.running.get()) {
@@ -228,8 +245,8 @@ public class KeepAliveServer implements
}
final KeepAliveStyle style = KeepAliveStyle.values()[i];
- final Lock l = this.lock;
- l.lock();
+ final Lock l2 = this.lock;
+ l2.lock();
try {
@@ -253,8 +270,8 @@ public class KeepAliveServer implements
break;
}
} finally {
- this.lastRequest = System.currentTimeMillis();
- l.unlock();
+ this.lastRequest.set(System.currentTimeMillis());
+ l2.unlock();
}
}
} catch (ArrayIndexOutOfBoundsException e) {
@@ -262,6 +279,31 @@ public class KeepAliveServer implements
} catch (InterruptedIOException e) {
Thread.interrupted();
} finally {
+
+ if (null != in) {
+ try {
+ in.close();
+ } catch (Throwable e) {
+ //ignore
+ }
+ }
+
+ if (null != out) {
+ try {
+ out.close();
+ } catch (Throwable e) {
+ //ignore
+ }
+ }
+
+ if (null != this.socket) {
+ try {
+ this.socket.close();
+ } catch (Throwable e) {
+ //ignore
+ }
+ }
+
this.kas.removeSession(this);
}
}
@@ -270,7 +312,7 @@ public class KeepAliveServer implements
@Override
public void service(final Socket socket) throws ServiceException,
IOException {
final Session session = new Session(this, socket);
- session.service(socket);
+ session.service();
}
@Override
@@ -333,6 +375,7 @@ public class KeepAliveServer implements
}
public class Output extends java.io.FilterOutputStream {
+
public Output(final OutputStream out) {
super(out);
}