UnknownServiceException:请求未知服务[EnversService]

时间:2017-08-29 09:41:03

标签: hibernate-envers

我想在OSGi中运行Hibernate。我添加了标准的Hibernate OSGi包和一个Blueprint实现,以便Envers在启动时立即注册。

即使没有任何文件,我发现你必须启动Envers,因为......我怀疑是否有合理的理由,否则它无效。

但是现在,即使Envers在Blueprint中注册,我也会遇到以下异常:

org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.envers.boot.internal.EnversService]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:184)
at org.hibernate.envers.boot.internal.TypeContributorImpl.contribute(TypeContributorImpl.java:22)
at org.hibernate.boot.internal.MetadataBuilderImpl.applyTypes(MetadataBuilderImpl.java:280)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.populate(EntityManagerFactoryBuilderImpl.java:798)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:187)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114)
at org.hibernate.osgi.OsgiPersistenceProvider.createEntityManagerFactory(OsgiPersistenceProvider.java:78)
at org.acme.project.Main.startSession(PersistenceUnitJpaProvider.java:38)

堆栈跟踪从以下代码段中的PersistenceProvider#createEntityManagerFactory开始:

public class Main {

    private EntityManagerFactory entityManagerFactory;

    public void startSession(Map<String, Object> config) {
        BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
        ServiceReference<PersistenceProvider> serviceReference = context.getServiceReference(PersistenceProvider.class);
        PersistenceProvider persistenceProvider = context.getService(serviceReference);

        this.entityManagerFactory = persistenceProvider.createEntityManagerFactory("persistenceUnit", config);

        context.ungetService(serviceReference);
    }

我找到了this bug,也许这个问题在当前版本的Hibernate中得到修复。但由于捆绑ID已损坏,我必须使用5.1。

所以Envers已注册,但并非如此。可能是出现这种奇怪错误信息的原因是什么?

0 个答案:

没有答案