gpt4 book ai didi

java - 应用程序启动时使用计时器启动 EJB

转载 作者:行者123 更新时间:2023-12-01 10:45:30 24 4
gpt4 key购买 nike

我想在 Weblogic 11G 上启动带计时器的 EJB 3.0,但无法使用 PostConstruct

如何在应用程序启动时启动此 EJB?

@Resource TimerService timerService;

@PostConstruct
public void initialize() {


}

@Timeout
public void timeout(Timer timer)
{
System.out.println("Timeout occurred !!!");
if (timerService.getTimers().size() <= 1) {
Timer newtimer = timerService.createTimer(5000,"Clean Timer");
}

}


@Override
public void inicia() {
if (timerService.getTimers().size() == 0) {
Timer timer = timerService.createTimer(5000,"Clean Timer");
}
}

也许我可以在 PostConstruct 中的另一个 EJB 中调用它?

最佳答案

您需要使用 servlet 来触发您的 ejb

  1. 创建 servlet 并重写 init 方法

  2. 在 init 方法内对您的 ejb 进行 JNDI 查找并调用该方法

像这样:

public class FilesystemCleanerServlet
extends HttpServlet
{

private static final long serialVersionUID = 3555552219242063583L;

private final Logger LOG = LoggerFactory.getLogger(this.getClass());

public void init(ServletConfig sc) throws ServletException
{
super.init(sc);

try
{
InitialContext ctx = new InitialContext();
Object o = ctx.lookup( "java:comp/env/ejb/WBFilesystemCleaner" );
}
catch(Exception e)
{
LOG.error( e.getMessage() ,e );
}

}
}

或者如果可以的话切换到 ejb 3.1 并执行如下操作:

@Startup
@Stateless
public class RunAtBootEJB {
@Schedule(second = "*", minute = "*", hour = "*", persistent = false)
public void triggerLog() {
logging.info("printed each second");
}
}

关于java - 应用程序启动时使用计时器启动 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34208386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com