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

开发使用AppEngine数据库的Java应用程序

沈永贞
2023-03-14
问题内容

这可能是一个非常琐碎的问题,但是我很难找到答案:

使用Google Eclipse插件,我想开发一个简单的旧Java应用程序(而不是Web应用程序),该应用程序使用AppEngine进行云存储。

为此,我当然可以简单地创建两个项目,一个包含AppEngine服务器,另一个包含Java应用程序。

但是我想知道是否有可能在Eclipse中设置一个包含服务器和客户端代码的单个项目(例如GWT项目)。为了执行它以进行本地调试,我然后希望Eclipse启动Tomcat以使我的servlet可用,然后从项目的客户机目录中启动Main.java,就好像该项目只是一个简单的Java应用程序一样。这是“
Google”->“ Web应用程序”设置中“从此目录启动并部署”复选框的含义吗?如果可以,该如何使用?


问题答案:

我找到了一种方法,但是有点俗气。

首先,将以下帮助程序类添加到项目中:

// other imports
import com.google.appengine.tools.development.DevAppServerMain;

public class DevServer {
    public static void launch(final String[] args) {
        Logger logger = Logger.getLogger("");
        logger.info("Launching AppEngine server...");
        Thread server = new Thread() {
            @Override
            public void run() {
                try {
                    DevAppServerMain.main(args);  // run DevAppServer
                } catch (Exception e) { e.printStackTrace(); }
            }
        };
        server.setDaemon(true);  // shut down server when rest of app completes
        server.start();          // run server in separate thread
        URLConnection cxn;
        try {
            cxn = new URL("http://localhost:8888").openConnection();
        } catch (IOException e) { return; }  // should never happen
        boolean running = false;
        while (!running) {  // maybe add timeout in case server fails to load
            try {
                cxn.connect();  // try to connect to server
                running = true;
                // Maybe limit rate with a Thread.sleep(...) here
            } catch (Exception e) {}
        }
        logger.info("Server running.");
    }
}

然后,将以下行添加到条目类:

public static void main(String[] args) {
    DevServer.launch(args);  // launch AppEngine Dev Server (blocks until ready)
    // Do everything else
}

最后,创建适当的运行配置:

  • 只需单击“运行方式”->“ Web应用程序”。创建默认的运行配置。
  • 在创建的运行配置中,在“主”选项卡下,选择您自己的条目类作为“主类”,而不是默认的“ com.google.appengine.tools.development.DevAppServerMain”。

现在,如果您启动此运行配置,它将首先启动AppEngine服务器,然后继续main(...)在入口类中继续其余方法。由于服务器线程被标记为守护线程,因此其他代码main(...)完成后,应用程序将正常退出,并关闭服务器。

不知道这是否是最优雅的解决方案,但它是否有效。如果其他人有没有DevServer帮助类的方法来实现此目的,请发布它!

此外,除了像上面我一样使用URL连接ping它之外,可能还有一种更优雅的方法来检查AppEngine服务器是否正在运行。

注意:
AppEngine开发服务器会自行注册URLStreamHandlerFactory以自动映射Http(s)URLConnections到AppEngine的URL提取基础结构。这意味着如果您随后HttpURLConnections客户端代码中使用url-
fetch功能,则您会抱怨错误。幸运的是,可以通过以下两种方式解决此问题:引用Java的默认httpURLStreamHandler。



 类似资料:
  • 问题内容: 我遇到以下问题:当我尝试使用外部IP地址(PC的IP而不是本地IP的createTcpServer =在cmd.exe中运行ipconfig后我们看到的输出)时,发生以下错误: 服务器错误:异常打开端口“ 9092”(端口可能正在使用),原因:“ java.net.BindException:无法分配请求的地址:JVM_Bind” [90061-169] 但是,该端口未使用。我已经使用

  • 问题内容: 我试图了解线程如何在Java中工作。这是一个简单的数据库请求,返回一个ResultSet。我正在使用JavaFx。 这将返回一个异常: 线程“线程A”中的异常java.lang.IllegalStateException:在FX应用程序线程上不;currentThread =线程A 如何正确实现线程,以便每个数据库请求都在第二个线程而不是主线程中执行? 我听说过实现Runnable,但

  • 本文向大家介绍微信小程序云开发之使用云数据库,包括了微信小程序云开发之使用云数据库的使用技巧和注意事项,需要的朋友参考一下 在上一节我们介绍了下怎么使用云存储来存储我们需要的数据,接下来这节也是我们在实际开发比较重要的东西数据库,首先数据库当然是我们要显示在前端界面上的内容,如果要使用云存储+云数据库该如何操作呢,下面我来详细为大家介绍下具体流程 【步骤】 首先我们打开云开发然后点击数据库,自己在

  • 我可以制作 Azure 操作管道,但我的问题是,我已将代码签入存储库,而我们不应该在其中签入应用程序属性文件。 这意味着在部署时,我应该必须从某个安全的地方下载应用程序属性文件,并在部署到应用程序引擎之前构建我的Spring启动应用程序。 因此,到目前为止,我所做的是,在运行时将我的应用程序属性文件下载到azure agent中。我将属性文件传递到maven build命令中,但是没有成功。[注意

  • 第十三章 Delphi开发数据库应用程序概述(二) 13.3.2 数据控制部件 数据控制部件页上的部件,主要用于设计用户界面,对数据库中的数据进行浏览、编辑、插入、删除等操作。因而数据控制部件常常又被称为数据浏览部件,数据控制部件其实是在Standard页上的标准部件的基础上,相应地增加了数据浏览功能,使得它们能够显示和编辑数据库中数据信息。 数据控制部件既能够把数据库中的数据显示到窗体中,又可以

  • 第十三章 Delphi开发数据库应用程序概述(一) 13.1 数据库系统概述 数据库系统为我们提供了一种把与我们的工作和生活紧密相关的信息集合在一起的方法,它还提供了在某个集中的地方存储和维护这些信息的方法。数据库系统主要由三大部分组成:数据库管理系统(DBMS:它是专门负责组织和管理数据信息的程序)、 数据库应用程序(它使我们能够获取、显示和更新由DBMS存储的数据)、数据库(按一定结构组织在一