can't find SerialContextProvider
silver Jun 24, 2002 11:00 PMhello,
I am trying to use jboss3.0.0 on windows 2000. (jdk 1.3) I have implemented the EJBHomeFactory class. However, when I try a InitialContext() with no arguments I am get the following exception when my client app attempts to perform a JNDI lookup of a session bean:
[EJBHomeFactory] Got initial context = localhost:1099@java:comp/env
javax.naming.CommunicationException: Can't find SerialContextProvider
 at com.sun.enterprise.naming.SerialContext.getProvider(../../src/share/com/sun/enterprise/naming/SerialContext.java:65)
 at com.sun.enterprise.naming.SerialContext.lookup(../../src/share/com/sun/enterprise/naming/SerialContext.java:134)
 at javax.naming.InitialContext.lookup(InitialContext.java:350)
 at org.jschedule.util.EJBHomeFactory.lookUpHome(EJBHomeFactory.java:127)
 at org.jschedule.test.TestSessionBeans.main(TestSessionBeans.java:31)
Can't find SerialContextProvider
org.jschedule.util.EJBHomeFactoryException: Can't find SerialContextProvider
 at org.jschedule.util.EJBHomeFactory.lookUpHome(EJBHomeFactory.java:145)
 at org.jschedule.test.TestSessionBeans.main(TestSessionBeans.java:31)
I placed the jndi.properties files in the same directory
as org.jschedule.test.TestSessionBeans. If I set
the properties values in EJBHomeFactory, everthing works fine. where is the proper place for a jndi.properties file? a seperate directory? I am using forte4j to run
my client app. thanks.
Silver
for some reason i can't attached files on the forum.
code is below
public class EJBHomeFactory {
 private Map m_ejbHomes; // map of all ejb home interfaces
 private Context m_jndiCntx;
 private static String m_hostProviderURL;
 private static EJBHomeFactory aFactorySingleton;
 // ********************************************************************
 // Private constructor to allow only a single instance. Initializiation
 // of the Context with System property Info should take place here.
 // ********************************************************************
 private EJBHomeFactory() throws NamingException {
 // Set up the naming provider; this may not always be necessary, depending
 // on how your Java system is configured.
 // ... Specify the JNDI properties specific to the vendor.
 try {
 Properties env = new Properties();
 env.setProperty("java.naming.factory.initial", JNDINames.JAVA_NAMING_FACTORY);
 env.setProperty("java.naming.factory.url.pkgs", JNDINames.JAVA_NAMING_FACTORY_URL);
 env.setProperty("java.naming.provider.url", m_hostProviderURL);
 env.setProperty("jnp.socketFactory", JNDINames.JAVA_JNP_FACTORY);
 env.setProperty("jnp.timeout", "0");
 env.setProperty("jnp.sotimeout", "0");
 m_jndiCntx = new javax.naming.InitialContext();
 System.out.println("[EJBHomeFactory] Got initial context = " +
 m_hostProviderURL + "@java:comp/env");
 // prevent an accidental unsynchronized access to the map
 m_ejbHomes = Collections.synchronizedMap(new HashMap());
 }
 catch (Exception e) {
 // Can't do anything about this. Client will
 // catch errors upon trying to do a lookup.
 }
 // ********************************************************************
 // ********************************************************************
public EJBHome lookUpHome(Class homeClass) throws EJBHomeFactoryException {
 // find the specific class name
 javax.ejb.EJBHome anEJBHome = (javax.ejb.EJBHome) m_ejbHomes.get(homeClass);
 try {
 if (anEJBHome == null) {
 // Obtain an abstract reference to the EJB's home interface
 Object objref = m_jndiCntx.lookup("ejb/" + homeClass.getName());
 System.out.println("[EJBHomeFactory].lookUpHome() Got reference = ejb/" + homeClass.getName());
 // Convert the abstract reference to the home interface
 anEJBHome = (javax.ejb.EJBHome) javax.rmi.PortableRemoteObject.narrow(objref, homeClass);
 System.out.println("[EJBHomeFactory].lookUpHome() Got home interface");
 // Insert the ejbhome into the hash map for fast lookups next time
 m_ejbHomes.put(homeClass, anEJBHome);
 }
 }
 catch (ClassCastException e) {
 throw new EJBHomeFactoryException(e);
 }
 catch (ClassNotFoundException nfe) {
 nfe.printStackTrace();
 throw new EJBHomeFactoryException(nfe);
 }
 catch (NamingException ne){
 ne.printStackTrace();
 throw new EJBHomeFactoryException(ne);
 }
 return anEJBHome;
 }
}
 
     
    