Java 如何在ejb中同步方法的某些部分

Java 如何在ejb中同步方法的某些部分,java,jakarta-ee,synchronization,ejb,jboss6.x,Java,Jakarta Ee,Synchronization,Ejb,Jboss6.x,我有一个部署在jboss应用服务器中的无状态ejb,我必须同步部分代码 我曾经 synchronized(this) { .... } 后来我意识到代码将失败,因为容器创建了一个ejb池,而我的代码将无法按预期工作 所以我想出了一个主意,创建一个静态的final对象,并将引用传递给synchronized块。下面是代码片段 private static final Object object = new Object(); synchronized(object) { ..... } 我想

我有一个部署在jboss应用服务器中的无状态ejb,我必须同步部分代码

我曾经

synchronized(this) {
....
}
后来我意识到代码将失败,因为容器创建了一个ejb池,而我的代码将无法按预期工作

所以我想出了一个主意,创建一个静态的final对象,并将引用传递给synchronized块。下面是代码片段

private static final Object object = new Object();

synchronized(object) {
.....
}

我想知道代码正确到什么程度

为了在JBoss下的EJB池中同步无状态EJB,必须使用SingletonEJB,在其中可以使用syncronized块

使用EJB3.1,您可以使用@Singleton注释:

@Singleton

@Remote
@RemoteBinding(jndiBinding = "SingletonBean")
@Startup

public class SingletonBean { ....}
尽管如此,对于EJB3,您必须自己配置Jboss才能拥有一个单例EJB


请参阅:

在不了解需求的情况下,没有人能够真正回答您关于正确性的问题。在单个ojbect上进行同步(就像您所做的那样)可以确保只有一个线程能够执行该同步块。如果这是你想要的,那么它是正确的。但我非常怀疑这是否是您真正需要的。@Seelenvirtuose是的,我只想知道使用静态final对象是否只为一个线程授予对块的访问权限。谢谢。:)