[jboss-user] [EJB/JBoss] - Error invoking ejbTimeout

asookazian do-not-reply at jboss.com
Mon Feb 25 20:14:44 EST 2008


I'm using JBoss4.2.1.GA and Seam2.0.0.GA for a POC project here.

error:

Error invoking ejbTimeout: java.lang.RuntimeException: java.lang.IllegalStateException: Attempted to invoke a Seam component outside the an initialized application

Please refer to the following thread for details on this problem:

http://seamframework.org/Community/ErrorInvokingEjbTimeout

I need to know not only the root cause of this error but also how does JBoss create a timer and store that information so that it knows to execute a specified method on an interval basis.

When I deleted my JBoss extraction and re-extracted and deployed my app, the error went away until I ran the test case the first time after re-deployment.

Please point me to a JBoss internals doc or section in the timer service (chapter 18) of the EJB3 core spec to answer these questions.

The server.log output as well as source code for the session beans is listed in the original thread (see link above).

Also, I am seeing the following behavior after placing some breakpoints in the eclipse debugger.


  | @Stateless
  | @AutoCreate
  | @Scope(ScopeType.APPLICATION)
  | @Name("EJBPollingProcessorBean")
  | public class EJBPollingProcessorBean implements EJBPollingProcessorLocal {
  |     
  | 	//TO DO: map needs to be stored in application context as it is session-independent data
  | 	//TO DO: convert this into an ArrayList of map objects b/c we will need a map
  | 	// for every drop-down in each app
  |     private Map<String,String> map; // = new ArrayList<Map<String,String>>();
  | 
  |     @Logger Log log;
  |     
  |     public Timer schedulePoller(@Expiration Date when, @IntervalDuration Long interval, String distinguishedGroupName) 
  |     {     	    	
  |     	log.info("when = " + when);
  |     	log.info("interval = " + interval);
  |     	log.info("distinguishedGroupName = "+distinguishedGroupName);
  |     	
  |     	String searchBase = CoxProperties.getPropertyObject().getProperty(CoxConstants.ACTIVE_DIRECTORY_SEARCH_BASE);
  |         String providerUrl = CoxProperties.getPropertyObject().getProperty(CoxConstants.ACTIVE_DIRECTORY_PROVIDER_URL);
  |         String principal = CoxProperties.getPropertyObject().getProperty(CoxConstants.ACTIVE_DIRECTORY_USER);
  |         String credentials = CoxProperties.getPropertyObject().getProperty(CoxConstants.ACTIVE_DIRECTORY_PWD);
  | 
  |         // Declare holders search result's
  |         SearchAdapterResult<UserItem> userSearchResults = null;        
  |         List<UserItem> userItemList = null;
  | 
  |         // Create a new instance of CADILS search adapter
  |         SearchAdapter sa = new SearchAdapter(searchBase, providerUrl, principal, credentials);
  | 
  |         try {
  |               String groupSearchFilter = "*)(memberOf=" + distinguishedGroupName;   
  |               userSearchResults = sa.searchBySAMAccountName(groupSearchFilter);
  | 
  |               if (userSearchResults.hasItems()) {
  |                   //List of all the AD users who belong to your group
  |             	  userItemList = userSearchResults.getItemList();
  |               }
  |         } 
  |         catch (SearchFailedException sfe) {
  |               log.error(sfe);
  |         }
  |         Iterator<UserItem> it = userItemList.iterator();
  |         
  |         if (map != null) { 
  |         	map.clear();
  |         }
  |         
  |         while(it.hasNext()) {
  |         	UserItem ui = it.next();
  |         	log.info("ui.getDisplayName() = " + ui.getDisplayName());
  |         	log.info("ui.getADSPath() = " + ui.getADSPath());
  |         	        	
  |         	map.put(ui.getDisplayName(), ui.getSAMAccountName());        	
  |         	log.info("after map.put()");
  |         }
  | 
  |         return null;
  |     }
  |  public Map<String,String> getMap() {
  |     	return map;
  |     }
  | 
  |     
  | }

server.log after startup:


  | 16:57:10,470 INFO  [Server] JBoss (MX MicroKernel) [4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=200707131605)] Started in 55s:278ms
  | 17:07:19,030 INFO  [EJBPollingProcessorBean] when = Mon Feb 25 16:40:35 PST 2008
  | 17:07:19,030 INFO  [EJBPollingProcessorBean] interval = 600060
  | 17:07:19,030 INFO  [EJBPollingProcessorBean] distinguishedGroupName = CN=!CCI ORG APP - SHIMS Tech,OU=Groups,OU=Orange County,OU=CCI,DC=CORP,DC=COX,DC=com
  | 17:07:19,795 INFO  [EJBPollingProcessorBean] ui.getDisplayName() = Bell, Michael (CCI-Orange County)
  | 17:07:19,795 INFO  [EJBPollingProcessorBean] ui.getADSPath() = CN=Michael Bell (CCI-Orange County),OU=Users,OU=Admin Users,OU=Users and Computers,OU=Orange County,OU=CCI,DC=CORP,DC=COX,DC=com
  | 17:07:19,811 ERROR [TimerImpl] Error invoking ejbTimeout: javax.ejb.EJBTransactionRolledbackException    

  
so you see that the log output ("after map.put()") is not being writtern to the server.log.  Presumably it is not being executed.  The exception is being thrown after map.put(..) execs.

#schedule Quartz for every minute, value in milliseconds
activeDirectoryPollingInterval=600060

this is 10 min's although I'm going to change this to 1 min for testing purposes.

any help is appreciated as this is becoming a mystery to me.  not sure if how the vendor implementations handle this are enforced in the ejb3 spec...

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

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



More information about the jboss-user mailing list