使用liferay调度作业6.1

问题描述 投票:1回答:1

我正在引用此链接link

用liferay安排我的工作。

我添加了Job Scheduler类,它是: -

import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;

public class SchedulerLiferay implements MessageListener {

    @Override
    public void receive(Message arg0) throws MessageListenerException {
        System.out.println("hello world");

    }

}

在我的liferay portlet.xml文件中,我添加了: -

<portlet>
        <portlet-name>quartz-demo</portlet-name>
        <icon>/icon.png</icon>
        <scheduler-entry>
            <scheduler-event-listener-class>com.infinite.npsc.Job.SchedulerLiferay</scheduler-event-listener-class>
            <trigger>
                <!-- <simple>
                    <simple-trigger-value>
                        5
                    </simple-trigger-value>
                    <time-unit>second</time-unit>
                </simple> -->
                <cron>
                    <cron-trigger-value>0/5 * * * * ?</cron-trigger-value>
                </cron>
            </trigger>
        </scheduler-entry>
        <header-portlet-css>/css/main.css</header-portlet-css>
        <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
        <css-class-wrapper>quartz-demo-portlet</css-class-wrapper>
    </portlet>

我还在我的portlet.xml文件中添加了这个portlet,如下所示: -

<portlet>
        <portlet-name>quartz-demo</portlet-name>
        <display-name>Quartz Demo</display-name>
        <portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
        <init-param>
            <name>view-template</name>
            <value>/view.jsp</value>
        </init-param>
        <expiration-cache>0</expiration-cache>
        <supports>
            <mime-type>text/html</mime-type>
        </supports>
        <portlet-info>
            <title>Quartz Demo</title>
            <short-title>Quartz Demo</short-title>
            <keywords>Quartz Demo</keywords>
        </portlet-info>
        <security-role-ref>
            <role-name>administrator</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>guest</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>power-user</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>user</role-name>
        </security-role-ref>
    </portlet>

工作不会运行。应用程序启动成功但没有任我希望每5秒钟在控制台中打印hello world

java liferay-6 job-scheduling
1个回答
0
投票

我根据你的问题创建了一个工作portlet,它在我的控制台中每5秒显示一个“hello world”(在Liferay EE 6.1.30上)。

我来告诉你详细的步骤:

  1. 我使用Liferay Developer Studio 1.6.3为Liferay 6.1开发了一个新的调度程序portlet
  2. 在Developer Studio中,我点击了File - > New - > Liferay Project
  3. 作为“Liferay Portal Runtime”环境,我使用了我的门户网站:liferay-portal-tomcat-6.1-ee-ga3-sp5-20160201142343123.zip
  4. 在我的项目中,我点击了文件 - >新建 - > Liferay portlet并接受了默认设置(注意:我会避免在portlet或类名中使用' - '等字符)
  5. 然后我在我的项目中创建了一个新类'SchedulerLiferay',它看起来与你的相同

:

import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
public class SchedulerLiferay implements MessageListener {
    @Override
    public void receive(Message arg0) throws MessageListenerException {
    System.out.println("hello world");
    }
}

6.然后我像这样修改了liferay-portlet.xml:

<?xml version="1.0"?>
    <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd">

    <liferay-portlet-app>
        <portlet>
            <portlet-name>quartz-demo</portlet-name>
            <icon>/icon.png</icon>
            <scheduler-entry> 
                 <scheduler-event-listener-class>com.test.SchedulerLiferay</scheduler-event-listener-class> 
                 <trigger> 
                   <simple> 
                      <simple-trigger-value>5</simple-trigger-value>  
                      <time-unit>second</time-unit>   
                   </simple> 
                 </trigger> 
            </scheduler-entry>  
            <header-portlet-css>/css/main.css</header-portlet-css>
            <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
            <css-class-wrapper>quartz-demo-portlet</css-class-wrapper>
        </portlet>
        <portlet>
            <portlet-name>quartzdemo</portlet-name>
            <icon>/icon.png</icon>
            <instanceable>false</instanceable>
            <header-portlet-css>/css/main.css</header-portlet-css>
            <footer-portlet-javascript>
                /js/main.js
            </footer-portlet-javascript>
            <css-class-wrapper>quartzdemo-portlet</css-class-wrapper>
        </portlet>
        <role-mapper>
            <role-name>administrator</role-name>
            <role-link>Administrator</role-link>
        </role-mapper>
        <role-mapper>
            <role-name>guest</role-name>
            <role-link>Guest</role-link>
        </role-mapper>
        <role-mapper>
            <role-name>power-user</role-name>
            <role-link>Power User</role-link>
        </role-mapper>
        <role-mapper>
            <role-name>user</role-name>
            <role-link>User</role-link>
        </role-mapper>
    </liferay-portlet-app>

注意:我认为'简单触发'和'cron'不应该一起使用。这可能是它无法在您身边工作的原因。

  1. 我通过在portlet-class标记中定义我的类名来修改我的portlet.xml:com.test.QuartzDemo
  2. 如果你遇到这个问题:“排队QuartzDemo-portlet for deploy,因为它缺少portal-compat-hook”解决方案在这里描述:https://community.liferay.com/forums/-/message_boards/message/27738413
  3. 我部署了我的portlet此时你可能会遇到ecj.jar问题,可以通过以下方式解决: 转到窗口>首选项> Ant>运行时>类路径 添加外部jar(例如:E:\ liferayliferay-plugins-sdk-6.1.0-ce-ga1-20120106155615760 \ lib \ ecj.jar),即位于插件sdk文件夹下的ecj.jar。 现在重新运行构建脚本

确保使用1.6兼容的JVM。

在第6步,我们需要特别小心,用正确的类名填写此标记:com.test.SchedulerLiferay

你可以在这里找到portlet的源代码:https://github.com/peterpetrekanics/QuartzDemo-portlet-6130

如果您有任何问题,请随时在此处发布, 最好的祝福, 彼得

© www.soinside.com 2019 - 2024. All rights reserved.