2013-06-13 5 views
12

persistence.xmlファイルの場所については、私は困惑しています。私はJPA 2.0の実装としてeclipselink 2.4を使用しており、src/main/resources/META-INF/persistence.xmlの下にpersistence.xmlを配置しています。JPA persistence.xml META-INFが正しく機能しない

最初の問題: eclipse内のサーバーに公開した後、私のpersistence.xmlが見つからないというエラーが表示されます。ここで

Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X' 
is available in scope Webapp. Available persistence units: [] at 

enter image description here

私のpersistence.xmlのためのコードは、私がWebアプリケーション/ WEB-INF /クラス/ META-INFにMETA-INFを移動した場合、それは動作します

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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"> 
<persistence-unit name="X" transaction-type="JTA"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<jta-data-source>localJTA</jta-data-source> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
<properties> 
    <property name="eclipselink.target-server" value="WebLogic"/> 
    <property name="eclipselink.logging.level" value="FINEST"/>   
</properties> 
</persistence-unit> 
</persistence> 

です!私は問題が何であるか理解できません。

enter image description here

私はプロジェクトがパスを構築し、すべてがそこによさそうだがチェック。

enter image description here

第二の問題私が午前は私の注釈付きのエンティティクラスがEclipseLinkのことで自動的に拾われていないことです。私のJPA設定では、Discoverアノテートされたクラスが自動的に選択されています。

enter image description here

私もXMLで次のように使用

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

テクノロジーズています。WebLogic 12cのサーバ、EJB 3.1、JPA 2.0、M2E-WTP、およびJSF 2.1

更新1:パスsrc/main/resources/META-INF/persistence.xmlにMETA-INFを残し、warファイルをビルドするためにmaven installを実行すると、META-INFフォルダはWEB-INF/classes/META- INF /持続性。 xmlのように(戦争の中で)する必要があります。 webappがビルドされ、Eclipseでローカルに実行されたのは、それが問題であると思われます。誰もこれを説明できますか?

アップデート2: persistence.xmlのつまりのsrc /メイン/リソース/ META-INF/ のsrc /メイン/リソースにMETA-INFを残して、私のpersistence.xmlで、次のではなく、明示的にエンティティクラスを一覧表示します

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

私が戦争を構築し、インターネットエクスプローラを介してweblogicコンソールを通じて展開する場合は、なぜそれが日食の内部で動作しないのですか?

アップデート3:あなたは - はいを構築します何
検査しなかった、Eclipseの内部で私は自動的にセットを構築できます。私はjavaパッケージcom、persistence.xmlを含むMETA-INFフォルダ、Webapp/target/classesの下にあるresourcesフォルダを見ています。
戦争が同じ場合 - あなたはWebappを参照していますか?warフォルダはC:¥workspace.metadata.plugins¥org.eclipse.wst.server.core¥tmp0¥Weblogic12cDomain_auto_generated_ear_¥Webapp.warにありますか?もしそうなら、WEB-INF \ lib \ jsf-impl-2.1.7.jar
の中で唯一のものは、あなたのアプリケーションをEclipseでテストするために使われているクラスパスを検査したのですか? - このエントリは私のクラスパスにありますWebapp/.classpathの下で期待どおりに
リソースディレクトリのpersistence.xmlがクラスパスに最初にある場合、それは戦争のディレクトリまたは正しいディレクトリのディレクトリの代わりに選択されます - 私の理解はEclipseですプロジェクトを構築してから、warファイルを生成せずに内容をサーバーにコピーします。たwebapp.warを生成ここで

は達人のルートにあるものである:ここでは

enter image description here

はのWebappプロジェクトフォルダのルートにあるものである:

enter image description here

Webapp.war FOLDERのルートにあるC:\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.warのルートは次のとおりです。

012リソースディレクトリ内にpersistence.xmlが最初のクラスパス上にある場合

enter image description here

