1 Reply Latest reply: Apr 23, 2012 4:40 AM by jaikiran pai RSS

javax.naming.NoInitialContextException...

Joseph Hwang Novice

I use ejb3.1 on JBoss 7.0.2. I develop bean with @Schedule annotation. The codes are :

 

==== IScheduleTestPort.java

package com.aaa.ejb3;

import javax.ejb.Remote;

 

@Remote
public interface IScheduleTestPort {
   public String getSignal();
}

 

===== ScheduleBean.java

package com.aaa.ejb3;

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.Schedules;
import javax.ejb.Schedule;
import javax.ejb.Stateless;

@Stateless
public class ScheduleBean implements IScheduleTestPort {

   private String str;

   @PostConstruct
   public void doPostConstruct() {
      str = "Time is : ";
   }

  @Schedules({
    @Schedule(dayOfMonth = "5", hour = "09-18", minute = "*", second="10/5", timezone = "America/Los_Angeles"),
    @Schedule(dayOfMonth = "Mon", hour = "10-17", minute = "*", second="*/5" , timezone = "Asia/Seoul") })
   @Override
   public String getSignal() {
      // TODO Auto-generated method stub
      return str + new Date();
   }

}

 

===== ScheduleBeanClient.java

package com.aaa.ejb3;

 

import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.Context;

 

public class ScheduleBeanClient {
 
/**
  * @param args
  */
public static void main(String[] args) {

  // TODO Auto-generated method stub
  try {
   Properties props = new Properties();
     
   props.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
   props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
   props.put("java.naming.provider.url", "jnp://localhost:1099");
 
   Context ctx = new InitialContext(props);
   ScheduleBean schedule = (ScheduleBean)ctx.lookup("java:module/ScheduleBean");
     
   while (true) {
    System.out.println(schedule.getSignal());
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
}

}

 

But client throws exception like below :

 

javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]

at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)

at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

at javax.naming.InitialContext.init(InitialContext.java:223)

at javax.naming.InitialContext.<init>(InitialContext.java:197)

at com.aaa.ejb3.ScheduleBeanClient.main(ScheduleBeanClient.java:47)

Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:247)

at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)

at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)

 

So i remove the parameter of InitialContext,

 

public static void main(String[] args) { 

  // TODO Auto-generated method stub
  try {

    Context ctx = new InitialContext();
    ScheduleBean schedule = (ScheduleBean)ctx.lookup("java:module/ScheduleBean");

 

    while (true) {
      System.out.println(schedule.getSignal());
    }
  } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }

...

 

This the codes throws the following exception ,

 

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

at javax.naming.InitialContext.lookup(InitialContext.java:392)

at com.aaa.ejb3.ScheduleBeanClient.main(ScheduleBeanClient.java:49)

 

I have no idea of what is wrong with my codes. I need your help!

Thanks in advanced.