ResourceObjectJNDIHandler.java

00001 
00024 package org.objectweb.jonas.resource;
00025 
00026 import java.util.Hashtable;
00027 
00028 import javax.naming.Context;
00029 import javax.naming.Name;
00030 import javax.naming.RefAddr;
00031 import javax.naming.Reference;
00032 import javax.naming.spi.ObjectFactory;
00033 
00034 import org.objectweb.jonas.common.JNDIUtils;
00035 import org.objectweb.jonas_rar.deployment.api.ConnectorDesc;
00036 import org.objectweb.jonas_rar.deployment.api.JonasConnectorDesc;
00037 
00044 public class ResourceObjectJNDIHandler implements ObjectFactory {
00045 
00056     public Object getObjectInstance(Object refObj, Name name,
00057                                     Context nameCtx, Hashtable env) throws Exception {
00058 
00059         Reference ref = (Reference) refObj;
00060 
00061         if (ref == null) {
00062             System.out.println("No reference found");
00063             return null;
00064         }
00065         String clname = ref.getClassName();
00066         String raname = (String) ref.get(ResourceServiceImpl.JNDI_NAME).getContent();
00067 
00068         Object obj = null;
00069         try {
00070             obj = Rar.getResourceObject(raname);
00071         } catch (Throwable ex) {
00072             ex.printStackTrace();
00073         }
00074         if (obj != null) {
00075             return obj;
00076         }
00077 
00078         // Need to load the factory in the client environment
00079         String rarObjectName = (String) ref.get(ResourceServiceImpl.RAR_OBJNAME).getContent();
00080         String factoryType = (String) ref.get(ResourceServiceImpl.FACTORY_TYPE).getContent();
00081         String factoryOff = (String) ref.get(ResourceServiceImpl.FACTORY_OFFSET).getContent();
00082         int factoryOffset = Integer.parseInt(factoryOff);
00083 
00084         RefAddr refAddr = null;
00085         ConnectorDesc conn = null;
00086         refAddr = ref.get(ResourceServiceImpl.RA_XML);
00087         if (refAddr != null) {
00088             conn = (ConnectorDesc) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent());
00089         }
00090 
00091         JonasConnectorDesc jConn = null;
00092         refAddr = ref.get(ResourceServiceImpl.JONAS_RA_XML);
00093         if (refAddr != null) {
00094             jConn = (JonasConnectorDesc) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent());
00095         }
00096 
00097         // This will either get the other server's implemenation or a client version
00098         Rar ra = new Rar();
00099         obj = ra.createFactory(raname, rarObjectName, factoryOffset, factoryType,
00100                                conn, jConn);
00101 
00102         return obj;
00103     }
00104 }

Generated on Tue Feb 15 15:05:20 2005 for JOnAS by  doxygen 1.3.9.1