16. Bluemixにアップロード
? cf loginを実行してログインしたら、GWT Compileされた場所の1つ上のディ
レクトリでcf pushします。
$ cd /Users/shanai/workspace/gwt/hello/war/hello
$ cd ..
$ ls
Hello.css Hello.html WEB-INF favicon1.ico
hello
$ cf push ruimohello
Updating app ruimohello in org shanai@jp.ibm.com / space dev as
shanai@jp.ibm.com...
OK
...
state since cpu memory disk details
#0 running 2015-07-18 09:12:46 AM 0.0% 179.1M of 1G 228.2M of
1G
ここの名前は、Bluemix内で他とぶつ
からない名前を指定します
25. 画面の雛形
? 一方、war/Mymap.htmlの方は、<body>内のh1やtableタグを削除します。
<body>
<!-- OPTIONAL: include this if you want history support -->
<iframe src=/slideshow/bluemixgwt/50742406/"javascript:& id="__gwt_historyFrame" tabIndex='-1'
style="position:absolute;width:0;height:0;border:0"></iframe>
<!-- RECOMMENDED if your web app will not function without
JavaScript enabled -->
<noscript>
<div style="width: 22em; position: absolute; left: 50%; margin-left: -
11em; color: red; background-color: white; border: 1px solid red;
padding: 4px; font-family: sans-serif">
Your web browser must have JavaScript enabled
in order for this application to display correctly.
</div>
</noscript>
</body>
27. 画面の確認
? ここまでできたら、Hello, Worldの時と同様に、Run As => Web
Application (Gwt Super Dev Mode)で起動して画面を確認します。GWTの
レイアウト?パネルのおかげでリサイズしても画面の構成が維持されることが確
認できます。
マウスで境界をドラッグ可能
47. Settingsのファクトリ
package mymap.server;
import static java.util.Objects.requireNonNull;
import mymap.client.Settings;
public class SettingsFactory {
static final SettingsFactory THE_INSTANCE = new SettingsFactory();
final Settings settings;
public SettingsFactory() {
settings = new Settings
(requireNonNull(System.getenv("apiKey"),
"Set Google api key by setting environment variable 'apiKey'"),
requireNonNull(System.getenv("serverApiKey"),
"Set Gooogle api server key by setting environment variable 'serverApiKey'"));
}
public Settings getSettings() {
return settings;
}
public static SettingsFactory getInstance() {
return THE_INSTANCE;
}
}
Settingsのファクトリクラス
環境変数
apiKey/serverApiKeyから
取得
55. ロギング設定を追加しておく
? そろそろプログラムが複雑になってきたので、クライアント側にログを追加して
おきます。src/mymap/Mymap.gwt.xmlを変更します。
<?xml version="1.0" encoding="UTF-8"?>
<!--
When updating your version of GWT, you should also update this DTD reference,
so that your app can take advantage of the latest GWT module capabilities.
-->
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.6.0//EN"
"http://google-web-toolkit.googlecode.com/svn/tags/2.6.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='mymap'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.logging.Logging"/>
...
<!-- allow Super Dev Mode -->
<add-linker name="xsiframe"/>
<set-property name='gwt.logging.popupHandler' value='DISABLED'/>
</module>
追加
これを指定しないと、アプリケーション
画面にオーバーレイでロギングが表
示されて、わずらわしい
56. クリックの検知
package mymap.client;
import java.util.logging.Level;
import java.util.logging.Logger;
...
public class Mymap implements EntryPoint {
Logger logger = Logger.getLogger("MymapLogger");
private final PlacesServiceAsync placesService = GWT
.create(PlacesService.class);
native void initialize() /*-{
var that = this;
$wnd.onMapClicked = function(latitude, longitude) {
that.@mymap.client.Mymap::onMapClicked(DD)(latitude, longitude);
};
$wnd.initialize();
}-*/;
public void onModuleLoad() {
logger.log(Level.INFO, "Application start");
initialize();
...
}
public void onMapClicked(double latitude, double longitude) {
logger.log(Level.INFO, "Map clicked on (" + latitude + ", " + longitude + ")");
}
}
ロギングの
import
ロガー生成
PlacesのRPCは、この
ようにして生成する
html側に、onMapClicked
変数を用意して、そこに、下
のonMapClicked関数を代
入しておく(詳細は後述)。