logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« 2009年3月 | トップページ | 2009年5月 »

2009年4月

GXT(Ext Gwt)2.0移行上の考慮点

GXT 2.0がとりあえず出ましたが、ためしに移行した結果の考慮点をとりあえず列挙します。

移行方法

  • gxt.jarをGXT 2.0のものに入れ替え
  • gwt.xmlファイルまたはHTMLに記述してあるext-all.cssをgxt-all.cssへ変更
  • 上記cssファイルおよびその他イメージ等のリソースがjarファイル内にあったものが無くなっている模様。よって、GXT2.0のダウンロードファイル内のresourcesのディレクトリー以下の内容をそのまますべてGWTプロジェクトのpublicディレクトリーの下にコピーする必要がある。(resourcesディレクトリーそのものは含まない)
  • 新機能chart関連を使用する場合は、gwxt.xmlに以下の項目を追加

        <script src='flash/swfobject.js'></script>
なお、GXT 2.0のダウンロードファイル内にあった2.0_migration_guide.htmlを下に添付しておきます。この外にも気づいた点があれば追記します。

Breaking API Changes

  • MyMessages renamed to XMessages.
  • Added LoadConfig interface, ListLoadConfig now extends LoadConfig. With this change, and properties of the load config object will be passed as request parameters when using a HttpProxy or ScriptTagProxy.
  • Removed AppEvent type parameters, added unkeyed getData and setData.
  • Removed LoadEvent type parameters, add getData and setData methods.
  • Removed parent generic from TreeModel.
  • All public event fields replaced with getters / setters.
  • BaseEvent doit field replaced with setCancelled and isCancelled methods.
  • Replaced int based event types with EventType class.
  • Removed setDecimalSeparator / getDecimalSeparator from NumberField.
  • XDOM moved from com.extjs.gxt.ui.client to com.extjs.gxt.ui.client.core.
  • Events and KeyboardEvents moved from from com.extjs.gxt.ui.client to from com.extjs.gxt.ui.client.event.
  • All public fields is Resizable converted to getters and setters.
  • ext-all.css renamed to gxt-all.css. Both images and css folder moved into new gxt folder.
  • Ext GWT CSS and images are no longer on the classpath. See the resources folder in the GXT distribution.
  • Themes not require the full url for the theme file.
  • Removed TextToolItem, buttons can be added directly to toolbars.
  • PagingToolBar moved to toolbar package.
  • PagingToolBar is now a ToolBar, rather than wrapping one.
  • ContentPanel (Windows, Dialog) now uses a ToolBar for its buttons. New ToolBar looks and behaves like a button bar.
  • Controller forwardToView methods changed from static to instance methods.
  • keepSelected boolean added to selection methods in selection models.
  • XmlReader changed to return any data type.
  • Added XmlLoadResultReader which returns ListLoadResult instances.
  • JsonReader changed to return any data type.
  • Added JsonLoadResultReader which returns ListLoadResult instances.
  • Removed JsonTreeReader.
  • Removed public field XDOM.isVisibleBox - use GXT.isBorderBox instead

GWT 1.6の環境設定

Eclipse Pluginの導入
GWT1.6からはEclipseのPluginが用意されています。以下のEclipseのヘルプ-ソフトウエア更新を選択し、以下のupdate siteを指定します。

Eclipse 3.3 (Europa)

 

http://dl.google.com/eclipse/plugin/3.3

 

Eclipse 3.4 (Ganymede)

 

http://dl.google.com/eclipse/plugin/3.4

Goggle Plugin forEclipse 3.4

Google App Engine Java SDK 1.2.0

Google Web Toolkit SDK 1.6.4

すべてをチェックして導入します。

Gwt16inst

新規にアプリケーションを作成する場合は、Plugin導入により表示されるNew  Web Application Projectのボタンを押してウィザードに従っていけば出来てしまいます。

ここでは、既存のGWT1.5のプロジェクトをGWT1.6環境へ移行する方法を述べます。

既存プロジェクトの移行

http://code.google.com/intl/ja/webtoolkit/doc/1.6/ReleaseNotes_1_6.html

