Liferay 7.2 Servicebuilder для исключения картографирования extDB - PullRequest
0 голосов
/ 15 апреля 2020

Я построил для внешней БД, с помощью сервиса Liferay Service Builder. Я использовал Liferay IDE, и мои Сервисы компилируются, и я могу развернуть оба Сервиса Jar. Но как только я внедряю service.jar, появляются следующие исключения. Я следовал инструкциям этого блога: https://liferay.dev/blogs/-/blogs/liferay-7-service-builder-and-external-databases Я прикрепил весь модуль.

Этот TestService был опробован с LR CE 7.2.1-ga2 в комплекте с Tomcat

java.lang.Exception: Unable to start Test72.service
    at com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextRegistrator.start(ModuleApplicationContextRegistrator.java:107)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.felix.dm.impl.InvocationUtil.invokeMethod(InvocationUtil.java:157)
    at org.apache.felix.dm.impl.InvocationUtil.invokeCallbackMethod(InvocationUtil.java:112)
    at org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:638)
    at org.apache.felix.dm.impl.ComponentImpl.invoke(ComponentImpl.java:1783)
    at org.apache.felix.dm.impl.ComponentImpl.invokeStart(ComponentImpl.java:1281)
    at org.apache.felix.dm.impl.ComponentImpl.performTransition(ComponentImpl.java:1232)
    at org.apache.felix.dm.impl.ComponentImpl.handleChange(ComponentImpl.java:1166)
    at org.apache.felix.dm.impl.ComponentImpl.lambda$start$2(ComponentImpl.java:502)
    at org.apache.felix.dm.impl.SerialExecutor.runTask(SerialExecutor.java:138)
    at org.apache.felix.dm.impl.SerialExecutor.runTasks(SerialExecutor.java:120)
    at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:86)
    at org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:105)
    at org.apache.felix.dm.impl.ComponentImpl.start(ComponentImpl.java:500)
    at org.apache.felix.dm.impl.ComponentScheduler.add(ComponentScheduler.java:69)
    at org.apache.felix.dm.DependencyManager.add(DependencyManager.java:141)
    at com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextExtender$ModuleApplicationContextExtension.start(ModuleApplicationContextExtender.java:150)
    at com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextExtender.addingBundle(ModuleApplicationContextExtender.java:76)
    at com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextExtender.addingBundle(ModuleApplicationContextExtender.java:55)
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:475)
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
    at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
    at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:230)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:137)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:129)
    at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:191)
    at org.eclipse.osgi.container.Module.publishEvent(Module.java:476)
    at org.eclipse.osgi.container.Module.doStart(Module.java:578)
    at org.eclipse.osgi.container.Module.start(Module.java:449)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:428)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1275)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1248)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
Caused by: org.hibernate.MappingException: entity class not found: com.test.model.impl.EmployeeImpl
    at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:125)
    at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:191)
    at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:67)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:135)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:795)
    at com.liferay.portal.spring.hibernate.PortalHibernateConfiguration.newSessionFactory(PortalHibernateConfiguration.java:209)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    at com.liferay.portal.spring.hibernate.PortalHibernateConfiguration.buildSessionFactory(PortalHibernateConfiguration.java:85)
    at com.liferay.portal.spring.aop.AopConfigurableApplicationContextConfigurator$AopBeanFactoryPostProcessor._getPlatformTransactionManager(AopConfigurableApplicationContextConfigurator.java:208)
    at com.liferay.portal.spring.aop.AopConfigurableApplicationContextConfigurator$AopBeanFactoryPostProcessor.postProcessBeanFactory(AopConfigurableApplicationContextConfigurator.java:123)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:283)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:128)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at com.liferay.portal.spring.extender.internal.context.ModuleApplicationContextRegistrator.start(ModuleApplicationContextRegistrator.java:89)
    ... 43 more
Caused by: java.lang.ClassNotFoundException: com.test.model.impl.EmployeeImpl
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1363)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1186)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:200)
    at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:122)

Зависимости в пом. xml от xxx-service

<dependencies>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.petra.io</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.petra.lang</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.petra.string</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.portal.aop.api</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.liferay.portal</groupId>
            <artifactId>com.liferay.portal.kernel</artifactId>
            <version>4.4.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.annotation.versioning</artifactId>
            <version>1.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.component.annotations</artifactId>
            <version>1.3.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>Test72</groupId>
            <artifactId>Test72-api</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.portal.spring.extender.api</artifactId>
            <version>4.0.0</version>
        </dependency>

Мой сервис. xml это:

<service-builder dependency-injector="spring" package-path="com.test" auto-namespace-tables="false">
    <namespace>second</namespace>
    <entity name="Employee" local-service="true" remote-service="false" table="employee" data-source="secondDatabase">
        <column name="eid" primary="true" type="int"></column>
        <column name="ename" type="String"></column>
    </entity>
</service-builder>

/ META-INF / spring / ext-spring . xml

<?xml version="1.0"?>

<beans
       default-destroy-method="destroy"
       default-init-method="afterPropertiesSet"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
>


       <bean  class="com.liferay.portal.dao.jdbc.spring.DataSourceFactoryBean" id="liferayDataSourceFactory" >
              <property name="propertyPrefix" value="jdbc.ext." />
       </bean>

       <bean class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" id="liferayDataSource" >
              <property name="targetDataSource" ref="liferayDataSourceFactory" />
       </bean>

       <alias alias="secondDatabase" name="liferayDataSource" />

</beans

и портальная пружина. xml в META-INF / пружине:

<?xml version="1.0"?>

<beans
    default-destroy-method="destroy"
    default-init-method="afterPropertiesSet"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
>
    <bean class="com.test.service.impl.EmployeeLocalServiceImpl" id="com.test.service.EmployeeLocalService" />
    <bean class="com.test.service.persistence.impl.EmployeePersistenceImpl" id="com.test.service.persistence.EmployeePersistence">
        <property name="dataSource" ref="secondDatabase" />
    </bean>
</beans>
...