Java 如何在部署描述符中只定义调度程序属性,而不是整个bean?
我有以下bean:Java 如何在部署描述符中只定义调度程序属性,而不是整个bean?,java,jakarta-ee,ejb,Java,Jakarta Ee,Ejb,我有以下bean: @Stateless public class NewSessionBean { public void myJob() { System.out.println("RUN"); } } 我希望我的作业每10秒运行一次,所以我有一个部署描述符: <ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" version = "3.1" xmlns:xsi = "http://www
@Stateless
public class NewSessionBean {
public void myJob() {
System.out.println("RUN");
}
}
我希望我的作业每10秒运行一次,所以我有一个部署描述符:
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"
version = "3.1"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<enterprise-beans>
<session>
<ejb-name>NewSessionBean</ejb-name>
<ejb-class>org.test.NewSessionBean</ejb-class>
<session-type>Stateless</session-type>
<timer>
<schedule>
<second>*/10</second>
<minute>*</minute>
<hour>*</hour>
<month>*</month>
<year>*</year>
</schedule>
<timeout-method>
<method-name>myJob</method-name>
</timeout-method>
</timer>
</session>
</enterprise-beans>
</ejb-jar>
新闻豆
org.test.NewSessionBean
无国籍
*/10
*
*
*
*
我的工作
它是有效的
但我只想声明部署描述符中的计时器,而不是整个bean,这样我就可以使用注释声明所有内容并对计划进行参数化
如果我删除ejb类或会话类型,我的应用程序将不会加载,因为DD缺少此信息
我是否可以仅覆盖计划程序的信息
编辑:我想将@schedule注释上的参数设置移到部署描述符上,这样我就可以在不需要重新编译/重新部署任何内容的情况下更改其值。EJB规范没有真正设置好,无法将注释与XML描述符混合并匹配。人们通常使用其中一种。你能解释一下为什么不想使用注释吗?@dcsohl谢谢你的评论:)我是JavaEE世界的新手,我认为部署描述符的一个伟大特性是覆盖注释的能力,无需重新部署即可进行更改。我希望使用DD,以便能够更改调度程序的值(分钟、小时等),而无需重新编译代码。您的示例应该按照规范的要求运行,我知道它可以在WebSphere Application Server上运行。您使用的是什么应用服务器?是的,它可以工作。但是我想删除bean的定义,只在dd中定义调度器