You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/08/29 06:09:37 UTC

svn commit: r570629 - in /openejb/trunk/openejb3/server: openejb-client/src/main/java/org/apache/openejb/client/ openejb-ejbd/ openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ openejb-ejbd/src/test/java/org/apache/openejb/

Author: dblevins
Date: Tue Aug 28 21:09:36 2007
New Revision: 570629

URL: http://svn.apache.org/viewvc?rev=570629&view=rev
Log:
Added single-line logging for all parts of the protocol: ejb, jndi, auth.  Log lines are output to debug.
Added full toString methods to all the Request Response objects as well as EJBMetaDataImpl and ThrowableArtifact
Added support for sending an exception back with a denied auth request.
Added support for setting the realmName in an InitialContext

Added:
    openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
Modified:
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationRequest.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationResponse.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIRequest.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ThrowableArtifact.java
    openejb/trunk/openejb3/server/openejb-ejbd/pom.xml
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbRequestHandler.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationRequest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationRequest.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationRequest.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationRequest.java Tue Aug 28 21:09:36 2007
@@ -71,5 +71,12 @@
         out.writeObject(username);
         out.writeObject(credentials);
     }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(50);
+        sb.append(realm).append(':');
+        sb.append(username);
+        return sb.toString();
+    }
 }
 

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationResponse.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationResponse.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationResponse.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/AuthenticationResponse.java Tue Aug 28 21:09:36 2007
@@ -25,6 +25,7 @@
     private transient int responseCode = -1;
     private transient ClientMetaData identity;
     private transient ServerMetaData server;
+    private transient Throwable deniedCause;
 
     public AuthenticationResponse() {
     }
@@ -57,6 +58,14 @@
         this.server = server;
     }
 
+    public Throwable getDeniedCause() {
+        return deniedCause;
+    }
+
+    public void setDeniedCause(Throwable deniedCause) {
+        this.deniedCause = deniedCause;
+    }
+
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         byte version = in.readByte(); // future use
 
@@ -73,6 +82,9 @@
                 server.readExternal(in);
                 break;
             case ResponseCodes.AUTH_DENIED:
+                ThrowableArtifact ta = new ThrowableArtifact();
+                ta.readExternal(in);
+                deniedCause = ta.getThrowable();
                 break;
         }
     }
@@ -91,8 +103,33 @@
                 server.writeExternal(out);
                 break;
             case ResponseCodes.AUTH_DENIED:
+                ThrowableArtifact ta = new ThrowableArtifact(deniedCause);
+                ta.writeExternal(out);
+                break;
+        }
+    }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(50);
+
+        switch (responseCode) {
+            case ResponseCodes.AUTH_GRANTED: {
+                sb.append("AUTH_GRANTED:");
+                sb.append(identity);
+                break;
+            }
+            case ResponseCodes.AUTH_REDIRECT: {
+                sb.append("AUTH_REDIRECT:");
+                sb.append(server);
+                break;
+            }
+            case ResponseCodes.AUTH_DENIED: {
+                sb.append("AUTH_DENIED:");
+                sb.append(deniedCause.toString());
                 break;
+            }
         }
+        return sb.toString();
     }
 
 }

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java Tue Aug 28 21:09:36 2007
@@ -136,7 +136,7 @@
 
         // check the response
         if (authRes.getResponseCode() != ResponseCodes.AUTH_GRANTED) {
-            throw new FailedLoginException("This principal is not authenticated.");
+            throw (FailedLoginException) new FailedLoginException("This principal is not authenticated.").initCause(authRes.getDeniedCause());
         }
 
         // return the response object

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java Tue Aug 28 21:09:36 2007
@@ -49,6 +49,9 @@
 
     protected transient EJBHome ejbHomeProxy;
 
+    // only used for business objects;
+    protected transient Object primaryKey;
+
     public EJBMetaDataImpl() {
 
     }
@@ -131,6 +134,14 @@
         return businessClasses;
     }
 
+    public Object getPrimaryKey() {
+        return primaryKey;
+    }
+
+    public void setPrimaryKey(Object primaryKey) {
+        this.primaryKey = primaryKey;
+    }
+
     public void writeExternal(ObjectOutput out) throws IOException {
         // write out the version of the serialized data for future use
         out.writeByte(1);
@@ -146,6 +157,9 @@
         for (Class clazz : businessClasses) {
             out.writeObject(clazz);
         }
+        if (businessClasses.size() >0){
+            out.writeObject(primaryKey);
+        }
     }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
@@ -162,6 +176,31 @@
         for (int i = in.readShort(); i > 0; i--) {
             businessClasses.add((Class) in.readObject());
         }
