融合 OSGi 与 Java EE:JNDI 与远程服务的应用探索
1. 利用 JNDI 融合 OSGi 与 Java EE
1.1 JNDI 中 OSGi 服务的检索
在使用 JNDI 检索 OSGi 服务时,若希望获取单个服务,通常会返回服务 ID( service.id
属性)最低的那个。若要检索多个服务,可以使用 servicelist
路径,示例代码如下:
NamingEnumeration<Binding> bindings =
context.listBindings("osgi:servicelist/javax.sql.DataSource");
while (bindings.hasMore()) {
Binding bd = (Binding) bindings.next();
System.out.println("Name = " + bd.getName() + "Class = " +
bd.getClassName() + ", Object = " + bd.getObject());
}
当使用 servicelist
时,JNDI 查找会返回一个 Context
对象。可以列出该 Context
对象的绑定,每个绑定代表一个 OSGi 服务。具体来说, Binding.getName()
返回服务 ID(例如,1