You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2011/09/26 11:09:57 UTC

svn commit: r1175732 - /openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java

Author: andygumbrecht
Date: Mon Sep 26 09:09:56 2011
New Revision: 1175732

URL: http://svn.apache.org/viewvc?rev=1175732&view=rev
Log:
Fix: InputStream was not being explicitly closed - Socket close.
Removed per request debug/error String declaration.
Ensure streams are closed at all levels as read/writeExternal may fail.

Modified:
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java?rev=1175732&r1=1175731&r2=1175732&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java Mon Sep 26 09:09:56 2011
@@ -16,29 +16,21 @@
  */
 package org.apache.openejb.server.ejbd;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.rmi.RemoteException;
-import java.util.Properties;
-
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.server.DiscoveryAgent;
+import org.apache.openejb.client.*;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.DiscoveryAgent;
 import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.client.EJBRequest;
-import org.apache.openejb.client.RequestMethodConstants;
-import org.apache.openejb.client.EjbObjectInputStream;
-import org.apache.openejb.client.ProtocolMetaData;
-import org.apache.openejb.client.ServerMetaData;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 
+import java.io.*;
+import java.net.Socket;
+import java.rmi.RemoteException;
+import java.util.Properties;
+
 public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer {
 
     private static final ProtocolMetaData PROTOCOL_VERSION = new ProtocolMetaData("3.1");
@@ -47,7 +39,7 @@ public class EjbDaemon implements org.ap
     static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE, "org.apache.openejb.server.util.resources");
 
     private ClientObjectFactory clientObjectFactory;
-//    DeploymentIndex deploymentIndex;
+    //    DeploymentIndex deploymentIndex;
     private EjbRequestHandler ejbHandler;
     private JndiRequestHandler jndiHandler;
     private AuthRequestHandler authHandler;
@@ -55,17 +47,17 @@ public class EjbDaemon implements org.ap
 
     boolean stop = false;
 
