2

プロジェクトjarファイルをファイルサーバーにエクスポートした後、jpaのentitymanagerの作成は機能しなくなります。

以下の詳細があります:

  1. Glassfishv3プロジェクトのEclipseLinkを使用しています
  2. WebサイトからEclipseLink2.4...をダウンロードしました。
  3. org.eclipse.persistence.core.jar、org.eclipse.persistence.jpa.jar、javax.persistence.jar、およびeclipselink.jarはlibフォルダーにあります。
  4. persistence.xmlは、src内のMETA-INFフォルダーにあります。(私は日食ヘリオスを使用します)
  5. これはpersistence.xmlのコンテンツです

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
        version="2.0" 
        xmlns="http://java.sun.com/xml/ns/persistence">
        <persistence-unit name="QIS" transaction-type="RESOURCE_LOCAL" >
            <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
            <class>com.quoka.qis.lib.persistence.Type</class>
        </persistence-unit>
    </persistence>
    

すべてがEclipse内で機能しますが、ファイルサーバーからは機能しません。:-)

エラーメッセージは次のとおりです。

org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLException
    URI was not reported to parser for entity [document])
Caused By:
Log Exception of type org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLException : 
(1. URI was not reported to parser for entity [document])
(0) org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.error(XMLExceptionHandler.java:28)
(1) org.eclipse.persistence.internal.jpa.deployment.xml.parser.XMLExceptionHandler.warning(XMLExceptionHandler.java:23)
(2) gnu.xml.aelfred2.SAXDriver.warn(SAXDriver.java:935)
(3) gnu.xml.aelfred2.SAXDriver.startExternalEntity(SAXDriver.java:631)
(4) gnu.xml.aelfred2.XmlParser.pushURL(XmlParser.java:3358)
(5) gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:159)
(6) gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
(7) gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
(8) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:442)
(9) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:401)
(10) org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.getPersistenceUnits(PersistenceUnitProcessor.java:310)
(11) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchive(JPAInitializer.java:149)
(12) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfoInArchives(JPAInitializer.java:136)
(13) org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPersistenceUnitInfo(JPAInitializer.java:125)
(14) org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:98)
(15) org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:65)
(16) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78)
(17) com.quoka.qis.admin.QisAdminEntityManager.getInstance(QisAdminEntityManager.java:33)
(18) com.quoka.qis.admin.QisAdminFrame.login(QisAdminFrame.java:574)
(19) com.quoka.qis.admin.QisAdminFrame.testLogin(QisAdminFrame.java:513)
(20) com.quoka.qis.admin.QisAdminFrame.showFrame(QisAdminFrame.java:441)
(21) com.quoka.qis.admin.QisAdminFrame.showFrame(QisAdminFrame.java:417)
(22) com.quoka.qis.admin.QisAdminFrame.access$3(QisAdminFrame.java:416)
(23) com.quoka.qis.admin.QisAdminFrame$DebugPanel.run(QisAdminFrame.java:777)
(24) java.lang.Thread.run(Thread.java:662)

DBConnectionは次のとおりです。

Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.driver", "com.sybase.jdbc3.jdbc.SybDriver");
properties.put("eclipselink.target-database", "Sybase");
properties.put("javax.persistence.jdbc.url", "jdbc:sybase:Tds:"+meta.getServerName()+":"+meta.getPort());
properties.put("javax.persistence.jdbc.user", meta.getUserName());
properties.put("javax.persistence.jdbc.password", meta.getPassword());
properties.put("eclipselink.logging.level", "INFO"); 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("QIS", properties);
em = emf.createEntityManager();
4

2 に答える 2

1

永続性.xmlファイルは整形式であるため、クラスパスが混乱した結果として誤ったSAXパーサーが呼び出されたことがエラーに関連している可能性があります。アプリケーションのクラスパスを注意深く確認することをお勧めします。特に、含まれているjarに重複した互換性のないSAXパーサーが含まれているかどうかを確認してください。

于 2012-11-02T14:32:31.537 に答える
0

「プロジェクトjarファイルをファイルサーバーにエクスポートした後」という文がプロジェクトをGlassfishにデプロイしたことを意味すると仮定すると、質問に対する答えは次のようになります。

問題は、Glassfishにデプロイしたアプリケーションのトランザクションタイプが「resource-local」であるEntityManagerを作成していることです。アプリケーションは、GlassFishなどのアプリケーションサーバー内にデプロイされると、実際にはコンテナによって管理され、SEではなくEEアプリケーションになります。コンテナによって管理されるEntityManagerは、JTAトランザクションタイプである必要があります。

次の手順に従うか、このリンクを参照するか、このリンクを参照して、JTAトランザクションタイプを設定します。

  1. Sybaseドライバjarを次のフォルダにコピーします:.. \ glassfish \ domains \ domain1 \ lib
  2. Glassfish管理コンソールを開く
  3. リソース->JDBC->JDBC接続プール
  4. 新しいボタンを押す
  5. プール名*:SybasePoolOfHasan
  6. 今のところリソースタイプをスキップします
  7. データベースドライバベンダー:Sybase
  8. 次へボタンを押す
  9. データソースクラス名:com.sybase.jdbc3.jdbc.SybDriver
  10. 次のプロパティを追加します。

    URL = jdbc:sybase:Tds: "サーバー名を入力":"ポートを入力"

    ユーザー=入力してください

    パスワード=入力してください

  11. プッシュフィニッシュ
  12. Pingを押す->Pingは成功します
  13. [リソース]->[JDBC]->[JDBCリソース]を開きます
  14. JNDI名*:HasanSybaseJNDI
  15. プール名:SybasePoolOfHasan
  16. OKを押します

    persistence.xmlに戻り、次のように変更します。

    永続性-ユニット名="QIS"トランザクションタイプ="JTA"

    jta-data-source> HasanSybaseJNDI

    再デプロイすると、設定が完了します。

    ただし、トランザクション処理が失われるようにコードを変更する必要があります。つまり、次の2行はコードに必要なくなりました。

    em.getTransaction()。begin(); em.getTransaction()。commit();

    Glassfishアプリケーションサーバーがトランザクションを処理します。

于 2012-11-02T22:27:23.180 に答える