当前位置: 首页 > 面试题库 >

GWT,Google App Engine,TimerTask或ServiceImpl中的线程抛出异常

范霄
2023-03-14
问题内容

我正在使用GWT和Google App Engine。我有很多记录,我想每30分钟更新一次。在 ServiceImpl中, 我有以下代码:

new Timer().schedule(new TimerTask(){
    @Override
    public void run() {
        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        result = updateFeeds();
    }
}, 30000,Long.MAX_VALUE);

当我运行应用程序以及何时获得:

com.google.gwt.user.server.rpc.UnexpectedException:
Service method 'public abstract java.util.List org.joke.planet.client.FeedService.loadFeeds()' threw an unexpected exception:
java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup)

在第一行或粘贴的代码处。

我的问题是,我如何才能使可以在GWT + AppEngine Service中工作的后台工作者?


问题答案:

您不能使用java.util.Timer,因为它会创建一个普通线程,这在AppEngine中是不允许的。但是,您可以使用AppEngine Modules
API的Background线程功能,如此处所述:https
:
//developers.google.com/appengine/docs/java/modules/#Java_Background_threads


请注意,您只能在手动缩放的实例上使用后台线程。在此示例中,后台线程永远每30秒打印一次消息:

Thread thread = ThreadManager.createBackgroundThread(new Runnable() {
  public void run() {
    try {
      while (true) {
        System.err.println("Doing something!");
        Thread.sleep(30_000);
      }
    } catch (InterruptedException ex) {
    }
  }
});
thread.start();


 类似资料:
  • 我正在为以下Java代码编写单元测试: 我试图模拟myService抛出错误的过程。myMethod(),以便在上面代码的catch块中提取它,并抛出MyException实例。 在我的JUnit测试中(使用org.springframework.test.context.junit4. SpringJUnit4ClassRunner和Mockito),我嘲笑了MyService并将其作为Spri

  • 我目前有以下示例代码,我试图将OutputStream转换为InputStream,这是我从http://blog.ostermiller.org/convert-java-outputStream-InputStream中的获得的想法 但这里我的问题是,save方法可能会抛出IOException,我希望捕获它,并将其作为getInputStream方法的一部分重新抛出。 我读过如何从线程捕捉异

  • 我刚接触GWT,是通过GWT2.4开始学习的。首先,我安装了eclipse插件,然后,我看到了eclipse工具栏中的图标。 当我单击新的Web应用程序项目时,它报告了一个异常。详细的堆栈跟踪如下所示。 eclipse.buildid=M20110909-1335 java.version=1.6.0_33 java.vendor=Sun Microsystems Inc.BootLoader常量

  • 我应该实现一个原始的多线程服务器,为每个连接启动一个新线程。 其中一个线程可能会收到关闭服务器的消息。 是否可以从其中一个子线程通知父线程停止接受新连接并关闭服务器?

  • 在许多地方,我得到了几个已检查的异常,如IOException、ParseException、JSoneException等。我必须做出两个选择之一- > 通过在方法签名的末尾添加抛出来抛出相同的异常。 将检查的异常包装在RuntimeException(或一些自定义实现)中,然后抛出它,以便调用者不必在任何地方添加throws子句并检查异常。 在第一种情况下,我将不得不到处抛出,但我的客户可以通