2011-11-18 8 views
5

JBoss AS 7'yi varsayılan hazırda bekleme ve varsayılan veritabanı olan JBoss AS kullanan bir demoyu uygulamaya çalışıyorum. Benim uygulamam JBoss'un "giriş" örneğine benziyor (web servisini uygulamak ve EAR olarak uygulamak için bazı ek projelerim var) ve farkı yakalayamıyorum. Neyse ben sürekli Benim beans.xml boş böyleJBoss AS 7'de çalışmaya devam edemiyorum ("Subdeployment adında bir dağıtım birimi bulamıyor")

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] 

Benim MANIFEST.MF

Manifest-Version: 1.0 
Dependencies: org.hibernate 

gibi Zamanı İstisnalar olsun. Lib klasöründe yerel hazırda bekleme özelliklerine erişim için hazırda bekletme kavanozlarına sahibim.

Benim 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> 

Ve benim iki İlgili sınıfları:

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(); 
    } 
} 

Ne istisna neden olabilir? Sorunu çözmek için nelere dikkat etmeliyim?

cevap

8

Bir çözüm buldum. persistence.xml'u EAR projesinin META-INF klasörüne yerleştirmem gerekiyor. Bunu yaparsam EntityManager numarasına ulaşmak için @PersistenceContext ek notunu kullanabilirim. Bence başka bir şekilde de çalışmalı. Bu bir çözüm gibi görünüyor, gerçek bir çözüm değil.

+0

Ve daha önce "persistence.xml" neydi? EJB-jar'ın EAR içindeki META-INF dizininde mi? –

+12

Ve savaş kullanan herkes için, persistence.xml sizin_app_name \ src \ main \ resources \ META-INF içinde olmalı 1 saatimi aldı :( – halil

+0

Merhaba, birçok IDE (intellij gibi) WRONG klasöründe kalıcı xml oluşturur Kullanarak .war. Çok yararlı Yorum – Goot

0

A Yaygın bir hata bu <persistence-unit-name> içeriğin referansını yanlış yazarlar etmektir yapıyor, bu üreten bir kaynaktır

<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> 

şu şekilde myproject.persistence.war sizin web.xml dosyasında bir kalıcılık birimi referansı tanımlamak gerekir hata

İlgili konular