当前位置: 首页 > 知识库问答 >
问题:

石英和JPA EJB

洪博艺
2023-03-14

谢谢你的帮助!

@ManagedBean
@ApplicationScoped
public class JobDatasource implements Job {

    @EJB
    JobContent jc;
    private String TEXT = "V1";

    public JobDatasource() {
        System.out.println("Job Bean created");
    }

    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        jc.doStuff();
    }

    @PostConstruct
    public void startJob() throws SchedulerException {
        System.out.println("Und los gehts!");
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        JobDetail jobdataSourceCheck = JobBuilder.newJob(JobDatasource.class)
                .withIdentity("DataSourceCheck", "group1").build();

        Trigger trigger = newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()
                .withSchedule(
                        simpleSchedule().withIntervalInSeconds(10)
                                .repeatForever()).build();
        sched.scheduleJob(jobdataSourceCheck, trigger);
        jc.doStuff();
        sched.start();
    }

    public String getTEXT() {
        return TEXT;
    }

    public void setTEXT(String tEXT) {
        TEXT = tEXT;
    }

}

@Stateless
public class JobContent {
    @EJB
    ITestDataDao dao;

    public void doStuff() {
        Set<TestData> testdata = createTestData();
        for (TestData td : testdata) {
            dao.saveData(td);
        }

    }

    private Set<TestData> createTestData() {
        Set<TestData> testData = new HashSet<TestData>();
        for (int i = 0; i < 500; i++) {
            TestData td = new TestData();
            td.setRandomText("TESTDATA");
            testData.add(td);
        }
        return testData;
    }
}

共有1个答案

芮祺
2023-03-14

它不会被注入,因为您使用的是Quartz而不是EJB来启动任务。

你可以做两件事:

>

  • 使用RMI来获取EJB。您可以使用服务定位器模式并在任务中应用它:

    您可以使用EJB计时器来启动任务,而不是Quartz。

    @schedule(dayofweek=“mon,wed”,hour=“8”,minute=“30”)public void yourTask(){system.out.println(“it alive”);}

    可以说one选项可以应用于任何EJB版本,但是您需要使用查找并注意EJB名称。使用选项二,您可以使用EJB来启动任务并访问所有EJB特性,但您需要EJB3.1。

  •  类似资料:
    • 问题内容: 有没有办法将石英作为基础调度程序? 我可以想到两件事,但都需要做一些工作: 创建一个将解析注解并注册石英作业的自定义 实施委托石英的工具。 问题是:以上两个选项是否已经编写过,是否还有另一个选项? 问题答案: 我最终制作了自己的弹簧石英“桥”。我打算建议将其作为春季的改进。 首先,我创建了一个新注释,该注释将放置在实现quartz Job接口的类上: (请注意原型作用域-石英假定每个作

    • 所以我有一个技术挑战我需要帮助。 一个大型项目正在使用Quartz调度程序调度一个作业,使其在每晚9点运行。 然而,调度的作业需要从属性文件中读取值,使用自动布线获取一些bean等。 当我使用@autowired和@value注释时,我发现这些值为空。 问题是Quartz在spring容器外部使用创建JobDetail对象。可以在下面的代码中看到。 因此,包装的对象无法使用Spring访问属性文件

    • 问题内容: 似乎Quartz Scheduler每秒可以运行的作业数量受到限制。在我们的方案中,我们每秒大约有20个作业,可以进行24x7的启动,而石英可以很好地完成每秒10个作业(对于JDBC支持的JobStore,它具有100个石英线程和100个数据库连接池大小),但是,当我们将其增加到20个时每秒的作业数量,石英变得非常非常慢,与实际的计划时间相比,石英的触发作业非常晚,从而导致许多失火,并

    • 我正在使用带有TerracottaJobStore Class的石英调度程序来每5分钟调度一次作业。我的工作配置是: 组织。石英jobStore。class=org。陶土。石英EnterpriseTerracottaJobStore组织。石英jobStore。tcconfig=localhost:9510 org。石英线程池。线程数=25 我有一个附加了5000个触发器的单个作业,然后该作业被安排

    • 我尝试在Quartz调度程序上创建集成测试。 我有两个表:事件和任务。调度程序通过cron触发器按事件创建任务。 首先,我得到例外: 无法初始化代理-没有会话 我在Spring Data JPA中使用这个答案-“无法初始化代理-没有会话”-方法标记为事务性,并添加到我的测试配置。所以现在我又遇到了另一个问题——我的测试有时是正确的,但更常见的是它失败了,因为它只创建了一个任务。 由Quartz执行

    • 我正在使用和Quartz Grails插件2.0.13构建一个应用程序,有一些旧作业我将它们迁移到我的新应用程序,它们以前工作正常,但是现在我在尝试从页面手动运行它们时收到以下错误,在创建新作业并尝试手动运行它后也会收到相同的错误。知道可能导致此错误的原因以及如何解决它吗? 以下是我的工作示例: