21 April 2008
ページ ツール |
この文書では、次の経験があることを前提として記述していますが、基礎的な知識があれば十分です。
中級
必要となるソフトウェアは下記の通りです。
プラグイン版を使う場合は、Eclipse3.3 J2EE かPleiades WTPセット *1
Pleiadesプラグインを入れておくと英語メニューが日本語表示されます
*1 WTP:Web Tools Platformの略。以後WTPと記述します
*2 以後LCDSと記述します
*3 MacOS Xの場合はシステムに付属
source
CreateTable.sql:実習用テーブルの作成
MakeTestData.sql:実習用テストデータ
additional_code.txt:入力するソースコードのコピー&ペースト用
FlexBuilder3には「データベースからアプリケーション作成...」という機能が追加されました。この機能は、J2EEアプリケーションサーバー/データベースと連携するFlexアプリケーションの基本的な実装ソースコードを自動生成します。
ここでは操作手順 例 を説明するとともに、生成されるサーバー側のソースコード Java Assembler を若干の手順で差し替えることで、2つの実装 Hibernate Assembler, SQL Assembler でも流用できる例を紹介いたします。
データベーステーブルの参照・編集するようなアプリケーション開発においては、サーバ側のコードは、Javaコード/Hibernate/SQLという3つの選択肢があり、ちょっとした作業で実装が完了します。
ブラウザ側も、基本的なFlexコードは自動生成されるので、後はユーザインタフェースもしくはユーザエクスペリエンスの設計に工数を割く事ができるようになるかと思います。
この実習では、例として「購入したDVDソフトの情報の入力/一覧表示するシンプルなアプリケーションを作成する」という設定の題材とします。
テーブル設計は、正規化等難しいことは考えず、単一のテーブルとします。
この実習内容はTomcatでも十分機能すると思いますが、WTPの操作も兼ねてJBossを試すことにします。
(WTPについては私自身習ったことはないので、説明する手順は私の自己流です)
この実習ではWTPプラグインを必要とします。
Eclipseプラグイン版をご使用で、すでにWTPがインストールされている場合はこのステップは必要ないので次の章に進んでください。
次の3つのフィーチャーを選択し、[必須項目を選択]し、[次へ]進みます
ライセンスに同意して[次へ]進みます
[終了]をクリックしてインストールを開始します
最後にFlexBuilderもしくはEclipseを-cleanオプション付きで起動してください。
FlexBuilderまたはEclipseの設定でJREの設定が使用したいJavaのバージョンになっているかを確認してください。異なる場合は、設定を追加しデフォルトになるよう変更してください。
Mac版では、JVMはOSに付属しているので、特に指定する必要はありません。
Windows版では、以下の2つを確認してください。説明ではJRE1.5.0_15を使うものとします。
サーバにJ2EEを選択します。WTPプラグインがインストールされている場合は、ダイアログ下部にWTPについての入力項目が表示されます。
次のように入力し、[次へ]進みます
ターゲットランタイム:JBoss v4.2
コンテキストルート:DVDLib (すでに入力済み)
コンテンツフォルダ:WebContents (すでに入力済み)
Flex WARファイル:LCDSインストールフォルダのflex.warを指定
以降はデフォルトのままで良いので[終了]をクリックします。
するとサーバパネルとコンソールパネルにAPサーバの起動とデプロイ状況が表示されます。環境に問題がなければ、しばらくするとLCDSのWelcomeページが表示されます。
DVDLib.mxmlを右クリックし、[実行]-[Flexアプリケーション]を選択します。
ブラウザが起動し、何もないグレー背景だけのFlexアプリケーションが実行されます。さらに確認したい場合は、DVDLib.mxmlにラベルやボタン等を配置して、実行してみてください。
ここまでで、ビルド・デプロイ・実行できることを確認できました。
FlexBuilder/Eclipseではファイルを保存したタイミングで自動的にビルドが実行されます。
プロジェクトにWTP属性がある場合は、ビルドが完了した数秒後に自動的にデプロイが動作します。
これは、デプロイ作業を意識しなくてもよいので便利でもありますが、複数のファイルを編集する場合などでは操作の足枷ともなります。
すぐにアプリケーションを実行しない場合にはAPサーバーを停止しておいたほうが、FlexBuilder/Eclipseを軽快に使用できると思います。
ビルドやデプロイ処理中の場合、右下のキャタピラっぽい(?)アイコン付近で進行状況のプログレスが表示されます。
バックグラウンドで何か動作しているかを確認するには、右下をチェックするようにしてください。
以下を入力し、接続をテスト
接続が問題なければ終了します。
サーバを起動している場合は、自動的にデプロイされるので、右下のプログレスが完了するのを待ってからdvdlibrary.mxmlを実行してください。
サーバを停止していた場合は、サーバを起動してデプロイ成功のメッセージを確認してから、実行してください。
※自動生成されたJavaソースは警告が多数表示されます。
基本動作の実行には問題ないようですが、気持ちが良いものではありません。
あくまでも雛形ソースと割り切るか、自前のDAOソースコードに差し替えるか、後述する他のAssemblerを検討するか、考えどころです。
(同期的に)各レコードに更新を行い応答時間を計測するロジックを追加します。
(注意:ベンチマークではありません、目安として連続してデータ更新操作の時間を計るだけです)
dvdlibrary.mxmlを開き、次の箇所を探して処理を変更してください(だいたい146行目あたり)。
以降の説明にでてくるソースコードは、マテリアルのadditional_code.txtに用意しています。
元のコード
<mx:Button id="btnAddNew" click="goToUpdate()" icon="@Embed('icons/AddRecord.png')" toolTip="Add Record" x="10" bottom="10"/>
<mx:Button id="btnDelete" click="deleteItem()" icon="@Embed('icons/DeleteRecord.png')" toolTip="Delete Record" x="58" bottom="10"/>
<mx:Label text="Search by title" right="300" bottom="11"/>
<mx:TextInput id="filterTxt" width="238" toolTip="Search by title" enter="filterResults()" right="58" bottom="11"/>
<mx:Button click="filterResults()" id="filterButton" icon="@Embed('icons/SearchRecord.png')" toolTip="Search by title" right="10" bottom="10"/>
次のように変更します
<!-- 応答時間計測用コード(差し替え) -->
<mx:Button id="btnAddNew" click="goToUpdate()" icon="@Embed('icons/AddRecord.png')" toolTip="Add Record" x="10" bottom="40"/>
<mx:Button id="btnDelete" click="deleteItem()" icon="@Embed('icons/DeleteRecord.png')" toolTip="Delete Record" x="58" bottom="40"/>
<mx:Label text="Search by title" right="300" bottom="41"/>
<mx:TextInput id="filterTxt" width="238" toolTip="Search by title" enter="filterResults()" right="58" bottom="41"/>
<mx:Button click="filterResults()" id="filterButton" icon="@Embed('icons/SearchRecord.png')" toolTip="Search by title" right="10" bottom="40"/>
<!-- 応答時間計測用コード(追加) -->
<mx:HBox width="100%" bottom="15">
<mx:Label text="各レコードの視聴回数を1回加算"/>
<mx:Button id="add_view_btn" label="実行"/>
<mx:Label id="add_view_result_lbl"/>
</mx:HBox>
dvdlibraryScript.asを開き、次の変数を追加します
//応答時間計測用/////////////////////////////////////////////////////////////
private var benchToken:AsyncToken;
private var startDate:int;
private var endDate:int;
private var max_num:int;
private var currentIndex:int;
//////////////////////////////////////////////////////////////////////////
//応答時間計測用/////////////////////////////////////////////////////////////
public function addViewBtnClickHandler(event:MouseEvent):void
{
max_num = dataArr.length;
if (max_num > 0)
{
add_view_result_lbl.text = "data updating ...";
ds.autoCommit = false;
startDate = getTimer();
currentIndex = 0;
inc_views(currentIndex++);
}
}
private function inc_views(index:int):void {
dataArr[index].number_of_views++;
benchToken = ds.commit();
benchToken.type = "bench";
}
//////////////////////////////////////////////////////////////////////////
場所はinitApp()中のds.addEventListener(ResultEvent.RESULT, function (event:ResultEvent):void{}の中です。
if (event.token == countToken)
{
totalRows = Number(event.result);
}
else if (event.token == fillToken)
{
CursorManager.removeAllCursors();
this.enabled = true;
}
//応答時間計測用/////////////////////////////////////////////////////////////
else if (event.token.type == "bench")
{
try {
if (event.result != null && event.result.body != null && event.result.body is Array && event.result.body[0].identity != null) {
if (currentIndex == max_num)
{
endDate = getTimer();
var diffTime:int = endDate - startDate;
add_view_result_lbl.text = "結果受信(" + diffTime + "ms)";
ds.autoCommit = true;
fill();
goToView();
}
else if (currentIndex < max_num)
{
add_view_result_lbl.text = "処理中(" + currentIndex + ")";
inc_views(currentIndex++);
}
else
{
add_view_result_lbl.text = "invalid index detect";
}
}
} catch (e:Error) {
trace(e.message);
}
}
//////////////////////////////////////////////////////////////////////////
else //COMMIT Token
{
fill();
goToView();
}
initApp()の終わりの部分にある次の行を探し、dataGrid.addEventListener(DataGridEvent.ITEM_EDIT_BEGINNING, editCellHandler);の後ろに下記のコードを追加してください。
//応答時間計測用/////////////////////////////////////////////////////////////
/**
*
*/
add_view_btn.addEventListener(MouseEvent.CLICK, addViewBtnClickHandler);
//////////////////////////////////////////////////////////////////////////
dvdlibrary.mxmlを実行し、追加したアプリケーション下部のデータ更新ボタンを実行してみてください。
Hibernateの定義は、HibernateSynchronizerプラグインを使用するので、まだプラグインをインストールしていない人はインストールしてください。
作業の主なポイントは下記の通りです。
Java側のsrcフォルダを右クリックし、[新規]-[その他]を選択し、Hibernate構成ファイルを選択して[次へ]進みます。
Hibernate構成ファイル(hibernate.cfg.xml)は任意の場所にコピーしておいてください。
srcフォルダを右クリックし、[新規]-[その他]を選択し、Javaパッケージtest.hibernateを作成してください。
test.hibernateパッケージを右クリックし、[新規]-[その他]を選択し、Hibernateマッピング・ファイルを選択し[次へ]進みます
まずgeneratorタグはコメントアウトしてください
<!--<generator class="sequence"/>-->
HibernateSynchronizerでは変数名がキャメルケースとなるようにマッピングが生成されますが、前章で作成したアプリケーションはテーブル項目名と変数名が同じなので、idタグと各propertyタグ中の「name」を修正し、columnと同じ文字列になるようにします。
そして次のHQLクエリを最下行hibernate-mappingの前に追加し、保存します。
<query name="all_dvd">From Dvdlibrary</query>
また、hibernate.connection.url指定の"&"が'&'に戻っていたら、"&"に戻してください。
<destination id="hibernate-dvd">
<channels>
<channel ref="my-rtmp"/>
</channels>
<adapter ref="java-dao" />
<properties>
<use-transactions>true</use-transactions>
<source>flex.data.assemblers.HibernateAssembler</source>
<scope>application</scope>
<metadata>
<identity property="id"/>
</metadata>
<network>
<session-timeout>20</session-timeout>
<paging enabled="false" pageSize="10" />
<throttle-inbound policy="ERROR" max-frequency="500"/>
<throttle-outbound policy="REPLACE" max-frequency="500"/>
</network>
<server>
<hibernate-entity>test.hibernate.Dvdlibrary</hibernate-entity>
<fill-method>
<name>fill</name>
<params>java.util.List</params>
</fill-method>
<fill-configuration>
<use-query-cache>false</use-query-cache>
<allow-hql-queries>true</allow-hql-queries>
</fill-configuration>
</server>
</properties>
</destination>
LCDSのインストールフォルダにあるresources/hibernateのjarファイルを、FlexプロジェクトのWebContents/WEB-INF/libにコピーしてください。
dvdlibrary.mxmlをコピーし、同じフォルダにdvdlibrary_hibernate.mxmlとしてペーストします。
同様に、dvdlibraryScript.asをdvdlibraryScript_hibernate.asとして、DvdlibraryVO.asをDvdlibraryVO_hibernate.asとしてペーストします。
ActionScriptソースの指定をhibernate用のソース指定に修正します
<mx:Script source="dvdlibraryScript_hibernate.as" />
保存し、閉じてください。
リモートクラスをhibernate用クラスに修正します
[RemoteClass(alias="test.dvd.dao.DvdlibraryVO")]
を次のようにしてください。
[RemoteClass(alias="test.hibernate.Dvdlibrary")]
続いてクラス名とコンストラクタ名をDvdlibraryVO_hibernateに直します。保存して閉じてください。
データサービスの指定を8-11で追加したhibernate用のdestinationに修正します
ds = new DataService("dvdlibraryJava");
を次のようにしてください。
ds = new DataService("hibernate-dvd");
続いてDTO(DataTransferObject、Flexが自動生成したソースではVO:ValueObjectと表記)をhibernate用に変更します。
function insetItem()を探すかDvdlibraryVOを検索して
var vo:DvdlibraryVO = new DvdlibraryVO();
を次のようにしてください。
var vo:DvdlibraryVO_hibernate = new DvdlibraryVO_hibernate();
クラスの変数名は、8-7で同じ名前になるよう指定しているので修正する必要はありません。
function fill()を探して、HQLクエリの名前を指定します。
if(count)
{
countToken = ds.count(params);
}
fillToken = ds.fill(dataArr, params);
を次のようにしてください。
if(count)
{
countToken = ds.count();
}
fillToken = ds.fill(dataArr, "all_dvd", []);
ビルドとAPサーバへのデプロイがバックグラウンドで実行されるので、右下のプログレスが終了するのを待ってから、再度、右クリックし、[実行]-[Flexアプリケーション]を選択します。
データの取得と更新・作成・削除はできますが、右下の検索機能が有効になっていません。
アプリケーションを終了し、検索機能を実装します。
<query name="filter_dvd">From Dvdlibrary d where d.title like CONCAT('%', CONCAT(:filter,'%'))</query>
if(count)
{
countToken = ds.count();
}
if (filterTxt.text.length != 0) {
var args:* = {"filter": filterTxt.text};
fillToken = ds.fill(dataArr, "filter_dvd", args);
} else {
fillToken = ds.fill(dataArr, "all_dvd", []);
}
以上で、ほぼ同等に基本動作するHibernateAssembler版アプリケーションができました。
作業の主なポイントは下記の通りです
この定義は、LCDS付属samples.warのサンプルをそのまま流用し、実習で使うテーブル用に変更しただけです。ユーザ名とパスワードは使用している環境のアカウントに変更してください。
<destination id="sql-dvd">
<channels>
<channel ref="my-rtmp"/>
</channels>
<adapter ref="java-dao" />
<properties>
<use-transactions>true</use-transactions>
<source>flex.data.assemblers.SQLAssembler</source>
<scope>application</scope>
<metadata>
<identity property="id"/>
</metadata>
<network>
<session-timeout>20</session-timeout>
<paging enabled="false" pageSize="10" />
<throttle-inbound policy="ERROR" max-frequency="500"/>
<throttle-outbound policy="REPLACE" max-frequency="500"/>
</network>
<server>
<database>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<url>jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8</url>
<username>user</username>
<password>password</password>
<login-timeout>15</login-timeout>
</database>
<!-- Use this syntax when using a JNDI datasource-->
<!--<database>
<datasource>java:comp/env/jdbc/mysql_ref</datasource>
</database>-->
<actionscript-class>DvdlibraryVO_sql</actionscript-class>
<fill>
<name>all</name>
<sql>SELECT * FROM DVDLIBRARY ORDER BY id</sql>
</fill>
<fill>
<name>by-title</name>
<sql>SELECT * FROM DVDLIBRARY WHERE title LIKE CONCAT('%', CONCAT(#filter#,'%'))</sql>
</fill>
<get-item>
<sql>SELECT * FROM DVDLIBRARY WHERE id = #id#</sql>
</get-item>
<create-item>
<sql>INSERT INTO DVDLIBRARY
(id, title, genre, time_length_min, manufacturing_years, date_of_purchase, evaluation, number_of_views)
VALUES (#id#, #title#, #genre#, #time_length_min#, #manufacturing_years#, #date_of_purchase#, #evaluation#, #number_of_views#)
</sql>
<!--<id-query>CALL IDENTITY()</id-query>--> <!-- HSQLDB syntax to retrieve value of autoincremented column -->
</create-item>
<update-item>
<sql>UPDATE DVDLIBRARY SET id=#id#, title=#title#, genre=#genre#, time_length_min=#time_length_min#,
manufacturing_years=#manufacturing_years#, date_of_purchase=#date_of_purchase#, evaluation=#evaluation#,
number_of_views=#number_of_views# WHERE id=#_PREV.id#</sql>
</update-item>
<delete-item>
<sql>DELETE FROM DVDLIBRARY WHERE id=#id#</sql>
</delete-item>
<count>
<name>all</name>
<sql>SELECT count(*) FROM DVDLIBRARY</sql>
</count>
</server>
</properties>
</destination>
dvdlibrary.mxmlをコピーし、同じフォルダにdvdlibrary_sql.mxmlとしてペーストします
同様に、dvdlibraryScript.asをdvdlibraryScript_sql.asとして、DvdlibraryVO.asをDvdlibraryVO_sql.asとしてペーストします。
ActionScriptソースの指定をSQLAssembler用のソース指定に修正します
<mx:Script source="dvdlibraryScript_sql.as" />
保存し、閉じてください。
リモートクラスをSQLAssembler用クラスに修正します
[RemoteClass(alias="test.dvd.dao.DvdlibraryVO")]
を次のように変更します。
[RemoteClass]
続いてクラス名とコンストラクタ名をDvdlibraryVO_sqlに直します。
保存して閉じてください。
データサービスの指定を9-1で追加したSQL用のdestinationに修正します
ds = new DataService("dvdlibraryJava");
を次のように変更します。
ds = new DataService("sql-dvd");
続いてDTO(DataTransferObject、Flexが自動生成したソースではVO:ValueObjectと表記)をSQLAssembler用のクラスに変更します。
function insetItem()を探すかDvdlibraryVOを検索して
var vo:DvdlibraryVO = new DvdlibraryVO();
を次のように変更します。
var vo:DvdlibraryVO_sql = new DvdlibraryVO_sql();
function fill()を探して、クエリ名を指定します。
if(count)
{
countToken = ds.count(params);
}
fillToken = ds.fill(dataArr, params);
を次のように変更します。
if(count)
{
countToken = ds.count("all");
}
fillToken = ds.fill(dataArr, "all");
ビルドとAPサーバへのデプロイがバックグラウンドで実行するので、右下のプログレスが終了するのを待ち、再度、右クリックし、[実行]-[Flexアプリケーション]を選択し実行します。
データの取得と更新・作成・削除はできますが、右下の検索機能が有効になっていません。
アプリケーションを終了し、検索機能を実装します。
実はすでにフィルタ用のクエリは9-1の定義で記述済みですので、クエリを確認してください
<name>by-title</name>
<sql>SELECT * FROM DVDLIBRARY WHERE title LIKE CONCAT('%', CONCAT(#filter#,'%'))</sql>
if(count)
{
countToken = ds.count("all");
}
if (filterTxt.text.length != 0) {
var args:* = {"filter":filterTxt.text};
fillToken = ds.fill(dataArr, "by-title", args);
} else {
fillToken = ds.fill(dataArr, "all");
}
以上で、ほぼ同等に基本動作するのSQLAssembler版アプリケーションができました。
7-6から7-10の手順を行った方は、アプリケーションの下部に応答時間測定用の実行ボタンがあります。
この処理は各レコードに参照回数項目を1加算する処理を同期的に実行し、経過時間を表示します。
私の試した環境では各Assemblerの実装で、大きな差は発生しませんでした。
これはDBアクセスがシンプルな処理で、どの実装でも差がでにくいからかもしれません。
※各レコードの更新がすべて正常に実行できることを前提にしたコードなので途中でエラーが発生した場合などは考慮していません。
目安としての応答時間を測定するだけのコードです。
※各Assemblerの実装手順例を説明するために3つのアプリケーションを作成しましたがそれぞれを同時に動作させると、テーブルの内容に不整合が生じることは容易に想像がつくと思います。
実際には開発・保守として作業のしやすい、いづれか1つの実装を選択することになります。
3つのAssemblerの実装については、いづれもアプリケーション自身がデータベースへの接続を行っており、APサーバのリソース共有を活用していません。
この章では各実装で、データベース接続をAPサーバのリソースを使うように修正する手順を紹介します。
修正は主に次のポイントになります。
JBossのデプロイディレクトリ(%JBossインストール先%/server/default/deploy)に、下記内容のmysql-ds.xmlを作成してください。ユーザ名とパスワードは使用している環境のアカウントに変更してください。
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySQLDS</jndi-name>
<connection-url>jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>user</user-name>
<password>password</password>
</local-tx-datasource>
</datasources>
次に、Flexプロジェクトで、WebContents/WEB-INF配下のweb.xmlにリソースリファレンスを追加します。
<resource-ref>
<description>JDBC DataSource</description>
<res-ref-name>jdbc/mysql_ref</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
さらに、WebContents/WEB-INF配下に下記内容のjboss-web.xmlを作成してください。データソースとリソースリファレンスの対応を定義します。
<jboss-web>
<resource-ref>
<res-ref-name>jdbc/mysql_ref</res-ref-name>
<jndi-name>java:/MySQLDS</jndi-name>
</resource-ref>
</jboss-web>
MySQL用のJDBCドライバをJBossにコピーします
データベースからアプリケーション生成時にWebContents/WEB-INF/libに自動的にコピーされたMySQL用JDBCドライバ(mysql-connector-java-3.1.12-bin.jar)はバージョンが古いのでFlexプロジェクトから削除します。
変わりに使用しているMySQLのバージョンに対応したJDBCドライバ(Connector/J)を次のディレクトリにコピーしてください。
%JBossインストール先%/server/default/lib
Javaソースフォルダのtest.dvd.daoにある%データベース接続名%AFlexDAO.javaを探し、エディタを開きます。
37行目ぐらいにあるgetDataSource()というメソッドを探し、データソースを参照している箇所に11-2で設定したJNDI名を指定します。
nativeDS = (DataSource) ic.lookup("jdbc/myDB");
を次のように変更します。
nativeDS = (DataSource) ic.lookup("java:comp/env/jdbc/mysql_ref");
これを正しく設定することで、getConnection()メソッドではAPサーバの接続プールを使用するようになります。
hibernate.cfg.xmlをテキストエディタで開きます。
プロパティ設定の
hibernate.connection.url
hibernate.connection.driver_class
hibernate.connection.username
hibernate.connection.password
タグをコメントアウトし、次のプロパティを追加します
<property name="hibernate.connection.datasource">
java:comp/env/jdbc/mysql_ref
</property>
さらに、トランザクション・ファクトリの記述をJDBCTransactionFactoryからJTATransactionFactoryに変更してください。
これでHibernateでの接続プールを使用する設定は完了です。
data-management-config.xmlをテキストエディタで開きます。
destinationが"sql-dvd"の箇所を探し、propertiesタグ内のserverタグにあるdatabaseタグをコメントにします。
実はその下に、接続プールを使用する記述例があるので、JNDI名を正しく設定してdatabaseタグのコメントを解除します
これで、SQLAssemblerでの接続プールを使用する設定は完了です
データベースからアプリケーションを作成する機能で自動的にコピーされるJDBCドライバは古いです。
適宜、使用しているデータベースに適したバージョンのJDBCドライバに差し替えるようにしてください。
また、ローカルでの開発作業を前提としているので、実行に必要なライブラリはWebContents/WEB-INF/lib配下に配置していますが、運用時では、jarファイルをAPサーバのクラスローダ階層のどこ(システム/共有/アプリケーション)に配置するかについて検討しておく必要があります。
実習では英数字のテーブル名・項目名を使用しましたが、MicrosoftのSQLサーバーなどでは日本語のテーブル名・項目名を使用しているケースが多々あるかもしれません。
すでにお気づきの方もいるかもしれませんが、データベースからアプリケーションを生成する際、テーブル名や項目名がクラス名や変数名としてコード生成されているので、日本語文字列が使用されていると、そのままではアプリケーションを生成することはできません。
※ActionScriptの仕様ではクラス名や変数名に日本語文字を使用することはできません。
そこで、対処の一案を紹介します。
まず、日本語のテーブルに1対1対応する英数字なビュー名・項目名のViewを作成します。
そして、ダミーとして同様に英数字のテーブル名・項目名のテーブルを作成します。
項目名はビューと同じ名前です。
アプリケーション生成の際はダミーのテーブルを指定し、コード生成後ダミーのテーブル名をビュー名に変更します。
こうすることで、日本語のテーブル名・項目名であっても、アプリケーション作成の機能を利用することができるようになると思います。
ここまではLCDSを前提に説明してきましたが、Flexプロジェクトの作成時にflex.warではなくblazeds.warを指定することでも、データベースからアプリケーションを作成する機能を利用することはできます。
違いは、BlazeDSの場合は、「サーバーサイドコードを生成」ダイアログで、サーバーとクライアントの通信方法の選択が「XML over HTTP(REST)」のみになることです。