对于拥有ejb经验的人来说,这可能是一个愚蠢的问题。
我想动态地读取和更改我的其中一个通过@Schedule
注释使用Java EE调度程序的EJB
Bean的分钟参数。有人知道如何在运行时执行此操作,而不是像在下面的类中对其进行硬编码?如果我要以编程方式进行操作,是否仍可以使用@Schedule
注释?
@Schedule(dayOfWeek = "0-5", hour = "0/2", minute = "0/20", timezone = "America/Los_Angeles")
private void checkInventory() {
}
@Schedule
用于容器在部署期间创建的自动计时器。
另一方面,可以使用TimerService
它允许您在运行时定义何时@Timeout
应调用该方法。
这可能是您感兴趣的材料:Java EE 6教程-使用Timer
Service
。
编辑: 只是为了使这个答案更完整。如果这是一个问题, 那么 答案是否可能- 是的。
有一种方法可以更改由创建的自动计时器的参数@Schedule
。然而,这是非常 不寻常的 -它取消了自动计时器并创建了类似的程序化计时器:
// Automatic timer - run every 5 seconds
// It's a automatic (@Schedule) and programmatic (@Timeout) timer timeout method
// at the same time (which is UNUSUAL)
@Schedule(hour = "*", minute = "*", second = "*/5")
@Timeout
public void myScheduler(Timer timer) {
// This might be checked basing on i.e. timer.getInfo().
firstSchedule = ...
if (!firstSchedule) {
// ordinary code for the scheduler
} else {
// Get actual schedule expression.
// It's the first invocation, so it's equal to the one in @Schedule(...)
ScheduleExpression expr = timer.getSchedule();
// Your new expression from now on
expr.second("*/7");
// timers is TimerService object injected using @Resource TimerService.
// Create new timer based on modified expression.
timers.createCalendarTimer(expr);
// Cancel the timer created with @Schedule annotation.
timer.cancel();
}
}
再说一次-就我个人而言,我永远不会使用这样的代码,也永远不想在真实的项目中看到类似的东西:-)定时器是:
@Schedule
对值进行硬编码或在ejb-jar.xml中定义它们来创建的,问题内容: 我试图在注释中包含一条动态消息,该消息根据传递给它的其他变量中的值来更改文本的主体。我设置了默认消息,但是当设置了某个指示器时,我想显示其他消息。这可能吗? 这是我的注释- 这是注释使用的验证器类- 我最感兴趣的部分是读取的代码- 问题答案: 这是我能够执行此操作的方式-
问题内容: 而且我正在尝试更改方法注释,但是java.lang.reflect.Method不包含任何地图字段(例如“ annotations”)或方法(例如“ getDeclaredAnnotationMap”) 只有但是我可以用这个字节数组做什么? 那么,如何修改方法的注释呢? 编辑: 我创建了:http : //pastebin.com/T2rewcwU 但是,仅编辑此方法实例,如果取消注释
问题内容: 我想知道是否可以在运行时设置注释变量? 问题答案: 不,那不可能。 注释以常量值的形式存储在类文件中,并且无法在运行时进行计算。 您能做的最好的事情就是存储有关如何计算值的某种“指令”。 例如,您可以使用某种脚本语言存储一个简单的表达式,然后在读取注释值时执行该表达式,或者可以指定要获取真实值的调用方法的名称。
问题内容: 我正在使用EJB 3.1和jboss-eap-6.4,并且要为ejb调度程序的小时,分钟和秒设置一些动态参数,如下所示: 非参数代码-每5分钟的30秒运行一次: 上面的代码正确执行。 动态参数代码-应每5分钟30秒运行一次: 上面的代码执行不正确,通常每秒执行多次。 另外,我还阅读了其他一些对我没有帮助的问题: EJB3.x中@Schedule方法的动态参数 使用计时器服务-Jav
它已经编译好了(我无法控制源代码),并且是jvm启动时类路径的一部分。我希望能够在运行时将“some value”更改为其他的东西,这样以后的任何反射都将具有我的新值,而不是默认的“some value”。 这可能吗?如果是,怎么做?
我使用一个库,它提供了一个带有布尔参数的注释。默认设置为由库的作者设置。 不幸的是,在我几乎所有的用例中,我更喜欢使用的注释。为了实现所需的行为,我每次都使用而不是。这很容易出错,因为人们很容易忘记设置参数。 我想知道是否有一种方法可以简化事情,通过改变的参数的默认值,或者通过定义一个自定义的注释,其行为类似于,但不需要设置参数。 (在这个特定的情况下,库是lombok,但是这个问题可能与任何库提