2016-04-29 9 views
0

私は、このクラスにKaraf 4.0.5休止エラー

import org.hibernate.Session; 

import javax.persistence.EntityManager; 
import javax.persistence.TypedQuery; 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Root; 
import java.util.List; 

public class BaseJpaDao<E> implements BaseDao<E>{ 
    protected Class<?> entityClass; 

    private EntityManager entityManager; 

    public BaseJpaDao(Class<?> entityClass, EntityManager entityManager) { 
     this.entityClass = entityClass; 
     this.entityManager = entityManager; 
    } 

    @Override 
    public E persist(E e) { 
     entityManager.persist(e); 
     return e; 
    } 

    @Override 
    public E get(Long id) { 
     return (E) entityManager.find(entityClass, id); 
    } 

    @Override 
    public E get(Integer id) { 
     return (E) entityManager.find(entityClass, id); 
    } 

    @Override 
    public List<E> getAll() { 
     CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<E> cq = cb.createQuery((Class<E>) entityClass); 
     Root<E> rootEntry = cq.from((Class<E>) entityClass); 
     CriteriaQuery<E> all = cq.select(rootEntry); 
     TypedQuery<E> allQuery = entityManager.createQuery(all); 
     return allQuery.getResultList(); 
//  return entityManager.createCriteria(entityClass).list(); 
//  return new ArrayList<>(); 
    } 

    @Override 
    public E merge(E e) { 
     return entityManager.merge(e); 
    } 

    @Override 
    public void remove(E e) { 
     entityManager.remove(e); 
    } 

    @Override 
    public void remove(Long id) { 
     E e = get(id); 
     entityManager.remove(e); 
    } 

    @Override 
    public void saveAll(List<E> entityList) { 
     for (E entity : entityList) { 
      entityManager.merge(entity); 
     } 

     entityManager.flush(); 
    } 

    @Override 
    public EntityManager getEntityManager() { 
     return entityManager; 
    } 

    @Override 
    public Session getSession() { 
     Session unwrap = null; 
     unwrap = entityManager.unwrap(Session.class); 
     return unwrap; 
    } 

} 

を持っていると私は私のkarafを起動したとき、それは良い開始します。しかし、再起動後、私はエラーに

[email protected]>ERROR: Bundle domain.payment.module.impl [254] Error starting mvn:domain/payment-module-impl/1.0.0 (org.osgi.framework.BundleException: Uses constraint violation. Unable to re 
solve resource domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] because it is exposed to package 'javax.persistence' from resources org.apache.geronimo.specs.geroni 
mo-jpa_2.0_spec [org.apache.geronimo.specs.geronimo-jpa_2.0_spec [106](R 106.0)] and javax.persistence [javax.persistence [31](R 31.0)] via two dependency chains. 

Chain 1: 
    domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] 
    import: (&(osgi.wiring.package=javax.persistence)(version>=1.1.0)(!(version>=2.0.0))) 
    | 
    export: osgi.wiring.package: javax.persistence 
    org.apache.geronimo.specs.geronimo-jpa_2.0_spec [org.apache.geronimo.specs.geronimo-jpa_2.0_spec [106](R 106.0)] 

Chain 2: 
    domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] 
    import: (&(osgi.wiring.package=org.hibernate)(version>=4.2.0)(!(version>=5.0.0))) 
    | 
    export: osgi.wiring.package=org.hibernate; uses:=javax.persistence 
    org.hibernate.core [org.hibernate.core [204](R 204.0)] 
    import: (osgi.wiring.package=javax.persistence) 
    | 
    export: osgi.wiring.package: javax.persistence 
    javax.persistence [javax.persistence [31](R 31.0)] Unresolved requirements: [[domain.payment.module.impl [254](R 254.0)] osgi.wiring.package; (&(osgi.wiring.package=org.hibernate)(version>=4. 
2.0)(!(version>=5.0.0)))]) 
org.osgi.framework.BundleException: Uses constraint violation. Unable to resolve resource domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] because it is exposed to 
package 'javax.persistence' from resources org.apache.geronimo.specs.geronimo-jpa_2.0_spec [org.apache.geronimo.specs.geronimo-jpa_2.0_spec [106](R 106.0)] and javax.persistence [javax.persistence [31 
](R 31.0)] via two dependency chains. 

Chain 1: 
    domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] 
    import: (&(osgi.wiring.package=javax.persistence)(version>=1.1.0)(!(version>=2.0.0))) 
    | 
    export: osgi.wiring.package: javax.persistence 
    org.apache.geronimo.specs.geronimo-jpa_2.0_spec [org.apache.geronimo.specs.geronimo-jpa_2.0_spec [106](R 106.0)] 

Chain 2: 
    domain.payment.module.impl [domain.payment.module.impl [254](R 254.0)] 
    import: (&(osgi.wiring.package=org.hibernate)(version>=4.2.0)(!(version>=5.0.0))) 
    | 
    export: osgi.wiring.package=org.hibernate; uses:=javax.persistence 
    org.hibernate.core [org.hibernate.core [204](R 204.0)] 
    import: (osgi.wiring.package=javax.persistence) 
    | 
    export: osgi.wiring.package: javax.persistence 
    javax.persistence [javax.persistence [31](R 31.0)] Unresolved requirements: [[domain.payment.module.impl [254](R 254.0)] osgi.wiring.package; (&(osgi.wiring.package=org.hibernate)(version>=4. 
2.0)(!(version>=5.0.0)))] 
     at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111) 
     at org.apache.felix.framework.Felix.startBundle(Felix.java:2117) 
     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371) 
     at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308) 
     at java.lang.Thread.run(Thread.java:745) 

を持っている。しかし、私はそれが

@Override 
     public Session getSession() { 
      Session unwrap = null; 
      unwrap = entityManager.unwrap(Session.class); 
      return unwrap; 
     } 

休止輸入すべての作業罰金を使用するクラスでは、この方法と、すべての輸入を削除する場合。 karaf 4.0.5 in karaf 3.0.6すべて正常に動作しました。

答えて

0

use制約の問題は、2つの異なるjpa仕様バンドルがインストールされていることです。

私はあなた自身の機能とカラフの機能から1つを推測します。あなたはkarafと同じバンドルを参照するか、バンドルをdependency = "true"とマークすることが望ましいでしょう。これにより、カラフが必要かどうかを判断することができます。