WildFly 命名子系统:如何绑定到 java.util.Properties 对象
WildFly naming subsystem: how to bind to a java.util.Properties object
我打算在 WildFly 应用程序服务器中定义类型为 java.util.Properties
的 JNDI 属性,以便从我的应用程序中读取它。
如in the an older WildFly documentation所述,可以创建对象工厂类型的全局绑定。在这个例子中是一个可选的 environment
标签来保存多个 key/value 对。这将准确映射我在读取 JNDI 资源时获得 java.util.Properties
的愿望。
问题是天气已经有 javax.naming.spi.ObjectFactory
的实现来从对象工厂绑定中创建一个 java.util.Properties
对象,还是我需要自己实现它并将它作为一个单独的安装模块(如 mastertheboss.com/... 中所述)?
好的,我自己实现了它。
package com.myorg.wildfly.objectfactory;
...
public class WildFlyPropertiesObjectFactory implements ObjectFactory
{
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception
{
Properties p = new Properties();
if(environment != null)
{
Set<?> keySet = environment.keySet();
for(Object key : keySet)
{
p.put(key, environment.get(key));
}
}
return p;
}
}
清理并将这个 class 构建到 JAR 文件中 wildfly-properties-objetfactory.jar
通过jboss-cli.sh
添加模块
module add --name=my.jndi.propertyreader --resource=wildfly-properties-objetfactory.jar --dependencies=javax.api
通过jboss-cli.sh
创建命名绑定
/subsystem=nameing/binding=java\:\/my_super_cool_jndi_name:add(binding-type=object-factory, module=my.jndi.propertyreader, class=com.myorg.wildfly.objectfactory.WildFlyPropertiesObjectFactory, environment=[key1=value1, key2=value2])
在我的应用程序中,我可以通过
在 CDI bean 中访问它
public void test() {
Properties p = (Properties) new InitialContext().lookup("java:/my_super_cool_jndi_name");
System.out.printf("Properties: %s%n", p);
}
或如the mentioned link所示将其作为直接依赖注入@Resource(lookup = "java:/my_super_cool_jndi_name") Properties p;
很有魅力。
我打算在 WildFly 应用程序服务器中定义类型为 java.util.Properties
的 JNDI 属性,以便从我的应用程序中读取它。
如in the an older WildFly documentation所述,可以创建对象工厂类型的全局绑定。在这个例子中是一个可选的 environment
标签来保存多个 key/value 对。这将准确映射我在读取 JNDI 资源时获得 java.util.Properties
的愿望。
问题是天气已经有 javax.naming.spi.ObjectFactory
的实现来从对象工厂绑定中创建一个 java.util.Properties
对象,还是我需要自己实现它并将它作为一个单独的安装模块(如 mastertheboss.com/... 中所述)?
好的,我自己实现了它。
package com.myorg.wildfly.objectfactory;
...
public class WildFlyPropertiesObjectFactory implements ObjectFactory
{
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception
{
Properties p = new Properties();
if(environment != null)
{
Set<?> keySet = environment.keySet();
for(Object key : keySet)
{
p.put(key, environment.get(key));
}
}
return p;
}
}
清理并将这个 class 构建到 JAR 文件中 wildfly-properties-objetfactory.jar
通过jboss-cli.sh
添加模块module add --name=my.jndi.propertyreader --resource=wildfly-properties-objetfactory.jar --dependencies=javax.api
通过jboss-cli.sh
创建命名绑定/subsystem=nameing/binding=java\:\/my_super_cool_jndi_name:add(binding-type=object-factory, module=my.jndi.propertyreader, class=com.myorg.wildfly.objectfactory.WildFlyPropertiesObjectFactory, environment=[key1=value1, key2=value2])
在我的应用程序中,我可以通过
在 CDI bean 中访问它public void test() {
Properties p = (Properties) new InitialContext().lookup("java:/my_super_cool_jndi_name");
System.out.printf("Properties: %s%n", p);
}
或如the mentioned link所示将其作为直接依赖注入@Resource(lookup = "java:/my_super_cool_jndi_name") Properties p;
很有魅力。