[jboss-user] [JNDI/Naming/Network] - TimerService issues

dolsen do-not-reply at jboss.com
Wed Feb 18 18:50:46 EST 2009


Hi!

I'm setting some timers using EJB TimerService:

@Stateless
  | public class CommandBean implements CommandRemote
  | {
  | 	static Logger logger = Logger.getLogger(PlayerBean.class);
  | 
  | 	@Resource TimerService timerService;
  | 
  | 	public void scheduleCommand(Command command)
  | 	{
  | 		timerService.createTimer(command.getDuration(), command);
  | 	}
  | 	
  | 	public void scheduleContinousCommand(Command command)
  | 	{
  | 		timerService.createTimer(command.getDuration(), command.getDuration(), command);
  | 	}
  | 	
  | 	public Collection<Command> getCommands(long userId)
  | 	{
  | 		Collection<Command> commands = new ArrayList<Command>();
  | 		for (Object object : timerService.getTimers())
  | 		{
  | 			Timer timer = (Timer) object;
  | 			
  | 			Command command = (Command) timer.getInfo();
  | 			command.setTimeRemaining(timer.getTimeRemaining());
  | 			if (command.getUserId() == userId)
  | 			{
  | 				commands.add(command);
  | 			}
  | 		}
  | 		
  | 		return commands;
  | 	}
  | 	
  | 	@Timeout
  | 	public void runCommand(Timer timer)
  | 	{
  | 		Command command = (Command) timer.getInfo();
  | 		
  | 		logger.debug("runCommand: Firing command for user: " + command.getUserId() + " " + command.getDescription());
  | 		
  | 		User user = null;
  | 
  | 		System.setProperty("java.security.policy", "server.policy");
  | 		if (System.getSecurityManager() == null)
  | 		{
  | 			System.setSecurityManager(new RMISecurityManager());
  | 		}
  | 		
  | 		InitialContext jndiContext;
  | 		try
  | 		{
  | 			jndiContext = getInitialContext();
  | 			UserRemote userRef = (UserRemote) jndiContext.lookup("UserRemote");
  | 			UserRemote dao = (UserRemote) PortableRemoteObject.narrow(userRef, UserRemote.class);
  | 			user = dao.findUser(command.getUserId());
  | 			logger.debug("runCommand: loading userId: " + user.getId());
  | 		} 
  | 		catch (NamingException e)
  | 		{
  | 			logger.error("NamingException: ", e);
  | 		}
  | ...
  | 	}
  | 
  | 	public static InitialContext getInitialContext() throws NamingException
  | 	{
  | 		Properties properties = new Properties();
  | 
  | 		properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, System.getProperty(Context.INITIAL_CONTEXT_FACTORY));
  | 		properties.setProperty(Context.URL_PKG_PREFIXES, System.getProperty(Context.URL_PKG_PREFIXES));
  | 		properties.setProperty(Context.PROVIDER_URL, "jnp://" + System.getProperty("providerHost") + ":1099");
  | 		
  | 		return new InitialContext(properties);
  | 	}
  | 
  | 


jboss.xml:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <jboss>
  |    <enterprise-beans>
  |       <session>
  |          <ejb-name>UserBean</ejb-name>
  |          <jndi-name>UserRemote</jndi-name>
  |       </session>
  |    </enterprise-beans>
  | </jboss
  | 

JNDI view shows:

+- UserRemote (class: Proxy for: com.feudalism.session.user.UserRemote)


This works fine, and the times run at the expected time.

The problem occurs when the server is restarted, or the application is redeployed. 

At this point, when the timer fires I get the following error:

ervice=EJB3]) NamingException:
javax.naming.NameNotFoundException: UserRemote not bound
        at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
        at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
        at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
        at org.jnp.server.NamingServer.lookup(NamingServer.java:443)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
        at java.lang.Thread.run(Thread.java:595)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
        at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:713)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:673)
        at javax.naming.InitialContext.lookup(InitialContext.java:351)
        at com.feudalism.session.command.CommandBean.runCommand(CommandBean.java:89)


This is running on JBoss_5_0_0_GA

Any help is appreciated. 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4211298#4211298

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4211298



More information about the jboss-user mailing list