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