小编Dul*_*ren的帖子

避免在 Wildfly 内部运行的 EJB 计划中的计时器重叠

我在 Wildfly 10.10 中运行的单例 EJB 中有一个 EJB 计时器计划:

@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class MySingletonBean {

    public method() {
        //uses synchronization primitives to fine control the concurrent access
    }

    @Schedule(hour = "*", minute = "*", second = "*", persistent = false)
    public void update() {
        //each 120 seconds update method timeouts and the overlapping/log message occurs
    }
}
Run Code Online (Sandbox Code Playgroud)

update() 模型中的任务运行流畅,大部分时间不到 1 秒。然而每2分钟,由于业务需要,该​​方法超时花费超过1秒。

问题:

每 2 分钟wildfly 输出一条日志消息,如:

(EJB 默认值 - 1)WFLYEJB0043:定时器 [] 的先前执行仍在进行中,跳过此重叠的计划执行:

我很清楚这条消息的含义:在下一次执行开始之前前一个计时器没有完成并且发生重叠。

此外,重叠会在正在更新的基础数据结构中引发并发问题。

我的问题:

1 - 如何在计时器缓慢的情况下放弃下一个计划以避免重叠/并发更新?

2 - …

java timer ejb-3.2 wildfly-10 jakarta-ee

6
推荐指数
1
解决办法
2280
查看次数

G++ 引发编译错误而不是缩小转换的警告

我想获得编译错误而不是此代码的警告:

#include <iostream>

int main(int argc, char ** argv)
{
    float a = 1.3f;
    int b = 2.0 * a;

    std::cout << b << "\n";
}
Run Code Online (Sandbox Code Playgroud)

如果我编译它:

g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

我没有错误。

但是如果我编译相同的代码:

g++ test.cpp -o test -Wconversion
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

test.cpp: In function ‘int main(int, char**)’:
test.cpp:6:17: warning: conversion from ‘double’ to ‘int’ may change value [-Wfloat-conversion]
6 |     int b = 2.0 * a;
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方式来获得编译错误,而不是警告仅适用于这种特定类型的警告。

Obs.1:-Werror可以使所有警告变成错误,但这不是我要找的

Obs.2:我正在使用 g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

c++ g++ narrowing

1
推荐指数
1
解决办法
51
查看次数

标签 统计

c++ ×1

ejb-3.2 ×1

g++ ×1

jakarta-ee ×1

java ×1

narrowing ×1

timer ×1

wildfly-10 ×1