如何从不同的线程访问Wicket应用程序?

时间:2014-06-05 06:45:58

标签: java jetty wicket

我用Jetty运行Wicket 1.5并且运行正常。但有时我必须重新启动jetty几次,我必须在测试时重新登录。为了避免这种情况,我有一个模拟的ISessionListener,它很好地给了我所需的所有权限。但出于显而易见的原因,我只想在测试代码中使用它。我的问题是我想在启动Jetty测试实例后设置ISessionListener。但我不能这样做:

... //init Jetty
server.start();
Application.get();

这里我得到以下例外:

Exception in thread "main" org.apache.wicket.WicketRuntimeException: There is no application attached to current thread main

在server.start()之后,几乎只触及非测试代码。只有一些模拟服务才能放置。

如何在不更改非测试代码的情况下从我启动Jetty的位置访问我的Wicket应用程序?

谢谢!

2 个答案:

答案 0 :(得分:1)

很容易从其他线程访问Wicket应用程序。 在您的后台线程中,像这样访问应用程序:

String applicationKey = Application.getApplicationKeys().iterator().next();
Application application = Application.get(applicationKey);

然后,设置您在Wicket ThreadContext中获得的应用程序实例。

ThreadContext.setApplication(application);

最后,完成后分离所有内容。

try {
   ....
} finally {
   ThreadContext.detach();
}

注意:尽管几年前才问这个问题,但我希望这对一些徘徊的Googler有帮助:-)

答案 1 :(得分:0)

从IInitializer添加您的侦听器,即将wicket.properties和您的实现添加到您的测试类文件夹。