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