+        if (businessClasses.size() > 0){
+            primaryKey = in.readObject();
+        }
     }
 
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+        switch(type){
+            case STATEFUL: sb.append("STATEFUL:"); break;
+            case STATELESS: sb.append("STATELESS:");break;
+            case CMP_ENTITY: sb.append("CMP_ENTITY:");break;
+            case BMP_ENTITY: sb.append("BMP_ENTITY:");break;
+        }
+        sb.append(deploymentID).append(":");
+        if (homeClass != null){
+            sb.append(homeClass.getName());
+        } else if (businessClasses.size() != 0){
+            for (Class clazz : businessClasses) {
+                sb.append(clazz.getName()).append(',');
+            }
+            sb.deleteCharAt(sb.length()-1);
+            if (type == STATEFUL){
+                sb.append(":").append(primaryKey);
+            }
+        }
+        return sb.toString();
+    }
 }

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java Tue Aug 28 21:09:36 2007
@@ -97,7 +97,7 @@
         Object serverURI = env.get(Context.PROVIDER_URL);
         moduleId = (String) env.get("openejb.client.moduleId");
 
-        if (serverURI == null) serverURI = "foo://localhost:4201";
+        if (serverURI == null) serverURI = "ejbd://localhost:4201";
         // if (userID == null) userID = "anonymous";
         // if (psswrd == null) psswrd = "anon";
 
@@ -129,7 +129,10 @@
 
     public void authenticate(String userID, String psswrd) throws AuthenticationException {
 
-        AuthenticationRequest req = new AuthenticationRequest(userID, psswrd);
+        // May be null
+        String realmName = (String) env.get("openejb.authentication.realmName");
+
+        AuthenticationRequest req = new AuthenticationRequest(realmName, userID, psswrd);
         AuthenticationResponse res = null;
 
         try {
@@ -147,7 +150,7 @@
                 server = res.getServer();
                 break;
             case ResponseCodes.AUTH_DENIED:
-                throw new AuthenticationException("This principle is not authorized.");
+                throw (AuthenticationException) new AuthenticationException("This principle is not authorized.").initCause(res.getDeniedCause());
         }
     }
 
@@ -162,9 +165,8 @@
     }
 
     private Object createBusinessObject(Object result) {
-        Object[] data = (Object[]) result;
-        EJBMetaDataImpl ejb = (EJBMetaDataImpl) data[0];
-        Object primaryKey = data[1];
+        EJBMetaDataImpl ejb = (EJBMetaDataImpl) result;
+        Object primaryKey = ejb.getPrimaryKey();
 
         EJBObjectHandler handler = EJBObjectHandler.createEJBObjectHandler(ejb, server, client, primaryKey);
         return handler.createEJBObjectProxy();

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIRequest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIRequest.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIRequest.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIRequest.java Tue Aug 28 21:09:36 2007
@@ -78,5 +78,18 @@
         out.writeUTF(requestString);
         out.writeObject(moduleId);
     }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        switch(requestMethod){
+            case RequestMethodConstants.JNDI_LOOKUP: sb.append("JNDI_LOOKUP:"); break;
+            case RequestMethodConstants.JNDI_LIST: sb.append("JNDI_LIST:"); break;
+            case RequestMethodConstants.JNDI_LIST_BINDINGS: sb.append("JNDI_LIST_BINDINGS:"); break;
+        }
+        sb.append(this.moduleId).append(":");
+        sb.append(this.requestString);
+        return sb.toString();
+    }
 }
 

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java Tue Aug 28 21:09:36 2007
@@ -116,4 +116,25 @@
                 break;
         }
     }
+
+    public String toString() {
+        StringBuilder sb = new StringBuilder(100);
+
+        switch (responseCode) {
+            case ResponseCodes.JNDI_BUSINESS_OBJECT: sb.append("JNDI_BUSINESS_OBJECT:"); break;
+            case ResponseCodes.JNDI_OK: sb.append("JNDI_OK:"); break;
+            case ResponseCodes.JNDI_NAMING_EXCEPTION: sb.append("JNDI_NAMING_EXCEPTION:"); break;
+            case ResponseCodes.JNDI_RUNTIME_EXCEPTION: sb.append("JNDI_RUNTIME_EXCEPTION:"); break;
+            case ResponseCodes.JNDI_ERROR: sb.append("JNDI_ERROR:"); break;
+            case ResponseCodes.JNDI_RESOURCE: sb.append("JNDI_RESOURCE:"); break;
+            case ResponseCodes.JNDI_CONTEXT: sb.append("JNDI_CONTEXT:"); break;
+            case ResponseCodes.JNDI_NOT_FOUND: sb.append("JNDI_NOT_FOUND:"); break;
+            case ResponseCodes.JNDI_EJBHOME: sb.append("JNDI_EJBHOME:"); break;
+            case ResponseCodes.JNDI_DATA_SOURCE: sb.append("JNDI_DATA_SOURCE:"); break;
+            case ResponseCodes.JNDI_INJECTIONS: sb.append("JNDI_INJECTIONS:"); break;
+        }
+        sb.append(this.getResult());
+        return sb.toString();
+    }
+
 }

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ThrowableArtifact.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ThrowableArtifact.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ThrowableArtifact.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ThrowableArtifact.java Tue Aug 28 21:09:36 2007
@@ -74,6 +74,10 @@
         return throwable;
     }
 
