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);
         }


Reply via email to