У меня есть этот пользовательский ресурс JNDI, настроенный на моем сервере Glassfish:
У меня также развернуто веб-приложение, и в какой-то момент я хочу получить значение, настроенное для дополнительного свойства «версия» моего пользовательского ресурса.
Мой заводской класс такой:
public class TestCRFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) {
if (obj instanceof Reference) {
Reference ref = (Reference) obj;
Enumeration<RefAddr> addrs = ref.getAll();
while (addrs.hasMoreElements()) {
RefAddr addr = addrs.nextElement();
if (addr.getType().equals("version")) {
String version = (String) addr.getContent();
System.out.println(version); // it shows me "1"
}
}
}
}
}
Если я ищу объект:
Context context = new InitialContext();
Object obj = context.lookup("test/TestCR");
Мой код работает, и я могу без проблем получить свойство «версия» в фабричном классе.
Но теперь я хочу получить свойство «версия» без поиска объекта и вызвать фабричный класс. Я просто хочу сделать что-то подобное через MBeanServer:
import javax.management.MBeanServer;
import java.lang.management.ManagementFactory;
import javax.management.ObjectName;
...
boolean existsObject = false;
String name = "amx:pp=/domain/resources,type=custom-resource,name=test/TestCR";
ObjectName objName = new ObjectName(name);
try {
MBeanServer mbean = ManagementFactory.getPlatformMBeanServer();
existsObject = mbean.getObjectInstance(objName) != null; // this line works
if (existsObject) {
Object attr = mbean.getAttribute(objName, "version"); // this line doesn't work. it doesn't give me the "version" property I want.
}
} catch (Throwable e) {
existsObject = false;
}
У меня вопрос: что я делаю не так? Должен ли я помещать имя свойства в конец переменной name
? Или что-то вроде того?
JNDI
. Пожалуйста, покажите это. Также, пожалуйста, опишите точную проблему, с которой вы столкнулись. - person PM 77-1   schedule 31.12.2013