开发使用AppEngine数据库的Java应用程序
这可能是一个非常琐碎的问题,但我很难找到答案: 使用Google插件for Eclipse,我想开发一个普通的旧Java应用程序(不是web应用程序),它使用AppEngine进行云存储 为此,我当然可以简单地创建两个项目,一个包含AppEngine服务器,另一个包含Java应用程序开发使用AppEngine数据库的Java应用程序,java,google-app-engine,development-mode,Java,Google App Engine,Development Mode,这可能是一个非常琐碎的问题,但我很难找到答案: 使用Google插件for Eclipse,我想开发一个普通的旧Java应用程序(不是web应用程序),它使用AppEngine进行云存储 为此,我当然可以简单地创建两个项目,一个包含AppEngine服务器,另一个包含Java应用程序 但是我想知道是否可以在Eclipse中设置一个同时包含服务器和客户机代码的项目(比如GWT项目)。为了执行它进行本地调试,我希望Eclipse启动Tomcat使servlet可用,然后从项目的客户机目录启动Main
但是我想知道是否可以在Eclipse中设置一个同时包含服务器和客户机代码的项目(比如GWT项目)。为了执行它进行本地调试,我希望Eclipse启动Tomcat使servlet可用,然后从项目的客户机目录启动Main.java,就好像项目只是一个简单的java应用程序一样。这就是“Google”->“Web应用程序”设置中“从此目录启动和部署”复选框的用途吗?如果是这样,我该如何使用它?如果您确实想使用appengine,那么您将创建两个项目,一个在appengine上,另一个是独立的(没有servlet)。在本例中,您可以查看appengine,我找到了一种方法,但它有点俗气 首先,将以下帮助器类添加到项目中:
// 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.");
}
}
然后,将以下行添加到entry类:
public static void main(String[] args) {
DevServer.launch(args); // launch AppEngine Dev Server (blocks until ready)
// Do everything else
}
最后,创建适当的运行配置:
- 只需单击“运行方式”->“Web应用程序”。创建默认运行配置
- 在创建的运行配置中,在“Main”选项卡下,选择您自己的条目类作为“Main class”,而不是默认的“com.google.appengine.tools.development.DevAppServerMain”
main(…)
方法的其余部分。由于服务器线程被标记为守护进程线程,因此一旦main(…)
中的其他代码完成,应用程序就会正常退出,并关闭服务器
不确定这是否是最优雅的解决方案,但它确实有效。如果其他人没有DevServer
helper类就可以实现这一点,请发布它
此外,可能还有一种更优雅的方法来检查AppEngine服务器是否正在运行,而不是像我上面所做的那样使用URL连接ping它
注意:自动映射到AppEngine基础架构的AppEngine开发服务器。这意味着,如果在客户端代码中使用
HttpURLConnections
,就会出现错误,抱怨缺少url获取功能。幸运的是,这可以通过以下两种方式解决:。你说你要找的不是web应用程序?@Rakesh正确。我正在编写一个常规的旧Java应用程序,它使用Url连接访问AppEngine提供的数据库。任何地方都没有涉及网络浏览器。您是否特别需要使用AppEngine或任何数据库?@Rakesh我绝对想使用AppEngine。看起来不错!可能您应该在while循环中引入一些延迟,而不是连续ping。我认为connect()
方法中已经存在某种超时。至少如果我进一步查看日志消息,while循环在退出之前似乎只执行了4到5次,即使加载服务器需要几秒钟。但总的来说,你当然是对的。而且,也许在另一台机器上,它的行为会有所不同。我将在代码中添加注释。