+    public String toString() {
+        return throwable.toString();
+    }
+
     private static class MockThrowable extends Throwable {
         private final String classType;
 

Modified: openejb/trunk/openejb3/server/openejb-ejbd/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/pom.xml?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/pom.xml (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/pom.xml Tue Aug 28 21:09:36 2007
@@ -59,6 +59,7 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
+          <forkMode>pertest</forkMode>
           <!-- DEBUG: Uncomment this line and comment out the next -->
           <!--<argLine>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -javaagent:${project.build.directory}/openejb-javaagent-${version}.jar=foo=bar</argLine>-->
           <argLine>-javaagent:${project.build.directory}/openejb-javaagent-${version}.jar=foo=bar</argLine>

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java Tue Aug 28 21:09:36 2007
@@ -20,6 +20,7 @@
 import org.apache.openejb.client.AuthenticationResponse;
 import org.apache.openejb.client.ClientMetaData;
 import org.apache.openejb.client.ResponseCodes;
+import org.apache.openejb.client.ThrowableArtifact;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.LogCategory;
@@ -35,7 +36,7 @@
 class AuthRequestHandler {
 
     Messages _messages = new Messages("org.apache.openejb.server.util.resources");
-    Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE, "org.apache.openejb.server.util.resources");
+    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE.createChild("auth"), "org.apache.openejb.server.util.resources");
 
     AuthRequestHandler(EjbDaemon daemon) {
     }
@@ -59,14 +60,20 @@
 
             res.setIdentity(client);
             res.setResponseCode(ResponseCodes.AUTH_GRANTED);
-
-            res.writeExternal(out);
         } catch (Throwable t) {
+            res.setResponseCode(ResponseCodes.AUTH_DENIED);
+            res.setDeniedCause(t);
+        } finally {
+            if (logger.isDebugEnabled()){
+                try {
+                    logger.debug("AUTH REQUEST: "+req+" -- RESPONSE: " + res);
+                } catch (Exception justInCase) {}
+            }
+
             try {
-                res.setResponseCode(ResponseCodes.AUTH_DENIED);
                 res.writeExternal(out);
-            } catch (IOException e) {
-                logger.error("Failed to write to AuthenticationResponse", e);
+            } catch (java.io.IOException ie) {
+                logger.fatal("Couldn't write AuthenticationResponse to output stream", ie);
             }
         }
     }

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbRequestHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbRequestHandler.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbRequestHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbRequestHandler.java Tue Aug 28 21:09:36 2007
@@ -25,6 +25,8 @@
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.RpcContainer;
+import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.client.EJBRequest;
 import org.apache.openejb.client.EJBResponse;
 import org.apache.openejb.client.RequestMethodConstants;
