ExtrasUtilities.bridgeServiceLocator()
通过将应用程序ServiceLocator桥接到Jersey
ServiceLocator,我们正在使用来将在一个ServiceLocator中创建的现有Singleton应用程序服务注入Jersey RESTful
Web服务。
但是,没有使用“外部”定位器中存在的Singletons-
将每个服务注入到Jersey服务中后都会再次创建它们。似乎Singleton仅在ServiceLocator的范围内可见,即使已桥接也是如此。
这是预期的行为吗?如果是这样,是否有任何方法可以更改此行为,并在桥接的ServiceLocators中具有真正的Singleton?
我已将问题提取到一组测试类中,这些类说明了以下几点:
public class BridgedServiceTest
{
private ServiceLocator _outerServiceLocator;
private ServiceLocator _innerServiceLocator;
@Test
public void testBridgedInnerServiceOK() throws Exception
{
ServiceLocatorFactory serviceLocatorFactory = ServiceLocatorFactory.getInstance();
_outerServiceLocator = serviceLocatorFactory.create("Outer");
ServiceLocatorUtilities.addClasses(_outerServiceLocator, SingletonServiceImpl.class);
_innerServiceLocator = serviceLocatorFactory.create("Inner");
ExtrasUtilities.bridgeServiceLocator(_innerServiceLocator, _outerServiceLocator);
final Client client1 = new Client();
_outerServiceLocator.inject(client1);
assertThat(SingletonServiceImpl.instanceCount.get(), Matchers.is(1));
client1.test();
final Client client2 = new Client();
_innerServiceLocator.inject(client2);
// next line fails as instance count is 2
assertThat(SingletonServiceImpl.instanceCount.get(), Matchers.is(1));
client2.test();
}
@After
public void tearDown() throws Exception
{
_innerServiceLocator.shutdown();
_outerServiceLocator.shutdown();
}
}
@Contract
public interface SingletonService
{
void fulfil();
}
@Service
public class SingletonServiceImpl implements SingletonService
{
public static AtomicInteger instanceCount = new AtomicInteger();
@PostConstruct
public void postConstruct()
{
instanceCount.incrementAndGet();
}
@Override
public void fulfil()
{
System.out.println("Contract Fulfilled.");
}
}
public class Client
{
@Inject
private SingletonService _singletonService;
public void test()
{
_singletonService.fulfil();
}
public SingletonService getSingletonService()
{
return _singletonService;
}
}
ServiceLocator桥中有一个错误已修复。该修复程序将在hk2 2.5.0-b07或更高版本中!
我们正在使用using通过将app ServiceLocator桥接到Jersey ServiceLocator中,将在一个ServiceLocator中创建的现有单例应用程序服务注入到Jersey RESTful Web服务中。 然而,存在于“外部”定位器中的单例并没有被使用--每个服务都是在注入到Jersey服务中时再次创建的。单例似乎只在ServiceLocator的范围内可见,即使它是桥接
我们必须通过配置用户名、密码和公钥,使用代理服务器internet.ford.com从应用程序连接到外部SFTP服务器。 预期与外部SFTP服务器的连接成功。
问题内容: 在阅读协变量替代时,我发现一个非常奇怪的事实, 使用桥接技术实现协方差方法覆盖。它还说此功能是在java5及更高版本中实现的。(我认为这是因为从java5引入了泛型) 怎么发生的。请帮我举个例子。 问题答案: 考虑一个例子: 到目前为止看起来不错。但是,在擦除类型之后,接口松开了它的泛型类型,并将该类型替换为上限。因此,接口和类如下所示: 现在,这就是问题所在。擦除后的方法实际上不是的
我想使用实现以下目标:拥有一个不断接收和写入数据的单例开放套接字,asyncrhon! 这意味着我必须打开一个不断从单个套接字读取的套接字,分派每个消息进行异步处理,并通过套接字异步返回响应。 如何实现这种异步模式? 特别是:如何使用序列化器/反序列化器?据我所知,序列化程序只在新的套接字连接上调用,所以在我的情况下,只在第一条消息的开头调用一次?
问题内容: 早上好,我目前正在开发一个公开Web服务接口的Java Web应用程序。为了将全局对象保留在内存中,我将以下类用作Singleton: 我使用上面的类是为了使Web服务的所有线程都具有相同的HashMap实例。维护SingletonMap对象的Web服务类如下: 我拥有方法getCouponMapCreationTime()的原因是要检查Web服务的所有线程是否正在访问同一对象。以上方