1

Google Cloud SQL で JPA を使用すると問題が発生します。java.lang.NoClassDefFoundError: java.io.FileWriter というエラーが表示されますが、これは実際には Google App Engine でサポートされていないクラスです。

EclipseLink 2.4.1 - Juno を使用してhttps://developers.google.com/eclipse/docs/cloudsql-jpatoolsの指示に注意深く従いました(Linux Mint 14 で Eclipse Juno を実行しています) 。

代わりに EclipseLink 2.3.3 - Indigo も使用してみましたが、結果は同じでした。

https://developers.google.com/appengine/docs/java/cloud-sql/developers-guideに従ってJDBCアクセスを使用しようとしたため、Google Cloud SQLデータベースが機能していることはわかっていますが 、期待どおりに機能しました.

JPA を呼び出す最初のメソッドは次のとおりです。

public static void createBookJPA(BookJPA c) 
{
  logger.info("Entering createBookJPA: [" + c.getIsbn() + "," + c.getBookName() + "]");
  EntityManager mgr = EMF.get().createEntityManager();
  try 
  {
    logger.info("before begin");
    mgr.getTransaction().begin();
    logger.info("before persist");
    mgr.persist(c);
    logger.info("before commit");
    mgr.getTransaction().commit();
    logger.info("after commit");
  }
  finally 
  {
    mgr.close();
  }
  logger.info("Exiting createBookJPA");
}

ログにこれを与える:

feb 15, 2013 2:29:25 PM dk.lundogbendsen.schoubo.gae.ex5demo.BookService createBookJPA
INFO: Entering createBookJPA: [JPA:978-1-849690-44-7,Google App Engine Java and GWT Application Development]

[EL Info]: 2013-02-15 14:29:25.79--ServerSession(619728523)--EclipseLink, version: Eclipse Persistence Services - 2.4.1.v20121003-ad44345
[EL Info]: connection: 2013-02-15 14:29:29.088--ServerSession(619728523)--file:/home/jschoubo/Interests/Softfact/Develop/GAE/eclipseworkspaceGAE/lobGAE/war/WEB-INF/classes/_transactions-optional login successful
[EL Severe]: ejb: 2013-02-15 14:29:30.333--ServerSession(619728523)--java.lang.NoClassDefFoundError: java.io.FileWriter is a restricted class. Please see the Google  App Engine developer's guide for more details.

feb 15, 2013 2:29:30 PM dk.lundogbendsen.schoubo.gae.ex5demo.LobGAEEx5DemoSQLJPA createAuthor
WARNING: java.lang.NoClassDefFoundError: java.io.FileWriter is a restricted class. Please see the Google  App Engine developer's guide for more details.

コードは Jetty の開発者モードでローカルに実行しますが、ローカルの MySQL がインストールされていないため、リモートの Cloud SQL ベースを使用しています。

このリンクJPA with Google Cloud SQL "NoClassDefFoundError: java.util.prefs.Preferences is a limited class"は同様の問題について話しているようですが、persistence.xml に com.google.appengine.api.rdbms が含まれていることを既に確認しました。 AppEngineDriver、そのため、解決策は私の問題を解決しません...

どんな助けでも大歓迎です!

[編集] いくつかのさらなる観察:

  • EclipseLink を含めると、HRD への JDO アクセスが機能しなくなります。試行すると、javax.jdo.JDOHelper でクラス ローダー エラーが発生します。
  • JPA ファセットと WEB-INF/lib の eclipselink jar を削除すると、NoClassDefFoundError がなくなり、コードがすべてのステップ (開始、永続化、コミット) を通過するようになりました。ただし、レコードはローカルの dev.mode HRD データストア (local_db.bin) に書き込まれるようになりましたか? 問題は、DataNucleus JPA で Cloud SQL を使用する方法です。

Google Cloud SQL (および HRD) の JPA サポートは DataNucleus パッケージに既に含まれているため、どこか (参照が見つかりません) で、EclipseLink は完全に不必要であるという発言に出くわしました。誰かがこれを確認できますか?

4

0 に答える 0