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
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
00098 Rar ra = new Rar();
00099 obj = ra.createFactory(raname, rarObjectName, factoryOffset, factoryType,
00100 conn, jConn);
00101
00102 return obj;
00103 }
00104 }