-    static EjbDaemon thiss;
+    static EjbDaemon instance;
     private ContainerSystem containerSystem;
 
     private EjbDaemon() {
     }
 
     public static EjbDaemon getEjbDaemon() {
-        if (thiss == null) {
-            thiss = new EjbDaemon();
+        if (instance == null) {
+            instance = new EjbDaemon();
         }
-        return thiss;
+        return instance;
     }
 
     public void init(Properties props) throws Exception {
@@ -92,44 +84,69 @@ public class EjbDaemon implements org.ap
         try {
             service(in, out);
         } finally {
-            try {
-                if (socket != null) socket.close();
-            } catch (Throwable t) {
-                logger.error("Encountered problem while closing connection with client: " + t.getMessage());
+
+            if (null != out) {
+
+                try {
+                    out.flush();
+                } catch (Throwable e) {
+                    //Ignore
+                }
+
+                try {
+                    out.close();
+                } catch (Throwable e) {
+                    //Ignore
+                }
+            }
+
+            if (null != in) {
+                try {
+                    in.close();
+                } catch (Throwable e) {
+                    //Ignore
+                }
+            }
+
+            if (null != socket) {
+                try {
+                    socket.close();
+                } catch (Throwable t) {
+                    logger.error("Error closing client connection: " + t.getMessage());
+                }
             }
         }
     }
 
     public void service(InputStream in, OutputStream out) throws IOException {
         ProtocolMetaData protocolMetaData = new ProtocolMetaData();
-        String requestTypeName = null;
 
         ObjectInputStream ois = null;
         ObjectOutputStream oos = null;
+        byte requestType = -1;
 
         try {
 
             // Read Protocol Version
             protocolMetaData.readExternal(in);
-
             PROTOCOL_VERSION.writeExternal(out);
 
             ois = new EjbObjectInputStream(in);
             oos = new ObjectOutputStream(out);
 
             // Read ServerMetaData
-            ServerMetaData serverMetaData = new ServerMetaData();
+            final ServerMetaData serverMetaData = new ServerMetaData();
             serverMetaData.readExternal(ois);
             ClientObjectFactory.serverMetaData.set(serverMetaData);
 
             // Read request type
-            byte requestType = (byte) ois.read();
+            requestType = (byte) ois.read();
 
             if (requestType == -1) {
                 return;
             }
 
-            if (requestType == RequestMethodConstants.CLUSTER_REQUEST){
+            if (requestType == RequestMethodConstants.CLUSTER_REQUEST) {
                 processClusterRequest(ois, oos);
             }
 
@@ -139,48 +156,69 @@ public class EjbDaemon implements org.ap
                 return;
             }
 
-
             // Exceptions should not be thrown from these methods
             // They should handle their own exceptions and clean
             // things up with the client accordingly.
             switch (requestType) {
                 case RequestMethodConstants.EJB_REQUEST:
-                    requestTypeName = "EJB_REQUEST";
                     processEjbRequest(ois, oos);
                     break;
                 case RequestMethodConstants.JNDI_REQUEST:
-                    requestTypeName = "JNDI_REQUEST";
                     processJndiRequest(ois, oos);
                     break;
                 case RequestMethodConstants.AUTH_REQUEST:
-                    requestTypeName = "AUTH_REQUEST";
                     processAuthRequest(ois, oos);
                     break;
                 default:
-                    requestTypeName = requestType+" (UNKNOWN)";
-                    logger.error("\"" + requestTypeName + " " + protocolMetaData.getSpec() + "\" FAIL \"Unknown request type " + requestType);
-
+                    logger.error("\"" + getTypeName(requestType) + " " + protocolMetaData.getSpec() + "\" FAIL \"Unknown request type " + requestType);
+                    break;
             }
         } catch (SecurityException e) {
-            logger.error("\""+requestTypeName +" "+ protocolMetaData.getSpec() + "\" FAIL \"Security error - "+e.getMessage()+"\"",e);
+            logger.error("\"" + getTypeName(requestType) + " " + protocolMetaData.getSpec() + "\" FAIL \"Security error - " + e.getMessage() + "\"", e);
         } catch (Throwable e) {
-            logger.error("\""+requestTypeName +" "+ protocolMetaData.getSpec() + "\" FAIL \"Unexpected error - "+e.getMessage()+"\"",e);
+            logger.error("\"" + getTypeName(requestType) + " " + protocolMetaData.getSpec() + "\" FAIL \"Unexpected error - " + e.getMessage() + "\"", e);
         } finally {
+
             ClientObjectFactory.serverMetaData.remove();
-            try {
-                if (oos != null) {
+
+            if (null != oos) {
+
+                try {
                     oos.flush();
+                } catch (Throwable e) {
+                    //Ignore
+                }
+
+                try {
                     oos.close();
-                } else if (out != null) {
-                    out.flush();
-                    out.close();
+                } catch (Throwable e) {
+                    //Ignore
+                }
+            }
+
+            if (null != ois) {
+                try {
+                    ois.close();
+                } catch (Throwable e) {
+                    //Ignore
                 }
-            } catch (Throwable t) {
-                logger.error("\""+requestTypeName +" "+ protocolMetaData.getSpec() + "\" FAIL \""+t.getMessage()+"\"");
             }
         }
     }
 
+    private static String getTypeName(final byte requestType) {
+        switch (requestType) {
+            case RequestMethodConstants.EJB_REQUEST:
+                return "EJB_REQUEST";
+            case RequestMethodConstants.JNDI_REQUEST:
+                return "JNDI_REQUEST";
+            case RequestMethodConstants.AUTH_REQUEST:
+                return "AUTH_REQUEST";
+            default:
+                return requestType + " (UNKNOWN)";
+        }
+    }
+
     private void processClusterRequest(ObjectInputStream in, ObjectOutputStream out) throws IOException {
         clusterHandler.processRequest(in, out);
     }
@@ -188,7 +226,7 @@ public class EjbDaemon implements org.ap
     protected BeanContext getDeployment(EJBRequest req) throws RemoteException {
         String deploymentId = req.getDeploymentId();
         BeanContext beanContext = containerSystem.getBeanContext(deploymentId);
-        if (beanContext == null) throw new RemoteException("No deployment: "+deploymentId);
+        if (beanContext == null) throw new RemoteException("No deployment: " + deploymentId);
         return beanContext;
     }
 



Re: svn commit: r1175732 - /openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java

Posted by David Blevins <da...@gmail.com>.
On Sep 26, 2011, at 5:32 AM, Jacek Laskowski wrote:

> On Mon, Sep 26, 2011 at 11:09 AM,  <an...@apache.org> wrote:
>> Author: andygumbrecht
>> Date: Mon Sep 26 09:09:56 2011
>> New Revision: 1175732
>> 
>> URL: http://svn.apache.org/viewvc?rev=1175732&view=rev
>> Log:
>> Fix: InputStream was not being explicitly closed - Socket close.
>> Removed per request debug/error String declaration.
>> Ensure streams are closed at all levels as read/writeExternal may fail.
>> 
>> Modified:
>>    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
> ...
>> +    private static String getTypeName(final byte requestType) {
>> +        switch (requestType) {
>> +            case RequestMethodConstants.EJB_REQUEST:
>> +                return "EJB_REQUEST";
>> +            case RequestMethodConstants.JNDI_REQUEST:
>> +                return "JNDI_REQUEST";
>> +            case RequestMethodConstants.AUTH_REQUEST:
>> +                return "AUTH_REQUEST";
>> +            default:
>> +                return requestType + " (UNKNOWN)";
>> +        }
>> +    }
> 
> That struck me and led to believing that it begs for an enum, doesn't it?
> 

Indeed.  That is one of the oldest JIRAs:

  Reimplement protocol with enum grammar
  https://issues.apache.org/jira/browse/OPENEJB-82


-David


Re: svn commit: r1175732 - /openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java

Posted by Jacek Laskowski <ja...@japila.pl>.
On Mon, Sep 26, 2011 at 11:09 AM,  <an...@apache.org> wrote:
> Author: andygumbrecht
> Date: Mon Sep 26 09:09:56 2011
> New Revision: 1175732
>
> URL: http://svn.apache.org/viewvc?rev=1175732&view=rev
> Log:
> Fix: InputStream was not being explicitly closed - Socket close.
> Removed per request debug/error String declaration.
> Ensure streams are closed at all levels as read/writeExternal may fail.
>
> Modified:
>    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
...
> +    private static String getTypeName(final byte requestType) {
> +        switch (requestType) {
> +            case RequestMethodConstants.EJB_REQUEST:
> +                return "EJB_REQUEST";
> +            case RequestMethodConstants.JNDI_REQUEST:
> +                return "JNDI_REQUEST";
> +            case RequestMethodConstants.AUTH_REQUEST:
> +                return "AUTH_REQUEST";
> +            default:
> +                return requestType + " (UNKNOWN)";
> +        }
> +    }

That struck me and led to believing that it begs for an enum, doesn't it?

Jacek

-- 
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
Warszawa JUG conference = Confitura (formerly Javarsovia) :: http://confitura.pl