は、それはあなたの戦争や正しいディレクトリ内の1つの内の1つの代わりにピックアップされます。 - これが何を意味するのかわかりません。私のリソース/ META-INF内のpersistence.xmlは、私が拾いたいものです。どのような戦争ファイルがそれと関係しているか分かりませんか?どちらの方法でも、私は同じpersistence.xmlにする必要があります。

ご迷惑をおかけして申し訳ありません。

答えて

5

JPA仕様のセクション8.2.1では、「persistence.xmlファイルは、永続ユニットのルートの META-INFディレクトリにあります。後で「管理された永続クラスは永続ユニットのルートに含まれるか、 は参照で指定することができます。つまり、クラス、クラスアーカイブ、またはXMLマッピングファイルの名前を付けて指定することができます アプリケーションクラスパス上でアクセス可能なもの "

したがって、永続ユニットのルートはMETA-INFディレクトリがある場所です。クラスをクラスディレクトリに置くことによって、クラスは永続ユニットのルートにはないので、明示的に名前を付ける必要があります。

+0

Thxをクリス!これは理にかなっていますが、それは日食の中では機能しません! = /私の更新を見てください。 – Padawan

+0

Chrisさんは、他の人が質問に答えられたと思わないように、あなたの答えをコメントに変更していただけますか? – Padawan

+0

あなたが探しているものではなく、より多くの露出を望むなら、それに賞金をあてるか、あなたがしたことをやり直してください。これは「Eclipseでビルドする」ときにのみ発生すると言われています。何が構築されるのか調べましたか?戦争が同じ場合、Eclipseであなたのアプリをテストするために使用されているクラスパスを調べましたか?リソースディレクトリ内のpersistence.xmlが最初にクラスパス上にある場合、それは戦争中のものか正しいディレクトリ内のものの代わりに選択されます。 – Chris

2

私はそれがあなたのプレートにあるかどうかわからないので、あなたは決してmavenを言及しません。 hibernate-entitymanagerの依存関係を追加するまでは、mavenで私のために働いていませんでした。私のpom.xmlはhibernate-coreしか持っていませんでした。私がhibernate-entitymanagerを追加した後、それは(テストのために)働き始めました。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 
0

あなたの戦争中にpersistence.xmlが存在するかどうかを確認します。あるいは、それは間違った場所にあります。 このファイルをjava/main/resourcesフォルダ内に配置して、クラスパスに配置することもできます。

4

ここに少なくとも2つの問題があると思います。Mavenのビルド

1)

あなたのプロジェクトは、それはMavenのコマンドを使用して構築しなければなりませんので、Webプロジェクトの構造EclipseのないMavenの構造は、デフォルトでビルドするEclipseはしていません。 (私はMavenのエキスパートではないので、Mavenのエキスパートがジャンプしてコメントしてください。したがって、Eclipseで自動ビルドを行っているときには、src/main/resources/META-INF/persistence.xmlをWEB-INF/classes/META-INF/persistence.xmlにコピーしてjavaクラス。

2)展開

あなたはEclipseプロジェクトの構造に従った場合、Eclipseは、あなたが「サーバーに追加]を選択したときに、サーバーにプロジェクトをパックして追加する方法を知っています。 mavenを使用している場合、ビルドされた戦争は通常ターゲットディレクトリにあります。したがって、この戦争をエクスポートしてWebLogicツールを使用してインストールするか、またはmavenタスク経由でインストールする必要があります。

オラクルは、WebLogicでのEclipseを使用することが提案されているかチェックWebLogic Server with Maven and EclipseとMaven

+0

私はTomcat7(OpenJPA2.x)とIBM WAS 8.5.5(OpenJPA 2.x)を持っていますが、webappは非jta(resource_local)jpaプロジェクトです。 Tomcatは問題ありませんでしたが、WASは同じ戦争パッケージで失敗しました。 "mywebapp/WEB-INF/classes/META-INF/persistence.xml"にxmlを置くと、このトリックはうまくいきました。 – Whome

関連する問題