我用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应用程序?
谢谢!
答案 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和您的实现添加到您的测试类文件夹。