繁体   English   中英

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

[英]Developing a Java Application that uses an AppEngine database

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

使用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帮助器类的情况下实现此DevServer ,请发布它!

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

注意: AppEngine开发服务器注册自己的URLStreamHandlerFactory以自动将Http(s)URLConnections URL Http(s)URLConnections连接映射到AppEngine的URL获取基础结构。 这意味着,如果您随后在客户端代码中使用HttpURLConnections ,则会因抱怨缺少url获取功能而出错。 幸运的是,可以通过以下两种方法解决此问题: 引用Java的默认http(URLURLHandler)

如果您确实要使用appengine,那么最终将创建两个项目,一个在appengine上,另一个在独立(没有servlet)上。 在这种情况下,您可以看看appengine 远程API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM