Une approche que je l'utilise dans mon travail est comme ci-dessous:
d'abord je configurer dans Liferay-portlet.xml le planificateur comme ci-dessous:
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>your-portelt</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-event-listener-class>your.class.that.implements.messagelistener</scheduler-event-listener-class>
<trigger>
<cron>
<cron-trigger-value>.... your cron</cron-trigger-value>
</cron>
</trigger>
</scheduler-entry>
...
</portlet>
...
</liferay-portlet-app>
je mettre en œuvre la logique de mes busines sheduler dans une classe que je référence dans la balise scheduler-event-listener-class.
public class YourManageScheduler implements MessageListener {
@Override
public void receive(Message message) throws MessageListenerException {
User user = ....
PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.getPermissionCheckerFactory().create(user);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
// your logic
...
// your logic
....
}
...
}
Une chose importante si vous utilisez une api que préforme PermissionCheker vous configurez le cheker de permision dans votre fil local ou essayez d'utiliser api qui ne requred cheker d'autorisation. Le point clé est que, dans ce cas, le travail commence de manière asynchrone et qu'aucun utilisateur n'est enregistré, donc aucune permission n'est configurée dans le thread MessageListener. Je souhaite que cela puisse vous aider