Message Boards

NoClassDefFoundError during reindex for the custom entity

thumbnail
Vitaliy Koshelenko, modified 3 Years ago.

NoClassDefFoundError during reindex for the custom entity

Expert Posts: 319 Join Date: 3/25/11 Recent Posts
Hi everyone!
I have just tried to use the "Model Entity Indexing Framework":  https://help.liferay.com/hc/en-us/articles/360032260612-Model-Entity-Indexing-Framework (for Liferay 7.3.2 CE GA 3)

I have a service builder module with just one entity ("Project") for now.  I have implemented a  ProjectModelIndexerWriterContributor class:
[code]@Component(
        immediate = true,
        property = "indexer.class.name=com.aimprosoft.intranet.sb.model.Project",
        service = ModelIndexerWriterContributor.class
)
public class ProjectModelIndexerWriterContributor implements ModelIndexerWriterContributor<project> {

    @Override
    public void customize(BatchIndexingActionable batchIndexingActionable,
                          ModelIndexerWriterDocumentHelper modelIndexerWriterDocumentHelper) {
        batchIndexingActionable.setPerformActionMethod(
                (Project project) -&gt; batchIndexingActionable.addDocuments(
                        modelIndexerWriterDocumentHelper.getDocument(project)));
    }

    @Override
    public BatchIndexingActionable getBatchIndexingActionable() {
        return _dynamicQueryBatchIndexingActionableFactory.
                getBatchIndexingActionable(
                        _projectLocalService.getIndexableActionableDynamicQuery());
    }

    @Override
    public long getCompanyId(Project project) {
        return project.getProjectId();
    }

    @Override
    public IndexerWriterMode getIndexerWriterMode(Project project) {
        if (project.isApproved() || project.isDraft() ||
                project.isInTrash() || project.isPending()) {

            return IndexerWriterMode.UPDATE;
        }

        if (!project.isApproved() &amp;&amp; !project.isInTrash()) {
            return IndexerWriterMode.SKIP;
        }

        return IndexerWriterMode.DELETE;
    }

    @Reference
    protected ProjectLocalService _projectLocalService;
    @Reference
    protected DynamicQueryBatchIndexingActionableFactory _dynamicQueryBatchIndexingActionableFactory;


}</project>

When I reindex my model in Control Panel - the exception is thrown, and indexing process hangs:

Exception message:
Exception in thread "liferay/background_task-2" java.lang.NoClassDefFoundError: com/liferay/portal/kernel/service/persistence/BasePersistence
&nbsp;&nbsp; &nbsp;at java.lang.Class.getDeclaredMethods0(Native Method)
&nbsp;&nbsp; &nbsp;at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
&nbsp;&nbsp; &nbsp;at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
&nbsp;&nbsp; &nbsp;at java.lang.Class.getMethod0(Class.java:3018)
&nbsp;&nbsp; &nbsp;at java.lang.Class.getMethod(Class.java:1784)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.kernel.dao.orm.DefaultActionableDynamicQuery.setBaseLocalService(DefaultActionableDynamicQuery.java:140)
&nbsp;&nbsp; &nbsp;at com.aimprosoft.intranet.sb.service.base.ProjectLocalServiceBaseImpl.getIndexableActionableDynamicQuery(ProjectLocalServiceBaseImpl.java:275)
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:498)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.spring.aop.AopMethodInvocationImpl.proceed(AopMethodInvocationImpl.java:50)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:69)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.spring.aop.AopMethodInvocationImpl.proceed(AopMethodInvocationImpl.java:57)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.spring.aop.AopInvocationHandler.invoke(AopInvocationHandler.java:49)
&nbsp;&nbsp; &nbsp;at com.sun.proxy.$Proxy747.getIndexableActionableDynamicQuery(Unknown Source)
&nbsp;&nbsp; &nbsp;at com.aimprosoft.intranet.sb.internal.search.spi.model.index.contributor.ProjectModelIndexerWriterContributor.getBatchIndexingActionable(ProjectModelIndexerWriterContributor.java:32)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.search.internal.indexer.IndexerWriterImpl.getBatchIndexingActionable(IndexerWriterImpl.java:106)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.search.internal.indexer.IndexerWriterImpl.reindex(IndexerWriterImpl.java:188)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.search.internal.indexer.DefaultIndexer.reindex(DefaultIndexer.java:255)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.search.internal.background.task.ReindexSingleIndexerBackgroundTaskExecutor.reindex(ReindexSingleIndexerBackgroundTaskExecutor.java:103)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.search.internal.background.task.ReindexBackgroundTaskExecutor.execute(ReindexBackgroundTaskExecutor.java:54)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.background.task.internal.SerialBackgroundTaskExecutor.execute(SerialBackgroundTaskExecutor.java:62)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.kernel.backgroundtask.DelegatingBackgroundTaskExecutor.execute(DelegatingBackgroundTaskExecutor.java:41)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.background.task.internal.ThreadLocalAwareBackgroundTaskExecutor.execute(ThreadLocalAwareBackgroundTaskExecutor.java:72)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.background.task.internal.messaging.BackgroundTaskMessageListener.doReceive(BackgroundTaskMessageListener.java:136)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.kernel.messaging.BaseMessageListener.receive(BaseMessageListener.java:26)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:74)
&nbsp;&nbsp; &nbsp;at com.liferay.portal.messaging.internal.ParallelDestination$1.run(ParallelDestination.java:56)
&nbsp;&nbsp; &nbsp;at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
&nbsp;&nbsp; &nbsp;at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
&nbsp;&nbsp; &nbsp;at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.liferay.portal.kernel.service.persistence.BasePersistence cannot be found by com.aimprosoft.intranet.sb.service_1.0.0
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:508)
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:419)
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:411)
&nbsp;&nbsp; &nbsp;at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:151)
&nbsp;&nbsp; &nbsp;at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
&nbsp;&nbsp; &nbsp;... 32 more
Any ideas what may be wrong?
Service Builder (-api and -service) modules attached.

Regards and thanks,Vitaliy
thumbnail
Jorge Díaz, modified 3 Years ago.

RE: NoClassDefFoundError during reindex for the custom entity

Liferay Master Posts: 753 Join Date: 1/9/14 Recent Posts
Hi Vitaliy,

Your code in com.aimprosoft.intranet.sb.service.base.ProjectLocalServiceBaseImpl , for some reason is missing following method:
&nbsp;&nbsp;&nbsp; public BasePersistence<project> getBasePersistence() {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return projectPersistence;
&nbsp;&nbsp; &nbsp;}
</project>
Without that method the Import-Package reference to com.liferay.portal.kernel.service.persistence package is not added to the MANIFEST.MF file.
If there is no import reference in MANIFEST.MF, that causes the causing the  Caused by: java.lang.ClassNotFoundException: com.liferay.portal.kernel.service.persistence.BasePersistence cannot be found by com.aimprosoft.intranet.sb.service_1.0.0  error when Liferay tries to load the BasePersistence class.
Did you manually removed that method from the generated code?
How did you generated the service builder code?
Regards,
Jorge
thumbnail
Vitaliy Koshelenko, modified 3 Years ago.

RE: NoClassDefFoundError during reindex for the custom entity

Expert Posts: 319 Join Date: 3/25/11 Recent Posts
Hi Jordge,
I have added this method, and it worked for me! Thank you!
I have generated service-builders modules with Liferay Intellij Plugin, and then run 'buildService' gradle command to generate code.Just noticed: once I run 'buildService'  - getBasePersistence method is  removed again.
Seems to be a service builder plugin issue. 
Vitaliy