Я хочу создать что-то вроде переменных BundleLocal , точно так же, как переменные ThreadLocal , но вместо того, чтобы искать их по Thread.currentThread()
Мне нужно искать их по контексту пакета .
Дело в том, что у меня есть плагин фреймворка 'F' и другие плагины 'A', 'B' и т. Д., Использующие этот фреймворк. Каркас содержит синглтон, который я хочу реорганизовать таким образом, чтобы у меня было одноэлементного экземпляра на пакет . MySingleton.getInstance()
будет затем создавать / возвращать выделенный экземпляр для каждого плагина. Проблема в том, что в MySingleton.getInstance()
мне нужно выяснить, какой из плагинов ('A', 'B', ..) вызвал этот метод.
Я мог бы сделать это с помощью хака, получив стек вызовов с помощью
StackTraceElement[] ste=new Throwable().getStackTrace();
и затем запрос контекста пакета по классам для каждого элемента:
org.osgi.framework.FrameworkUtil.getBundle(Class c).getBundleContext()
но искренне надеемся, что существует лучший способ получить контекст пакета или идентификатор пакета из фреймворка 'F'.
Какой-нибудь совет, как сделать это более элегантно?