2011-11-18 10 views
5

JBoss ASに付属のデフォルトの休止状態とデフォルトのデータベースでJBoss AS 7を使用するデモを実装しようとしています。私の実装はJBossの "login"の例と似ています(私はWebサービスを実装し、EARとして展開するいくつかのプロジェクトがあります)。とにかく私は常に私のbeans.xmlのが空であるようにJBoss AS 7で永続性が機能しない(サブデプロイメント時に名前のあるデプロイメントユニットが見つかりません)

Caused by: java.lang.RuntimeException: Can't find a deployment unit named at subdeployment "myproject.persistence.war" of deployment "myproject.ear" 
    at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:94) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final] 
    at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.resolvePersistenceContext(WeldJpaInjectionServices.java:59) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final] 
    at org.jboss.weld.util.Beans.injectEEFields(Beans.java:784) [weld-core-1.1.2.Final.jar:2011-07-26 15:02] 

マイMANIFEST.MF

Manifest-Version: 1.0 
Dependencies: org.hibernate 

としてランタイム例外を取得します。私のlibフォルダには、休止状態のjarファイルがネイティブな休止状態の機能にアクセスできるようになっています。

マイpersistence.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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" 
    version="2.0"> 
    <persistence-unit name="accessControlDatabase"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> 
     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

そして、私の2つの関連クラス:

import javax.enterprise.inject.Produces; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

public class Resources { 
    @SuppressWarnings("unused") 
    @Produces 
    @PersistenceContext(name = "accessControlDatabase") 
    private EntityManager em; 
} 

import java.util.List; 

import javax.enterprise.context.RequestScoped; 
import javax.inject.Inject; 
import javax.inject.Named; 
import javax.persistence.EntityManager; 

import myproject.model.Session; 
import myproject.model.User; 

@Named("accessControlRepository") 
@RequestScoped 
public class AccessControlRepository { 
    @Inject 
    private EntityManager em; 

    @SuppressWarnings("unchecked") 
    public List<Session> getAllSessions() { 
     return em.createQuery("from Session").getResultList(); 
    } 
} 

何例外を引き起こす可能性がありますか?問題を解決するにはどうすればよいですか?

答えて

8

私は解決策を見つけました。 永続化ファイルを、EARプロジェクトのMETA-INFフォルダに配置する必要があります。そうすれば@PersistenceContext注釈を使用してEntityManagerにアクセスすることができます。私はそれが別の方法でも動作するはずだと思います。これは回避策であり実際の解決策ではないようです。

+0

「persistence.xml」はどこにあったのですか? EAR内のejb-jarのMETA-INFディレクトリにありますか? –

+12

そしてwarを使っている人は、persistence.xmlはあなたの_app_name¥src¥main¥resources¥META-INFにあるはずです。これは私の1時間かかりました:( – halil

+0

) .warを使用しています。非常に有用なコメント – Goot

0

あなたはよくある間違いは、これが<persistence-unit-name>コンテンツの参照を間違えすることですやって、これはこれを生成源である

<persistence-unit-ref> 
    <persistence-unit-ref-name>myprojectPersistenceUnit/pu</persistence-unit-ref-name> 
    <persistence-unit-name>../myproject.name.jar#myprojectPersistenceUnit</persistence-unit-name> 
</persistence-unit-ref> 

次のようにmyproject.persistence.warのごweb.xmlファイルに永続ユニットの参照を定義する必要がありますエラー

関連する問題