↑このページの「Upgrading」の箇所に1.5以前のプロジェクトの移行方法が乗っていますが、せっかくのEclipseのPluginの機能を生かしたいので、あえてGWT1.6の新規プロジェクトを作成し、そこに既存のリソースを上書きする方法をとります。

まずNew  Web Application Projectのボタンを押してウイザードを開始します。

既存のプロジェクトMyApplicationから1.6のプロジェクトMyApplication2に移行するとします。

Project nameにMyApplication2、Packageには既存のプロジェクトのgwt.xmlファイルが存在するパッケージを指定します。

Gwt16new

ソースを上書き

既存のプロジェクトのsrcフォルダー以下を新プロジェクトのsrcに上書きします。

その際、gwt.xmlファイルのみ以下の変更を加えます。

  • <module>タグに<module rename-to='myapplication2'>のようにrename-toを設定する。上書きする前のgwt.xmlを参考にすれば良いです。
  • <servlet タグは必要無くなったので削除する。


warフォルダー以下の設定

既存のweb.xmlファイルをwar/WEB-INFの下に上書きコピーします。ここで、<servlet-mapping>の<url-pattern>を変更する必要があります。通常、RPCのサービスを呼び出す際のURLは

String url = GWT.getModuleBaseURL() + "gwt";

てな具合に取得していると思いますが、この GWT.getModuleBaseURL()で返ってくるはGWT ModuleのBaseURLで、これがGWT1.6からProject名を小文字にしたディレクトリーの下に移っています。よって、それにあわせるために<servlet-mapping>の<url-pattern>にもこのPathを追加します。Project名がMyApplication2で元のURLが/gwtの場合

        <url-pattern>/gwt</url-pattern> ←1.5以前

             ↓

        <url-pattern>/myapplication2/gwt</url-pattern> ←1.6の場合

というように変更します。

さらにアプリケーションで必要なjarファイルをwar/WEB-INF/libにコピーします。これらのjarファイルは、プロジェクトのプロパティ-Java Build Path-LibrariesのタブでJarの追加ボタンを押し、プロジェクトのクラスパスに追加します。

ただし、ここで、元々war/WEB-INF/libに入っている以下のjarファイルに関してはプロジェクトのクラスパスに追加する必要はない。

appengine-api-1.0-sdk-1.2.0.jar
datanucleus-appengine-1.0.0.final.jar
datanucleus-core-1.1.0.jar
datanucleus-jpa-1.1.0.jar
geronimo-jpa_3.0_spec-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
gwt-servlet.jar
jdo2-api-2.3-SNAPSHOT.jar


Deploy用のWarファイルの作成

GWT1.6よりwarディレクトリーの下がWarファイルの解凍イメージの構成になっているので、このディレクトリーを圧縮するだけでWarができます。以下がWarを作成するAntのbuild.xmlの内容です。

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="project" default="dist" basedir=".">

  <!-- warファイルの設定 -->
  <property name="war.home" value="war" />
  <property name="web-app.name" value="nwmaintGXT2" />
  <property name="dest.dir" value="." />

  <!-- jarタスクによってwarファイルを作成 -->
  <target name="dist" >
    <jar destfile="${dest.dir}/${web-app.name}.war"
         basedir="${war.home}" />
  </target>
</project>

以上でとりあえず完了です。また、その他で私が遭遇した問題点と対処方法を下に書いておきます。


java.security.AccessControlExceptionが出る場合

Google App Engineにデプロイしないのであれば、プロジェクトのプロパティ-Google-App Engioneを開き、Use Google App Engineのチェックを外せばOK

Gwt16app


コンパイル時に[ERROR] Module has no entry points definedとなる

inheritsしているModuleにentry pointがなく、それをentry pointとしてコンパイルしようとしているため。

プロジェクトのプロパティ-Google-Web Toolkitを開きEntry Point Modulesの中から、本来のEntry Point以外のModuleをremoveする。

Gwt16ep


コンパイルするとjava.lang.StackOverflowErrorとなる

Java VMのスタック領域を広げたいところだが、EclipseのPluginへの指定方法が不明。しかたがないので、Hosted BrowserのVM argumentsに-Xss1024kを指定して、Hosted BrowserのCompile/Browseボタンでコンパイルする。

Gwt16hosted


« 2009年3月 | トップページ | 2009年5月 »