@@ -38,11 +40,11 @@
 class EjbRequestHandler {
     public static final ServerSideResolver SERVER_SIDE_RESOLVER = new ServerSideResolver();
 
+    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE.createChild("ejb"), "org.apache.openejb.server.util.resources");
     private final EjbDaemon daemon;
 
     EjbRequestHandler(EjbDaemon daemon) {
         this.daemon = daemon;
-
     }
 
     public void processRequest(ObjectInputStream in, ObjectOutputStream out) {
@@ -178,18 +180,22 @@
         } catch (org.apache.openejb.SystemException e) {
             res.setResponse(ResponseCodes.EJB_ERROR, new ThrowableArtifact(e.getRootCause()));
 
-            this.daemon.logger.fatal(req + ": OpenEJB encountered an unknown system error in container: ", e);
+            logger.fatal(req + ": OpenEJB encountered an unknown system error in container: ", e);
         } catch (java.lang.Throwable t) {
             // todo this causes the response to be written twice but the code below
             replyWithFatalError
                     (out, t, "Unknown error in container");
             return;
         } finally {
-            this.daemon.logger.info("EJB RESPONSE: " + res);
+            if (logger.isDebugEnabled()){
+                try {
+                    logger.debug("EJB REQUEST: "+req+" -- RESPONSE: " + res);
+                } catch (Exception justInCase) {}
+            }
             try {
                 res.writeExternal(out);
             } catch (java.io.IOException ie) {
-                this.daemon.logger.fatal("Couldn't write EjbResponse to output stream", ie);
+                logger.fatal("Couldn't write EjbResponse to output stream", ie);
             }
             call.reset();
             EJBHomeProxyHandle.resolver.set(null);
@@ -243,7 +249,7 @@
         } else {
 
             result = new RemoteException("The bean is not EJB compliant.  The bean should be created or and exception should be thrown.");
-            this.daemon.logger.error(req + "The bean is not EJB compliant.  The bean should be created or and exception should be thrown.");
+            logger.error(req + "The bean is not EJB compliant.  The bean should be created or and exception should be thrown.");
             res.setResponse(ResponseCodes.EJB_SYS_EXCEPTION, new ThrowableArtifact((Throwable) result));
         }
     }
@@ -303,7 +309,7 @@
                     "to return neither Collection nor the Remote Interface, " +
                     "but [" + result.getClass().getName() + "]";
             result = new RemoteException(message);
-            this.daemon.logger.error(req + " " + message);
+            logger.error(req + " " + message);
             res.setResponse(ResponseCodes.EJB_SYS_EXCEPTION, result);
         }
     }
@@ -383,13 +389,13 @@
 //        if (sec.isCallerAuthorized(req.getMethodInstance(), null)) {
 //            res.setResponse(ResponseCodes.EJB_OK, null);
 //        } else {
-//            this.daemon.logger.info(req + "Unauthorized Access by Principal Denied");
+//            logger.info(req + "Unauthorized Access by Principal Denied");
 //            res.setResponse(ResponseCodes.EJB_APP_EXCEPTION, new ThrowableArtifact(new EJBAccessException("Unauthorized Access by Principal Denied")));
 //        }
     }
 
     private void replyWithFatalError(ObjectOutputStream out, Throwable error, String message) {
-        this.daemon.logger.fatal(message, error);
+        logger.fatal(message, error);
         RemoteException re = new RemoteException
                 ("The server has encountered a fatal error: " + message + " " + error, error);
         EJBResponse res = new EJBResponse();
@@ -397,7 +403,7 @@
         try {
             res.writeExternal(out);
         } catch (java.io.IOException ie) {
-            this.daemon.logger.error("Failed to write to EJBResponse", ie);
+            logger.error("Failed to write to EJBResponse", ie);
         }
     }
 }

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?rev=570629&r1=570628&r2=570629&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java Tue Aug 28 21:09:36 2007
@@ -18,6 +18,7 @@
 
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.IOException;
 import java.util.List;
 
 import javax.naming.Context;
@@ -30,6 +31,8 @@
 import org.apache.openejb.Injection;
 import org.apache.openejb.resource.jdbc.JdbcConnectionFactory;
 import org.apache.openejb.util.proxy.ProxyManager;
+import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.core.ivm.BaseEjbProxyHandler;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
@@ -42,7 +45,7 @@
 import org.omg.CORBA.ORB;
 
 class JndiRequestHandler {
-    private final EjbDaemon daemon;
+    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE.createChild("jndi"), "org.apache.openejb.server.util.resources");
 
     private Context ejbJndiTree;
     private Context clientJndiTree;
@@ -56,15 +59,34 @@
             clientJndiTree = (Context) containerSystem.getJNDIContext().lookup("openejb/client");
         } catch (NamingException e) {
         }
