나는 클라이언트 귀 응용 프로그램에서 CDI는 @PostConstruct
콜백에서 원격 SLSB 조회를 수행하고, 얻어진 프록시 캐시 @ApplicationScoped
콩 다음과 같은 상황이있다 :Wildfly 8 : ejb 원격 프록시 스레드가 안전합니까?
@ApplicationScoped
@Typed({ ServiceInterface.class })
public class RemoteServiceProxy implements ServiceInterface
{
/**
* Remote service.
*/
private RemoteService remoteService;
/**
* Default constructor.
*/
public RemoteServiceProxy()
{
super();
}
/**
* PostConstruct callback.
*
* @throws RuntimeException
* Error while looking up remote proxy
*/
@PostConstruct
protected void onPostConstruct()
{
try
{
remoteService = serviceLocator.lookup(ActivityRemoteEntityService.class);
Properties jndiProps = new Properties();
jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProps.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProps.put("jboss.naming.client.ejb.context", "true");
Context context = new InitialContext(jndiProps);
remoteService = (RemoteService) context.lookup(
"application.backend/application.backend-service//RemoteServiceImpl!com.application.remote.RemoteService");
} catch (NamingException e)
{
throw new RuntimeException(e);
}
}
...
}
내가 알고 싶습니다을 경우 캐시 프록시에서 remoteService
필드는 스레드로부터 안전하므로 RemoteServiceProxy
에 @ApplicationScoped
이라는 주석을 달거나 호출 할 때마다 새로운 프록시 조회를 수행해야합니까? 또는 @Stateless
을 사용하는 것이 가장 좋습니다? 사전에
감사
답변을 주셔서 감사합니다, 그것은 의심스럽지 만 singleton bean (CDI ApplicationScoped)에 wildfly 프록시 참조를 저장하는 것이 안전합니다. 즉, 동시에 액세스되는 wildfly 프록시 구현은 thread-safe입니까? – landal79
응답에 더 많은 정보를 추가했습니다 –
동시성을 제어하는 @Singleton이 아니라 세션 빈입니다. 하나의 세션 빈 참조 (프록시) => 하나의 세션 빈 인스턴스 –