Стоит задача зупустить таймер со стартом glassfish Имеется Glassfish, в нем stateless bean TimerBean | Код | package beans;
import entities.Config; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerService; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;
@Stateless public class TimerBean implements beans.TimerRemote, beans.TimerLocal { @Resource TimerService timerService; @PersistenceContext EntityManager em; public TimerBean() { } public void setTimer() { Timer timer = timerService.createTimer( 5, 5, null ); } @Timeout public void timeout(Timer timer) { Config config = new Config(); config.setName("one"); config.setValue("1"); em.persist(config); } }
|
и 2 интерфейса TimerLocal и TimerRemote: | Код | package beans;
import javax.ejb.Remote; import javax.ejb.Timeout; import javax.ejb.Timer;
@Remote public interface TimerRemote {
@Timeout void timeout(Timer timer);
void setTimer(); }
|
| Код | package beans;
import javax.ejb.Local;
/** * This is the business interface for Timer enterprise bean. */ @Local public interface TimerLocal { void setTimer(); }
|
Создал lifecycle модуль для Glassfish. Модуль glassfish'eм находится и запускается, проблема в rmi, немогу найти bean в ejb3 чтобы запустить таймер. | Код | import com.sun.appserv.server.LifecycleEvent; import com.sun.appserv.server.LifecycleEventContext; import com.sun.appserv.server.LifecycleListener; import com.sun.appserv.server.ServerLifecycleException; import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject;
public class setiLifecycleListener implements LifecycleListener { public setiLifecycleListener() { }
public void handleEvent(LifecycleEvent lifecycleEvent) throws ServerLifecycleException { LifecycleEventContext lfcECtx = lifecycleEvent.getLifecycleEventContext(); lfcECtx.log("lifecycle event type " + String.valueOf(lifecycleEvent.getEventType())); if(lifecycleEvent.getEventType() == LifecycleEvent.READY_EVENT){ InitialContext ctx = lifecycleEvent.getLifecycleEventContext().getInitialContext(); TimerRemote timerBean = null; lfcECtx.log("begin lookup"); try { timerBean = (TimerRemote) ctx.lookup("setiee-ejb.TimerRemote"); } catch (NamingException ex) { ex.printStackTrace(); return; } lfcECtx.log("end lookup"); timerBean.setTimer(); } } }
|
Как вообще найти bean в EJB3 через RMI в контексте моей задачи ( или хотябы просто так ). Если другие идеи?
|