-        this.daemon = daemon;
     }
 
     public void processRequest(ObjectInputStream in, ObjectOutputStream out) {
         JNDIResponse res = new JNDIResponse();
+        JNDIRequest req = null;
         try {
-            JNDIRequest req = new JNDIRequest();
+            req = new JNDIRequest();
             req.readExternal(in);
+        } catch (Throwable e) {
+            res.setResponseCode(ResponseCodes.JNDI_NAMING_EXCEPTION);
+            NamingException namingException = new NamingException("Could not read jndi request");
+            namingException.setRootCause(e);
+            res.setResult(namingException);
+
+            if (logger.isDebugEnabled()){
+                try {
+                    logger.debug("JNDI REQUEST: "+req+" -- RESPONSE: " + res);
+                } catch (Exception justInCase) {}
+            }
+
+            try {
+                res.writeExternal(out);
+            } catch (java.io.IOException ie) {
+                logger.fatal("Couldn't write JndiResponse to output stream", ie);
+            }
+        }
 
+        try {
             String name = req.getRequestString();
             if (name.startsWith("/")) name = name.substring(1);
 
@@ -179,13 +201,13 @@
                             deployment.getComponentType().toString(),
                             deploymentID,
                             -1, proxyInfo.getInterfaces());
-                    Object[] data = {metaData, proxyInfo.getPrimaryKey()};
-                    res.setResult(data);
+                    metaData.setPrimaryKey(proxyInfo.getPrimaryKey());
+                    res.setResult(metaData);
                     break;
                 }
                 case BUSINESS_LOCAL: {
-                    String property = SystemInstance.get().getProperty("openejb.businessLocal", "remotable");
-                    if (property.equalsIgnoreCase("remotable")) {
+                    String property = SystemInstance.get().getProperty("openejb.remotable.businessLocals", "false");
+                    if (property.equalsIgnoreCase("true")) {
                         res.setResponseCode(ResponseCodes.JNDI_BUSINESS_OBJECT);
                         EJBMetaDataImpl metaData = new EJBMetaDataImpl(null,
                                 null,
@@ -193,11 +215,11 @@
                                 deployment.getComponentType().toString(),
                                 deploymentID,
                                 -1, proxyInfo.getInterfaces());
-                        Object[] data = {metaData, proxyInfo.getPrimaryKey()};
-                        res.setResult(data);
+                        metaData.setPrimaryKey(proxyInfo.getPrimaryKey());
+                        res.setResult(metaData);
                     } else {
                         res.setResponseCode(ResponseCodes.JNDI_NAMING_EXCEPTION);
-                        res.setResult(new NamingException("Not remotable: '"+name+"'. Business Local interfaces are not remotable as per the EJB specification.  To disable this restriction, set the system property 'openejb.businessLocal=remotable' in the server."));
+                        res.setResult(new NamingException("Not remotable: '"+name+"'. Business Local interfaces are not remotable as per the EJB specification.  To disable this restriction, set the system property 'openejb.remotable.businessLocals=true' in the server."));
                     }
                     break;
                 }
@@ -212,10 +234,17 @@
             namingException.setRootCause(e);
             res.setResult(namingException);
         } finally {
+
+            if (logger.isDebugEnabled()){
+                try {
+                    logger.debug("JNDI REQUEST: "+req+" -- RESPONSE: " + res);
+                } catch (Exception justInCase) {}
+            }
+
             try {
                 res.writeExternal(out);
             } catch (java.io.IOException ie) {
-                this.daemon.logger.fatal("Couldn't write JndiResponse to output stream", ie);
+                logger.fatal("Couldn't write JndiResponse to output stream", ie);
             }
         }
     }

Added: openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java?rev=570629&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java (added)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java Tue Aug 28 21:09:36 2007
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb;
+
+import junit.framework.TestCase;
+import org.apache.openejb.server.ejbd.EjbServer;
+import org.apache.openejb.server.ServiceDaemon;
+import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.loader.SystemInstance;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AuthTest extends TestCase {
+    public void test() throws Exception {
+        EjbServer ejbServer = new EjbServer();
+
+        Properties initProps = new Properties();
+        initProps.setProperty("openejb.deployments.classpath.include", "");
+        initProps.setProperty("openejb.deployments.classpath.filter.descriptors", "true");
+        OpenEJB.init(initProps, new ServerFederation());
+        ejbServer.init(new Properties());
+
+        ServiceDaemon serviceDaemon = new ServiceDaemon(ejbServer, 0, "localhost");
+        serviceDaemon.start();
+
+        int port = serviceDaemon.getPort();
+
+
+        try {
+
+            // good creds
+            Properties props = new Properties();
+            props.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
+            props.put("java.naming.provider.url", "ejbd://127.0.0.1:" + port);
+            props.put(Context.SECURITY_PRINCIPAL, "jonathan");
+            props.put(Context.SECURITY_CREDENTIALS, "secret");
+            new InitialContext(props);
+
+
+            try {
+                props.put(Context.SECURITY_PRINCIPAL, "alfred");
+                props.put(Context.SECURITY_CREDENTIALS, "doesnotexist");
+                new InitialContext(props);
+            } catch (javax.naming.AuthenticationException e) {
+                // pass -- user does not exist
+            }
+
+        } catch (NamingException e) {
+            throw e;
+        } finally {
+            serviceDaemon.stop();
+            OpenEJB.destroy();
+        }
+
+    }
+}