Porblem in Ejb3 using TimerService with @Singleton and @Management
sbutt Mar 21, 2014 7:55 AMHi All,
I am trying to understand an old code written by a colleague who has left the company now.
The problem is about calling a start() method, which should then initialize a timeerservice and further invokes a method.
The code was presumably working fine earlier on jboss 5, but since we have now migrated to jboss 6, it does not seems to work.
The EJB is as follows:
package com.abc.potsdam.middleware.cache;
import java.util.StringTokenizer;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Singleton;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.ejb.Service;
import com.traveltainment.potsdam.common.configuration.ConfigService;
@Singleton
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class CacheLoaderBean implements CacheLoader, CacheLoaderManagement {
private Log log = LogFactory.getLog(this.getClass());
@EJB(mappedName = "/ConfigServiceBean/local")
ConfigService configService;
@EJB
DroolsSession droolsSession;
@Resource
private SessionContext sessionContext;
/**
* after 10000 ms starting of loading persistence units
*
* @param timer
*/
@Timeout
public void startTimeout(Timer timer) {
loadPersistenceUnitsToCache();
}
public void loadPersistenceUnitsToCache() {
String persistenceUnits = configService
.getProperty("AvailablePersistenceUnits");
log.info("reloading persistence units: " + persistenceUnits);
StringTokenizer stringTokenizer = new StringTokenizer(persistenceUnits,
",");
while (stringTokenizer.hasMoreTokens()) {
String persistenceUnitName = stringTokenizer.nextToken();
droolsSession.initSession(persistenceUnitName);
}
}
public void start() {
// create timer for 10000 ms to start loading cache
TimerService timerService = sessionContext.getTimerService();
Timer timer = timerService.createTimer(10000, "cache loading timer");
}
}
The imported interfaces are:
package com.abc.potsdam.middleware.cache;
import org.jboss.ejb3.annotation.Management;
@Management
public interface CacheLoaderManagement
{
public void loadPersistenceUnitsToCache();
public void start();
}
package com.abc.potsdam.middleware.cache;
import javax.ejb.Local;
import org.jboss.annotation.ejb.Management;
@Local
public interface CacheLoader
{
public void loadPersistenceUnitsToCache();
}
The problem is that in my implementation bean, I don't see the start() method ever getting executed. If it is to be invoked via JMX-Console then also I am a bit unaware as to how I can do that?
Since the start method never gets executed, the rest of the functionality is also never invoked.
I have done a bit of research on the topic, and found out at some threads that probably @Singleton and @Management have some issues together when using jboss 6?
The compilation is all done fine, it is only then the code never gets executed and I don't see the log messages appearing.
Could some please give me some pointers as to how I can set a timer for my scenario here?
Thanks.