gdamour 2005/12/21 09:21:50
Modified: modules/core/src/java/org/openejb/client
AppClientJNDIContext.java Client.java
EJBHomeHandle.java EJBHomeHandler.java
EJBHomeProxyHandle.java EJBInvocationHandler.java
EJBObjectHandle.java EJBObjectHandler.java
EJBObjectProxyHandle.java EJBResponse.java
EntityEJBHomeHandler.java
EntityEJBObjectHandler.java JNDIContext.java
JNDIResponse.java ServerMetaData.java
StatefulEJBHomeHandler.java
StatefulEJBObjectHandler.java
StatelessEJBHomeHandler.java
StatelessEJBObjectHandler.java
Added: modules/core/src/java/org/openejb/client
ClusteredResponse.java RequestInfo.java
ResponseInfo.java
Log:
GERONIMO-1397 Clustering of SFSB
First step of many others to add the clustering of SFSB.
This check-in adds the following features:
* definition of an EJBClusterManager, which abstracts an EJB Cluster node;
* this EJB cluster node is a standard GBean (the default or
WADI implementation is DefaultEJBClusterManager);
* in an openejb-jar.xml DD, a SFSB can declare a reference to this node via
the ejb-cluster-reference element;
* when the SFSB container is started, the EJB cluster node notifies
the cluster that it is running a specific SFSB container;
* when a clustered SFSB InstanceContext is created, an array of nodes running
the container of this SFSB is associated to the InstanceContext. Note that
this array of nodes is updated upon start-up of a clustered SFSB container or
upon node failure;
* this array of nodes capable of running the created SFSB is propagated to
clients. Actually, this array is propagated at each EJB invocation.
Revision Changes Path
1.10 +9 -8
openejb/modules/core/src/java/org/openejb/client/AppClientJNDIContext.java
Index: AppClientJNDIContext.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/AppClientJNDIContext.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- AppClientJNDIContext.java 1 Dec 2005 08:34:50 -0000 1.9
+++ AppClientJNDIContext.java 21 Dec 2005 14:21:49 -0000 1.10
@@ -50,8 +50,8 @@
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.naming.java.RootContext;
import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.naming.java.RootContext;
import org.openejb.client.naming.java.javaURLContextFactory;
/**
@@ -71,14 +71,15 @@
public void startClient(ObjectName appClientModuleName, Kernel kernel,
ClassLoader classLoader) throws Exception {
try {
- ServerMetaData serverMetaData = new ServerMetaData(host, port);
- JNDIResponse res = new JNDIResponse(serverMetaData);
+ ServerMetaData serverMetaData = new ServerMetaData("BOOT", host,
port);
+ JNDIResponse res = new JNDIResponse();
+ ResponseInfo resInfo = new ResponseInfo(res);
JNDIRequest req = new JNDIRequest(JNDIRequest.JNDI_LOOKUP,
appClientModuleName.toString(), "");
-
- Client.request(req, res, serverMetaData);
+ RequestInfo reqInfo = new RequestInfo(req, new ServerMetaData[]
{serverMetaData});
+
+ Client.request(reqInfo, resInfo);
context = (Context) res.getResult();
-
} catch (Exception e) {
NamingException namingException = new NamingException("Unable to
retrieve J2EE AppClient's JNDI Context");
namingException.initCause(e);
1.6 +43 -15
openejb/modules/core/src/java/org/openejb/client/Client.java
Index: Client.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/Client.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Client.java 11 Nov 2005 01:36:37 -0000 1.5
+++ Client.java 21 Dec 2005 14:21:49 -0000 1.6
@@ -44,9 +44,16 @@
*/
package org.openejb.client;
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
import java.rmi.RemoteException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.openejb.server.ejbd.EJBObjectInputStream;
/**
@@ -54,11 +61,14 @@
* @since 11/25/2001
*/
public class Client {
-
+ private static final Log log = LogFactory.getLog(Client.class);
+
private static final ProtocolMetaData PROTOCOL_VERSION = new
ProtocolMetaData("2.0");
- public static Response request(Request req, Response res, ServerMetaData
server) throws RemoteException {
- if ( server == null ) throw new IllegalArgumentException("Server
instance cannot be null");
+ public static void request(RequestInfo reqInfo, ResponseInfo resInfo)
throws RemoteException {
+ Request req = reqInfo.getRequest();
+ ServerMetaData[] servers = reqInfo.getServers();
+ if ( servers == null || servers.length == 0) throw new
IllegalArgumentException("Server instance cannot be null");
OutputStream out = null;
ObjectOutput objectOut = null;
@@ -69,12 +79,23 @@
/*----------------------------*/
/* Get a connection to server */
/*----------------------------*/
- try{
- conn = ConnectionManager.getConnection( server );
- } catch (IOException e){
- throw new RemoteException("Cannot access server:
"+server.address+":"+server.port+" Exception: ", e );
- } catch (Throwable e){
- throw new RemoteException("Cannot access server:
"+server.address+":"+server.port+" due to an unknown exception in the OpenEJB
client: ", e );
+ for (int i = 0; i < servers.length && null == conn; i++) {
+ ServerMetaData server = servers[i];
+ try{
+ conn = ConnectionManager.getConnection( server );
+ } catch (IOException e){
+ log.error("Cannot access server:
"+server.address+":"+server.port+" Exception: ", e);
+ } catch (Throwable e){
+ log.error("Cannot access server:
"+server.address+":"+server.port+" due to an unknown exception in the OpenEJB
client: ", e );
+ }
+ }
+ if (null == conn) {
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < servers.length; i++) {
+ ServerMetaData server = servers[i];
+ buffer.append("Server #" + i + ": " + server);
+ }
+ throw new RemoteException("Cannot access servers: " +
buffer);
}
/*----------------------------------*/
@@ -103,9 +124,7 @@
/* Write request type */
/*----------------------------------*/
try{
-
out.write( req.getRequestType() );
-
} catch (IOException e){
throw new RemoteException("Cannot write the request type to
the server: " , e );
@@ -179,6 +198,8 @@
throw new RemoteException("Cannot open object input stream
to server ("+protocolMetaData.getSpec() +") : "+e.getMessage() , e );
}
+ Response res = resInfo.getResponse();
+
/*----------------------------------*/
/* Read response */
/*----------------------------------*/
@@ -194,7 +215,15 @@
} catch (Throwable e){
throw new RemoteException("Error reading response from
server ("+protocolMetaData.getSpec() +") : "+e.getMessage() , e );
}
-
+
+ if (res instanceof ClusteredResponse) {
+ ClusteredResponse clusteredResponse = (ClusteredResponse)
res;
+ ServerMetaData[] newServers = clusteredResponse.getServers();
+ if (null == newServers || newServers.length == 0) {
+ newServers = servers;
+ }
+ resInfo.setServers(newServers);
+ }
} finally {
try {
if (conn != null) {
@@ -205,7 +234,6 @@
System.out.println("Error closing connection with server:
"+t.getMessage() );
}
}
- return res;
}
}
1.5 +6 -5
openejb/modules/core/src/java/org/openejb/client/EJBHomeHandle.java
Index: EJBHomeHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBHomeHandle.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EJBHomeHandle.java 11 Feb 2005 22:30:15 -0000 1.4
+++ EJBHomeHandle.java 21 Dec 2005 14:21:49 -0000 1.5
@@ -48,6 +48,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.rmi.RemoteException;
+
import javax.ejb.EJBHome;
/**
@@ -99,7 +100,8 @@
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
- handler.server.writeExternal(out);
+
+ out.writeObject(handler.servers);
}
/**
@@ -107,7 +109,6 @@
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
- ServerMetaData server = new ServerMetaData();
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
@@ -127,9 +128,9 @@
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
- server.readExternal(in);
+ ServerMetaData[] servers = (ServerMetaData[]) in.readObject();
- handler = EJBHomeHandler.createEJBHomeHandler(ejb, server);
+ handler = EJBHomeHandler.createEJBHomeHandler(ejb, servers);
ejbHomeProxy = handler.createEJBHomeProxy();
}
1.7 +10 -10
openejb/modules/core/src/java/org/openejb/client/EJBHomeHandler.java
Index: EJBHomeHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBHomeHandler.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EJBHomeHandler.java 20 Oct 2005 22:19:23 -0000 1.6
+++ EJBHomeHandler.java 21 Dec 2005 14:21:49 -0000 1.7
@@ -50,12 +50,12 @@
import java.io.ObjectOutput;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
+
import javax.ejb.EJBHome;
import javax.ejb.Handle;
-import org.openejb.EJBComponentType;
-
import org.apache.geronimo.security.ContextManager;
+import org.openejb.EJBComponentType;
/**
@@ -75,25 +75,25 @@
public EJBHomeHandler() {
}
- public EJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData server) {
- super(ejb, server);
+ public EJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData[] servers) {
+ super(ejb, servers);
}
- public static EJBHomeHandler createEJBHomeHandler(EJBMetaDataImpl ejb,
ServerMetaData server) {
+ public static EJBHomeHandler createEJBHomeHandler(EJBMetaDataImpl ejb,
ServerMetaData[] servers) {
switch (ejb.type) {
case EJBComponentType.BMP_ENTITY:
case EJBComponentType.CMP_ENTITY:
- return new EntityEJBHomeHandler(ejb, server);
+ return new EntityEJBHomeHandler(ejb, servers);
case EJBComponentType.STATEFUL:
- return new StatefulEJBHomeHandler(ejb, server);
+ return new StatefulEJBHomeHandler(ejb, servers);
case EJBComponentType.STATELESS:
- return new StatelessEJBHomeHandler(ejb, server);
+ return new StatelessEJBHomeHandler(ejb, servers);
}
return null;
@@ -234,7 +234,7 @@
case EJB_OK:
// Create the EJBObject proxy
Object primKey = res.getResult();
- EJBObjectHandler handler =
EJBObjectHandler.createEJBObjectHandler(ejb, server, primKey);
+ EJBObjectHandler handler =
EJBObjectHandler.createEJBObjectHandler(ejb, servers, primKey);
handler.setEJBHomeProxy((EJBHomeProxy) proxy);
//TODO:1: Add the proxy to the handler registry
return handler.createEJBObjectProxy();
1.4 +6 -5
openejb/modules/core/src/java/org/openejb/client/EJBHomeProxyHandle.java
Index: EJBHomeProxyHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBHomeProxyHandle.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EJBHomeProxyHandle.java 8 Sep 2004 04:00:18 -0000 1.3
+++ EJBHomeProxyHandle.java 21 Dec 2005 14:21:49 -0000 1.4
@@ -49,6 +49,8 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.activeio.xnet.ServerService;
+
public class EJBHomeProxyHandle implements Externalizable {
@@ -73,7 +75,7 @@
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
- handler.server.writeExternal(out);
+ out.writeObject(handler.servers);
}
/**
@@ -81,7 +83,6 @@
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
- ServerMetaData server = new ServerMetaData();
ejb.homeClass = (Class) in.readObject();
ejb.remoteClass = (Class) in.readObject();
@@ -90,9 +91,9 @@
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
- server.readExternal(in);
+ ServerMetaData[] servers = (ServerMetaData[]) in.readObject();
- handler = EJBHomeHandler.createEJBHomeHandler(ejb, server);
+ handler = EJBHomeHandler.createEJBHomeHandler(ejb, servers);
handler.ejb.ejbHomeProxy = handler.createEJBHomeProxy();
}
1.3 +15 -8
openejb/modules/core/src/java/org/openejb/client/EJBInvocationHandler.java
Index: EJBInvocationHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBInvocationHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EJBInvocationHandler.java 30 Jul 2004 19:03:44 -0000 1.2
+++ EJBInvocationHandler.java 21 Dec 2005 14:21:49 -0000 1.3
@@ -126,8 +126,10 @@
/**
* The ServerMetaData object containing the information needed to
* send invokations to the EJB Server.
+ * This array identifies all the EJB servers running the target bean
+ * deployment.
*/
- protected transient ServerMetaData server;
+ protected transient ServerMetaData[] servers;
/**
* The primary key of the bean deployment or null if the deployment
@@ -141,13 +143,13 @@
public EJBInvocationHandler(){
}
- public EJBInvocationHandler(EJBMetaDataImpl ejb, ServerMetaData server){
+ public EJBInvocationHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
this.ejb = ejb;
- this.server = server;
+ this.servers = servers;
}
- public EJBInvocationHandler(EJBMetaDataImpl ejb, ServerMetaData server,
Object primaryKey){
- this(ejb, server);
+ public EJBInvocationHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers, Object primaryKey){
+ this(ejb, servers);
this.primaryKey = primaryKey;
}
@@ -204,7 +206,12 @@
}
protected EJBResponse request(EJBRequest req) throws Exception {
- return (EJBResponse) Client.request(req, new EJBResponse(), server);
+ RequestInfo reqInfo = new RequestInfo(req, servers);
+ EJBResponse res = new EJBResponse();
+ ResponseInfo resInfo = new ResponseInfo(res);
+ Client.request(reqInfo, resInfo);
+ servers = resInfo.getServers();
+ return res;
}
/**
@@ -215,7 +222,7 @@
* removed, by calling one of the remove( ) methods.
*/
protected void invalidateReference(){
- this.server = null;
+ this.servers = null;
this.ejb = null;
this.inProxyMap = false;
this.isInvalidReference = true;
1.5 +7 -5
openejb/modules/core/src/java/org/openejb/client/EJBObjectHandle.java
Index: EJBObjectHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBObjectHandle.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EJBObjectHandle.java 11 Feb 2005 22:30:15 -0000 1.4
+++ EJBObjectHandle.java 21 Dec 2005 14:21:49 -0000 1.5
@@ -112,7 +112,9 @@
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
- handler.server.writeExternal(out);
+
+ out.writeObject(handler.servers);
+
out.writeObject(handler.primaryKey);
}
@@ -121,7 +123,6 @@
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
- ServerMetaData server = new ServerMetaData();
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
@@ -141,10 +142,11 @@
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
- server.readExternal(in);
+ ServerMetaData[] servers = (ServerMetaData[]) in.readObject();
+
Object primaryKey = in.readObject();
- handler = EJBObjectHandler.createEJBObjectHandler(ejb, server,
primaryKey);
+ handler = EJBObjectHandler.createEJBObjectHandler(ejb, servers,
primaryKey);
ejbObjectProxy = handler.createEJBObjectProxy();
}
1.7 +10 -10
openejb/modules/core/src/java/org/openejb/client/EJBObjectHandler.java
Index: EJBObjectHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBObjectHandler.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EJBObjectHandler.java 20 Oct 2005 22:19:23 -0000 1.6
+++ EJBObjectHandler.java 21 Dec 2005 14:21:49 -0000 1.7
@@ -85,33 +85,33 @@
public EJBObjectHandler() {
}
- public EJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData server) {
- super(ejb, server);
+ public EJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[] servers) {
+ super(ejb, servers);
}
- public EJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData server,
Object primaryKey) {
- super(ejb, server, primaryKey);
+ public EJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[] servers,
Object primaryKey) {
+ super(ejb, servers, primaryKey);
}
protected void setEJBHomeProxy(EJBHomeProxy ejbHome) {
this.ejbHome = ejbHome;
}
- public static EJBObjectHandler createEJBObjectHandler(EJBMetaDataImpl
ejb, ServerMetaData server, Object primaryKey) {
+ public static EJBObjectHandler createEJBObjectHandler(EJBMetaDataImpl
ejb, ServerMetaData[] servers, Object primaryKey) {
switch (ejb.type) {
case EJBComponentType.BMP_ENTITY:
case EJBComponentType.CMP_ENTITY:
- return new EntityEJBObjectHandler(ejb, server, primaryKey);
+ return new EntityEJBObjectHandler(ejb, servers, primaryKey);
case EJBComponentType.STATEFUL:
- return new StatefulEJBObjectHandler(ejb, server, primaryKey);
+ return new StatefulEJBObjectHandler(ejb, servers,
primaryKey);
case EJBComponentType.STATELESS:
- return new StatelessEJBObjectHandler(ejb, server,
primaryKey);
+ return new StatelessEJBObjectHandler(ejb, servers,
primaryKey);
}
return null;
}
@@ -228,7 +228,7 @@
protected Object getEJBHome(Method method, Object[] args, Object proxy)
throws Throwable {
if (ejbHome == null) {
- ejbHome = EJBHomeHandler.createEJBHomeHandler(ejb,
server).createEJBHomeProxy();
+ ejbHome = EJBHomeHandler.createEJBHomeHandler(ejb,
servers).createEJBHomeProxy();
}
return ejbHome;
}
1.5 +7 -5
openejb/modules/core/src/java/org/openejb/client/EJBObjectProxyHandle.java
Index: EJBObjectProxyHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBObjectProxyHandle.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EJBObjectProxyHandle.java 17 Sep 2005 22:18:18 -0000 1.4
+++ EJBObjectProxyHandle.java 21 Dec 2005 14:21:49 -0000 1.5
@@ -75,7 +75,9 @@
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
- handler.server.writeExternal(out);
+
+ out.writeObject(handler.servers);
+
out.writeObject(handler.primaryKey);
}
@@ -84,7 +86,6 @@
*/
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
- ServerMetaData server = new ServerMetaData();
ejb.homeClass = (Class) in.readObject();
ejb.remoteClass = (Class) in.readObject();
@@ -93,10 +94,11 @@
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
- server.readExternal(in);
+ ServerMetaData[] servers = (ServerMetaData[]) in.readObject();
+
Object primaryKey = in.readObject();
- handler = EJBObjectHandler.createEJBObjectHandler(ejb, server,
primaryKey);
+ handler = EJBObjectHandler.createEJBObjectHandler(ejb, servers,
primaryKey);
}
1.3 +16 -5
openejb/modules/core/src/java/org/openejb/client/EJBResponse.java
Index: EJBResponse.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBResponse.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EJBResponse.java 17 Mar 2005 23:56:31 -0000 1.2
+++ EJBResponse.java 21 Dec 2005 14:21:49 -0000 1.3
@@ -47,6 +47,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -58,14 +59,12 @@
*
* @since 11/25/2001
*/
-public class EJBResponse implements Response {
-
-
+public class EJBResponse implements ClusteredResponse {
private transient int responseCode = -1;
private transient Object result;
+ private transient ServerMetaData[] servers;
public EJBResponse(){
-
}
public EJBResponse(int code, Object obj){
@@ -86,6 +85,15 @@
this.result = result;
}
+
+ public ServerMetaData[] getServers() {
+ return servers;
+ }
+
+ public void setServers(ServerMetaData[] servers) {
+ this.servers = servers;
+ }
+
public String toString(){
StringBuffer s = null;
switch (responseCode) {
@@ -153,6 +161,8 @@
}
stub.connect(orb);
}
+
+ servers = (ServerMetaData[]) in.readObject();
}
/**
@@ -174,5 +184,6 @@
//out.writeByte((byte)responseCode);
out.writeByte(responseCode);
out.writeObject(result);
+ out.writeObject(servers);
}
}
1.6 +6 -6
openejb/modules/core/src/java/org/openejb/client/EntityEJBHomeHandler.java
Index: EntityEJBHomeHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EntityEJBHomeHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EntityEJBHomeHandler.java 21 Feb 2005 08:55:13 -0000 1.5
+++ EntityEJBHomeHandler.java 21 Dec 2005 14:21:49 -0000 1.6
@@ -59,8 +59,8 @@
public EntityEJBHomeHandler(){
}
- public EntityEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData server){
- super(ejb, server);
+ public EntityEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
/**
@@ -145,7 +145,7 @@
if (null == primKey) {
return null;
}
- handler =
EJBObjectHandler.createEJBObjectHandler(ejb,server,primKey);
+ handler =
EJBObjectHandler.createEJBObjectHandler(ejb,servers,primKey);
handler.setEJBHomeProxy((EJBHomeProxy)proxy);
registerHandler(ejb.deploymentID+":"+primKey, handler);
return handler.createEJBObjectProxy();
@@ -162,7 +162,7 @@
if (null == primKey) {
continue;
}
- handler =
EJBObjectHandler.createEJBObjectHandler(ejb,server,primKey);
+ handler =
EJBObjectHandler.createEJBObjectHandler(ejb,servers,primKey);
handler.setEJBHomeProxy((EJBHomeProxy)proxy);
registerHandler(ejb.deploymentID+":"+primKey, handler);
primaryKeys[i] = handler.createEJBObjectProxy();
@@ -177,7 +177,7 @@
if (null == primKey) {
continue;
}
- handler =
EJBObjectHandler.createEJBObjectHandler(ejb,server,primKey);
+ handler =
EJBObjectHandler.createEJBObjectHandler(ejb,servers,primKey);
handler.setEJBHomeProxy((EJBHomeProxy)proxy);
registerHandler(ejb.deploymentID+":"+primKey, handler);
primaryKeys[i] = handler.createEJBObjectProxy();
1.4 +5 -5
openejb/modules/core/src/java/org/openejb/client/EntityEJBObjectHandler.java
Index: EntityEJBObjectHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EntityEJBObjectHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EntityEJBObjectHandler.java 15 Feb 2005 03:24:01 -0000 1.3
+++ EntityEJBObjectHandler.java 21 Dec 2005 14:21:50 -0000 1.4
@@ -62,12 +62,12 @@
public EntityEJBObjectHandler(){
}
- public EntityEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server){
- super(ejb, server);
+ public EntityEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
- public EntityEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server, Object primaryKey){
- super(ejb, server, primaryKey);
+ public EntityEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers, Object primaryKey){
+ super(ejb, servers, primaryKey);
registryId = ejb.deploymentID+":"+primaryKey;
registerHandler( registryId, this );
}
1.7 +19 -8
openejb/modules/core/src/java/org/openejb/client/JNDIContext.java
Index: JNDIContext.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/JNDIContext.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JNDIContext.java 20 Oct 2005 22:19:23 -0000 1.6
+++ JNDIContext.java 21 Dec 2005 14:21:50 -0000 1.7
@@ -59,7 +59,7 @@
public class JNDIContext implements Serializable, InitialContextFactory,
Context, RequestMethods, ResponseCodes {
private transient String tail = "/";
- private transient ServerMetaData server;
+ private transient ServerMetaData[] servers;
private transient Hashtable env;
/**
@@ -85,7 +85,7 @@
*/
public JNDIContext(JNDIContext that){
this.tail = that.tail;
- this.server = that.server;
+ this.servers = that.servers;
this.env = (Hashtable)that.env.clone();
}
@@ -105,7 +105,11 @@
private JNDIResponse request(JNDIRequest req) throws Exception {
- return (JNDIResponse) Client.request(req, new JNDIResponse(),
server);
+ RequestInfo reqInfo = new RequestInfo(req, servers);
+ JNDIResponse res = new JNDIResponse();
+ ResponseInfo resInfo = new ResponseInfo(res);
+ Client.request(reqInfo, resInfo);
+ return res;
}
public static void print(String s){
@@ -117,7 +121,11 @@
//TODO:0:Write authentication module
protected AuthenticationResponse
requestAuthorization(AuthenticationRequest req) throws java.rmi.RemoteException
{
- return (AuthenticationResponse) Client.request(req, new
AuthenticationResponse(), server);
+ RequestInfo reqInfo = new RequestInfo(req, servers);
+ AuthenticationResponse res = new AuthenticationResponse();
+ ResponseInfo resInfo = new ResponseInfo(res);
+ Client.request(reqInfo, resInfo);
+ return res;
}
//-------------------------------------------------------------//
@@ -169,9 +177,11 @@
}
try {
- server = new ServerMetaData();
+ ServerMetaData server = new ServerMetaData();
server.address = InetAddress.getByName( url.getHost() );
server.port = url.getPort();
+
+ servers = new ServerMetaData[] {server};
} catch (UnknownHostException e){
throw new ConfigurationException("Invalid provider
URL:"+serverURL+": host unknown: "+e.getMessage());
}
@@ -198,7 +208,8 @@
switch (res.getResponseCode()) {
case AUTH_REDIRECT:
- server = res.getServer();
+ ServerMetaData server = res.getServer();
+ servers = new ServerMetaData[] {server};
break;
case AUTH_DENIED:
throw new javax.naming.AuthenticationException("This
principle is not authorized.");
@@ -208,7 +219,7 @@
// Construct a new handler and proxy.
public EJBHomeProxy createEJBHomeProxy(EJBMetaDataImpl ejbData){
- EJBHomeHandler handler =
EJBHomeHandler.createEJBHomeHandler(ejbData, server);
+ EJBHomeHandler handler =
EJBHomeHandler.createEJBHomeHandler(ejbData, servers);
EJBHomeProxy proxy = handler.createEJBHomeProxy();
handler.ejb.ejbHomeProxy = proxy;
1.7 +1 -8
openejb/modules/core/src/java/org/openejb/client/JNDIResponse.java
Index: JNDIResponse.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/JNDIResponse.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JNDIResponse.java 21 Jan 2005 06:30:35 -0000 1.6
+++ JNDIResponse.java 21 Dec 2005 14:21:50 -0000 1.7
@@ -59,9 +59,6 @@
* @since 11/25/2001
*/
public class JNDIResponse implements Response {
-
-
- private transient ServerMetaData serverMetaData;
private transient int responseCode = -1;
private transient Object result;
private static final int CONTEXT = 1;
@@ -70,10 +67,6 @@
private static final int END = 99;
public JNDIResponse(){
- }
-
- public JNDIResponse(ServerMetaData serverMetaData) {
- this.serverMetaData = serverMetaData;
}
public JNDIResponse(int code, Object obj){
1.3 +31 -7
openejb/modules/core/src/java/org/openejb/client/ServerMetaData.java
Index: ServerMetaData.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/ServerMetaData.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ServerMetaData.java 28 Sep 2005 02:44:45 -0000 1.2
+++ ServerMetaData.java 21 Dec 2005 14:21:50 -0000 1.3
@@ -58,6 +58,7 @@
*/
public class ServerMetaData implements Externalizable{
+ transient String nodeName;
transient int port;
/**
@@ -71,11 +72,16 @@
}
- public ServerMetaData(String host, int port) throws UnknownHostException{
+ public ServerMetaData(String nodeName, String host, int port) throws
UnknownHostException{
+ this.nodeName = nodeName;
this.address = InetAddress.getByName( host );
this.port = port;
}
+ public String getNodeName() {
+ return nodeName;
+ }
+
public int getPort(){
return port;
}
@@ -92,8 +98,26 @@
this.address = address;
}
+ public boolean equals(Object obj) {
+ if (false == obj instanceof ServerMetaData) {
+ return false;
+ }
+ ServerMetaData other = (ServerMetaData) obj;
+
+ if (false == nodeName.equals(other.nodeName)) {
+ return false;
+ } else if (false == address.equals(other.address)) {
+ return false;
+ } else if (false == (port == other.port)) {
+ return false;
+ }
+ return true;
+ }
-
+ public int hashCode() {
+ return nodeName.hashCode() * address.hashCode() * port;
+ }
+
/**
* The object implements the readExternal method to restore its
* contents by calling the methods of DataInput for primitive
@@ -107,6 +131,7 @@
* restored cannot be found.
*/
public void readExternal(ObjectInput in) throws
IOException,ClassNotFoundException {
+ nodeName = in.readUTF();
// byte[] IP = new byte[4];
// IP[0] = in.readByte();
@@ -155,6 +180,8 @@
* @exception IOException Includes any I/O exceptions that may occur
*/
public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeUTF(nodeName);
+
byte[] addr = address.getAddress();
out.writeByte(addr[0]);
@@ -164,7 +191,4 @@
out.writeInt(port);
}
-
-}
-
-
+}
\ No newline at end of file
1.5 +3 -3
openejb/modules/core/src/java/org/openejb/client/StatefulEJBHomeHandler.java
Index: StatefulEJBHomeHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/StatefulEJBHomeHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StatefulEJBHomeHandler.java 12 Feb 2005 18:41:50 -0000 1.4
+++ StatefulEJBHomeHandler.java 21 Dec 2005 14:21:50 -0000 1.5
@@ -62,8 +62,8 @@
public StatefulEJBHomeHandler(){
}
- public StatefulEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData
server){
- super(ejb, server);
+ public StatefulEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
/**
1.4 +5 -5
openejb/modules/core/src/java/org/openejb/client/StatefulEJBObjectHandler.java
Index: StatefulEJBObjectHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/StatefulEJBObjectHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- StatefulEJBObjectHandler.java 15 Feb 2005 03:24:01 -0000 1.3
+++ StatefulEJBObjectHandler.java 21 Dec 2005 14:21:50 -0000 1.4
@@ -58,12 +58,12 @@
public StatefulEJBObjectHandler() {
}
- public StatefulEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server){
- super(ejb, server);
+ public StatefulEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
- public StatefulEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server, Object primaryKey){
- super(ejb, server, primaryKey);
+ public StatefulEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers, Object primaryKey){
+ super(ejb, servers, primaryKey);
registerHandler( primaryKey, this );
}
1.4 +3 -3
openejb/modules/core/src/java/org/openejb/client/StatelessEJBHomeHandler.java
Index: StatelessEJBHomeHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/StatelessEJBHomeHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- StatelessEJBHomeHandler.java 30 Jul 2004 19:03:44 -0000 1.3
+++ StatelessEJBHomeHandler.java 21 Dec 2005 14:21:50 -0000 1.4
@@ -59,8 +59,8 @@
public StatelessEJBHomeHandler(){
}
- public StatelessEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData
server){
- super(ejb, server);
+ public StatelessEJBHomeHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
/**
1.3 +5 -5
openejb/modules/core/src/java/org/openejb/client/StatelessEJBObjectHandler.java
Index: StatelessEJBObjectHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/StatelessEJBObjectHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StatelessEJBObjectHandler.java 30 Jul 2004 19:03:44 -0000 1.2
+++ StatelessEJBObjectHandler.java 21 Dec 2005 14:21:50 -0000 1.3
@@ -64,12 +64,12 @@
public StatelessEJBObjectHandler(){
}
- public StatelessEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server){
- super(ejb, server);
+ public StatelessEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers){
+ super(ejb, servers);
}
- public StatelessEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData
server, Object primaryKey){
- super(ejb, server, primaryKey);
+ public StatelessEJBObjectHandler(EJBMetaDataImpl ejb, ServerMetaData[]
servers, Object primaryKey){
+ super(ejb, servers, primaryKey);
}
// This should only be created at the server side and should not
reference Container
1.1
openejb/modules/core/src/java/org/openejb/client/ClusteredResponse.java
Index: ClusteredResponse.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact [EMAIL PROTECTED]
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.sf.net/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: ClusteredResponse.java,v 1.1 2005/12/21 14:21:49 gdamour Exp $
*/
package org.openejb.client;
/**
*
* @since 11/25/2001
*/
public interface ClusteredResponse extends Response {
ServerMetaData[] getServers();
}
1.1
openejb/modules/core/src/java/org/openejb/client/RequestInfo.java
Index: RequestInfo.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact [EMAIL PROTECTED]
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: RequestInfo.java,v 1.1 2005/12/21 14:21:50 gdamour Exp $
*/
package org.openejb.client;
/**
*
*/
public class RequestInfo {
private final Request request;
private final ServerMetaData[] servers;
public RequestInfo(Request request, ServerMetaData[] server) {
this.request = request;
this.servers = server;
}
public Request getRequest() {
return request;
}
public ServerMetaData[] getServers() {
return servers;
}
}
1.1
openejb/modules/core/src/java/org/openejb/client/ResponseInfo.java
Index: ResponseInfo.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact [EMAIL PROTECTED]
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: ResponseInfo.java,v 1.1 2005/12/21 14:21:50 gdamour Exp $
*/
package org.openejb.client;
/**
*
*/
public class ResponseInfo {
private final Response response;
private ServerMetaData[] servers;
public ResponseInfo(Response response) {
this.response = response;
}
public Response getResponse() {
return response;
}
public ServerMetaData[] getServers() {
return servers;
}
public void setServers(ServerMetaData[] servers) {
this.servers = servers;
}
}