Ask Questions and Find Answers
Important:
Ask is now read-only. You can review any existing questions and answers, but not add anything new.
But - don't panic! While ask is no more, we've replaced it with discuss - the new Liferay Discussion Forum! Read more here here or just visit the site here:
discuss.liferay.com
RE: BackGroundTask is not working
Hi All,
I am using liferay dxp and trying to execute backgroundtask as below. But finally getting an error as "class not found ........ ".
I have a module , where taskexecutor class resides in same module.
ThemeDisplay themeDisplay =
(ThemeDisplay)resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);<br>
<br> <br> <br> Map<String, Serializable>
taskContextMap = new HashMap<>();<br>
taskContextMap.put("sample", new TestPoJO());<br>
try {<br>
backgroundTaskmanager.addBackgroundTask(themeDisplay.getUserId(),
themeDisplay.getScopeGroupId(), "test",<br>
com.liferay.backgroundtask.executor.TestBackGroundExecutor.class,
taskContextMap, new ServiceContext());<br> <br> }
catch (PortalException e) {<br> e.printStackTrace();<br>
}
Below is the task executor class
@Component(<br> immediate = true,<br>
property = {<br>
"background.task.executor.class.name=com.liferay.backgroundtask.executor.TestBackGroundExecutor"<br>
},<br> service =
BackgroundTaskExecutor.class<br> )
public class TestBackGroundExecutor extends
BaseBackgroundTaskExecutor {
<br> @Override<br> public BackgroundTaskResult
execute(BackgroundTask backgroundTask) throws Exception {<br>
<br> System.out.println("This is BackGround
executor");<br> <br> Map<String,
Serializable> map = backgroundTask.getTaskContextMap();<br>
TestPoJO testPojo = (TestPoJO)
map.get("sample");<br> <br>
return BackgroundTaskResult.SUCCESS;<br> }
TestPOJO class as below, which resides in same module only.
package jquery.request.timeout.portlet;
public class TestPoJO implements Serializable {<br>
private static final long serialVersionUID = 1L;<br> <br>
private String field1;
public String getField1() {<br> return
field1;<br> }
public void setField1(String field1) {<br>
this.field1 = field1;<br> }
}
So whenever i am trying to execute the class i am getting as error below
Caused by: java.lang.IllegalStateException: Unable to
deserialize object<br> at
com.liferay.portal.json.JSONFactoryImpl.deserialize(JSONFactoryImpl.java:188)<br>
at
com.liferay.portal.dao.orm.hibernate.MapType.nullSafeGet(MapType.java:95)<br>
at
org.hibernate.type.CompositeCustomType.nullSafeGet(CompositeCustomType.java:213)<br>
at
org.hibernate.type.AbstractType.hydrate(AbstractType.java:104)<br>
at
org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283)<br>
at
org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)<br>
at
org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)<br>
at org.hibernate.loader.Loader.getRow(Loader.java:1355)<br>
at
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)<br>
at org.hibernate.loader.Loader.doQuery(Loader.java:829)<br>
at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)<br>
at
org.hibernate.loader.Loader.loadEntity(Loader.java:2037)<br>
at
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)<br>
at
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)<br>
at
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3294)<br>
at
org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)<br>
at
org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)<br>
at
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)<br>
at
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:269)<br>
at
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)<br>
at
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)<br>
at
org.hibernate.impl.SessionImpl.get(SessionImpl.java:1005)<br>
at
org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:453)<br>
at
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255)<br>
at
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)<br>
at
org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867)<br>
at
org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)<br>
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855)<br>
at
com.liferay.portal.dao.orm.hibernate.SessionImpl.merge(SessionImpl.java:241)<br>
... 28 more<br> Caused by:
org.jabsorb.serializer.UnmarshallException: key sample Class
specified in javaClass hint not found:
jquery.request.timeout.portlet.TestPoJO<br> at
org.jabsorb.serializer.impl.MapSerializer.unmarshall(MapSerializer.java:270)<br>
at
org.jabsorb.JSONSerializer.unmarshall(JSONSerializer.java:692)<br>
at
com.liferay.portal.json.jabsorb.serializer.LiferayJSONSerializer.unmarshall(LiferayJSONSerializer.java:50)<br>
at
org.jabsorb.JSONSerializer.fromJSON(JSONSerializer.java:262)<br>
at
com.liferay.portal.json.JSONFactoryImpl.deserialize(JSONFactoryImpl.java:181)<br>
... 56 more<br> Caused by:
org.jabsorb.serializer.UnmarshallException: Class specified in
javaClass hint not found:
jquery.request.timeout.portlet.TestPoJO<br> at
org.jabsorb.JSONSerializer.getClassFromHint(JSONSerializer.java:748)<br>
at
org.jabsorb.JSONSerializer.unmarshall(JSONSerializer.java:672)<br>
at
com.liferay.portal.json.jabsorb.serializer.LiferayJSONSerializer.unmarshall(LiferayJSONSerializer.java:50)<br>
at
org.jabsorb.serializer.impl.MapSerializer.unmarshall(MapSerializer.java:265)<br>
... 60 more<br> Caused by: java.lang.ClassNotFoundException:
jquery.request.timeout.portlet.TestPoJO<br> at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)<br>
at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)<br>
at java.lang.Class.forName0(Native Method)<br> at
java.lang.Class.forName(Class.java:264)<br> at
org.jabsorb.JSONSerializer.getClassFromHint(JSONSerializer.java:744)<br>
... 63 more
Please help me to resolve the issue.
Is TestPOJO class externally exposed in your bnd (Export-Package:) file? the task will get picked up by the portla and I'm thinking the Portal may need access to that class.
Thanks Chris Huff.
I didn't exposed the class in bnd file. I will expose the class (Export-Package:) and try again. I will let you know the results.
Hi,
I have tried to export the package in bnd. But still same error.
Please find the module in attachment.
Attachments:
Hi,
Can you please take a look at below link:
https://issues.liferay.com/browse/LPS-54220
Powered by Liferay™