2010-12-30 8 views
2

GWTの新機能です。複雑なアプリケーションのUI部分を保持するプロジェクトを設定しています。 JPAデータオブジェクトは、MyBatisで生成されたPOJOを使用して別のプロジェクトで定義されます。 JPAオブジェクトのソースコードを必要とするので、ビルドプロセスのgwtcの手順は続行できません。これは、「シリアル化可能」を実装するためにJPAオブジェクトを手動で変更した後に解決しなければならない別の問題です。それらを見つける。別のプロジェクトでGWTでJPAオブジェクトをどのように使用しますか?

ソース '.java'ファイルを含むように 'core'プロジェクトのjarファイルを作成しましたが、これは機能しませんでした。私はclasspath要素をgwtc ant Java呼び出しに追加しようとしました。

別のプロジェクトでJPAオブジェクトを定義したままUIプロジェクトをコンパイルするにはどうすればよいですか?

エラー:

Buildfile: /Users/user/source/user_interface/build.xml 

libs: 

javac: 

gwtc: 
    [java] Compiling module org.mysite.ui 
    [java] Validating newly compiled units 
    [java]  [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyService.java' 
    [java]   [ERROR] Line 21: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module? 
    [java]  [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyServiceAsync.java' 
    [java]   [ERROR] Line 19: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module? 
    [java]  [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/presenter/MainTabPresenter.java' 
    [java]   [ERROR] Line 75: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module? 
    [java] Scanning for additional dependencies: file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyApp.java 
    [java]  Computing all possible rebind results for 'org.mysite.ui.client.MyService' 
    [java]   Rebinding org.mysite.ui.client.MyService 
    [java]    Checking rule <generate-with class='com.google.gwt.user.rebind.ui.ImageBundleGenerator'/> 
    [java]    [ERROR] Unable to find type 'org.mysite.ui.client.MyService' 
    [java]     [ERROR] Hint: Previous compiler errors may have made this type unavailable 
    [java]     [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly 
    [java] [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyApp.java' 
    [java]  [ERROR] Line 23: Failed to resolve 'org.mysite.ui.client.MyService' via deferred binding 
    [java] [ERROR] Cannot proceed due to previous errors 

BUILD FAILED 
/Users/user/source/user_interface/build.xml:39: Java returned: 1 

Total time: 26 seconds 

のAnt gwtcターゲット:あなたはGWTにPOJOをシリアライズしたい場合

<target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)"> 
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler"> 
     <classpath> 
     <pathelement location="src"/> 
     <pathelement location="../core/src"/> 
     <path refid="project.class.path"/> 
     </classpath> 
     <!-- add jvmarg -Xss16M or similar if you see a StackOverflowError --> 
     <jvmarg value="-Xmx256M"/> 
     <arg line="-war"/> 
     <arg value="web"/> 
     <!-- Additional arguments like -style PRETTY or -logLevel DEBUG --> 
     <arg line="${gwt.args}"/> 
     <arg value="org.mysite.ui.MyApp"/> 
    </java> 
    </target> 

答えて

3

GWTには常にこの問題がありました。

私が過去に取ったアプローチは、JPA POJOを含む他のJARに.gwt.xmlモジュールを作成し、JPAアノテーションクラスを "emul" javax.persistenceフォルダに入れることです。これは、もちろんレイジーフェッチを使用する多くのプロバイダでは動作しませんので、Gilead(別の答えで言及したように)が必要になります。

もう一つの方法は、JPAオブジェクトのコピーを作成し、ちょうどRPC幸いにも

渡って送信する前にそれらをドーザすることで、GWT 2.1は、この問題を解決しました。 Entity proxiesを使用し、工場をリクエストしてください。それはうまくいく。

+0

.gwt.xmlをデータプロジェクトでコンパイルしてWebプロジェクトと統合する方法の詳細を説明できますか?これは私の状況にとって理想的な解決策のようです。 – Kieveli

+0

だから、私はgwtを追加しました。xmlをデータプロジェクトに追加し、jarを構築し、それを他のプロジェクトにコピーし、Webプロジェクトに「継承」を追加しました。クラスパス上にあるので、gwtはDataModel.gwt.xmlファイルを見つけ、クラスについて知っています。私は本当にこの解決策に近づいています! – Kieveli

+0

gwt.xmlをWebプロジェクトに移動しましたが、データプロジェクトのデータフォルダと同じJavaパッケージに移動しました。別のクラスとソースのjarとしてデータプロジェクトのjarをリリースしました。 GWTは、gwt.xmlによって定義されたパッケージのクラスパスをチェックし、それらをWebプロジェクトでコンパイルします。悪臭のように働く。 – Kieveli

0

あなたの最善の策は、ギリアドhttp://noon.gilead.free.fr/gilead/

にあなたがしなければならないすべてを使用することですあなたのPOJOはLightEntityを継承し、Serializableを実装しています

このチュートリアルでは、RPCを設定する方法を簡単に説明します。

2
  1. どちらかJPAを捨てそしてObjectifyまたはTwigを使用して、新しいGWT 2.1 RequestFactory/EntityPro XY方式、または

  2. より良いを使用しています。

JPAはDatastoreには適していないため、Objectifyを使用します。 JPAはSQLベースのリレーショナルデータベースを念頭に置いて作成されましたが、GAE Datastoreはまったく別のものです。

Googleは、Datastoreを開発者に誘惑するためにDatastoreに移植しました.Datastoreは単純な古いSQLリレーショナルデータベースです。プロジェクトが大きくなると、後でそれが彼らの顔に爆発する。

App Engineを使用する場合は、実際にデータストアのトレードオフを理解する必要があります。 JPAはここであなたを好きにしていません。

+0

EntityProxyは非常に新しく、まだ使用していませんが、まさにこの正確な目的のためにジェネレータを作成する予定です。 GlassFishやJBossなどのJ2EEサーバーと組み合わせてSQLベースのデータベースを使用している場合は、JPAとEntityProxyを使用する方が良いアプローチになります。これはまた、GWT-RPCを使用していることを前提としています。私はEntityProxyに似たジェネレータを書いていますが、JSON通信用です。 – LINEMAN78

+0

JPAが存在し、使用されているため、この時点では切り替えはオプションではありません。 EntityProxyは、生成されたクラスに注釈を付けたいと思うようです。もう一度、単純にデータクラスを使用せず、クライアントサイドで使用したい外部生成します。助言がありますか? – Kieveli

関連する問題