2012-02-12 6 views
4

PostgreSQLに接続する必要があるEclipseLinkでOSGiバンドルを開発する必要がありますが、時間が浪費して動作させることができませんでした。私はこの "javax.persistence.PersistenceException:名前の付いたEntityManagerの永続性プロバイダーがありません"というメッセージを受け取ります。EclipseLinkを使用してOSGiでPostgreSQLを動作させる方法

基本的に、私はウェブで見つけたチュートリアルの手順に従いました。私は、Eclipseインディゴ

Manifest file : 
Manifest-Version: 1.0 
Meta-Persistence: persistence.xml 
JPA-PersistenceUnits: rooms 
Bundle-ClassPath: ., META-INF/persistence.xml 
Bundle-ManifestVersion: 2 
Bundle-Name: PMSTestTask 
Bundle-SymbolicName: PMSTestTask 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: pmstesttask.Activator 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: javax.persistence;version="2.0.3", org.osgi.framework;version="1.3.0", org.postgresql 
Require-Bundle: org.eclipse.persistence.jpa;bundle-version="2.1.0", org.eclipse.persistence.jpa.osgi;bundle-version="2.3.0" 

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="rooms" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>test_task.domain.Room</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
      <property name="javax.persistence.jdbc.url" 
       value="jdbc:postgresql://localhost:5432/Hotel_test_task" /> 
      <property name="javax.persistence.jdbc.user" value="" /> 
      <property name="javax.persistence.jdbc.password" value="" /> 

     </properties> 
    </persistence-unit> 
</persistence> 

Activator.java

EntityManagerFactory emf = Persistence 
       .createEntityManagerFactory("rooms"); 
EntityManager em = emf.createEntityManager(); 

Updateを使用します。 0

マニフェストに必要なバンドルを追加しました。あなたはそれ以外の場合はJavaがインスタンス化することはできません、あなたがバンドルのクラスパスにEclipseLinkのクラスを追加する必要があります(EMFが注入され得るために例えばエンタープライズOSGiのを使用していない)EMF自分自身をインスタンス化しているので、これ

org.osgi.framework.BundleException: The bundle "org.eclipse.persistence.jpa.osgi_2.3.0.v20110604-r9504 [26]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.persistence.core; bundle-version="2.3.0" 
+0

タグなしで実行しようとしましたか?プロバイダは、EclipseLinkによって暗黙的に初期化される必要があります。 –

+0

はい、私はなしで試しましたが、ちょうどうまくいきませんでした –

+0

どのくちばしのバージョンを使用しますか? Equinox 3.7.0はEclipseLink 2.3.xでは動作しません。 –

答えて

1

を得ました指定された<provider>クラスです。これはこのエラーメッセージに依存する可能性があります。

は(EclipseLinkのクラスはRequire-Bundleに含まれている)org.eclipse.persistence.example.jpa.rcp.comicsバンドルの特にクラスローダノート、LazyLoadingRCP例を参照してください、またはその束の具体MANIFEST.MF

+0

ありがとう、私はManifestにRequire-Bundleを追加しましたが、それは助けになりませんでした。私は何とかEclipseを誤って構成したと思う。私はEclipse Build Pathで必要なすべてのjarファイルを持っていますが、次のようなエラーが表示されます:!ENTRY org.eclipse.persistence.jpa 4 0 2012-02-13 21:10:57.675 !MESSAGE FrameworkEvent ERROR !STACK 0 org .osgi.framework.BundleException:バンドル "org.eclipse.persistence.jpa_2.3.0.v20110604-r9504 [27]"を解決できませんでした。理由:欠落している制約:Require-Bundle:org.eclipse.persistence.core; bundle-version = "2.3.0" –

+0

エラーメッセージは明らかです。クラスパスに欠けていると思われるバンドルorg.eclipse.persistence.coreが必要なので、バンドルorg.eclipse.persistence.jpaを起動できません。 – Heri

+0

はい、それは明らかですが、persistence.core.jarもクラスパスにあります –

関連する問題