Свойства загрузчика классов - PullRequest
0 голосов
/ 12 апреля 2011

Мы разработали контейнер приложения, который создает новый загрузчик классов для каждого независимого приложения, работающего в контейнере. Когда вызывается конкретное приложение, загрузчик классов контекста потока устанавливается соответствующим образом с помощью загрузчика классов приложения.

Избегая использования ThreadLocal, возможно ли хранить свойства в загрузчике классов, чтобы вы могли получить, в этом случае, специфичные для приложения свойства непосредственно из загрузчика классов.

Например, я хочу иметь возможность каким-то образом сохранить, а затем получить свойства при доступе к контекстному загрузчику классов:

Thread.currentThread().getContextClassLoader()

Возможно ли это? Или ThreadLocal - единственно возможный вариант?

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Вместо того, чтобы приводить загрузчик классов, он может загрузить пользовательский класс свойств, например,

public class AppClassloaderProperties
{
   static Properties appProperties = loadAppProperties();

   static private Properties loadAppProperties() {
        // fetch app properties - does not need to be thread-safe, since each invocation
        // of this method will be on a different .class instance
   }

   static public final Properties getApplicationProperties() {
      // this method should be thread-safe, returning the immutable properties is simplest
      return new Properties(appProperteis);   
   }
}

Поскольку этот класс загружается как часть загрузчика классов приложения, новый класс предоставляется для каждого приложения.Класс AppClassloaderProperties для каждого приложения будет отличаться.Каждое приложение может затем получить свои свойства загрузчика классов, вызывая

Properties props = AppClassloaderProperties.getApplicationProperties();
// use the properties

Нет необходимости в локальных потоках или приведении текущего загрузчика классов.

0 голосов
/ 12 апреля 2011

Как насчет создания подкласса загрузчика классов контекста, расширения его необходимой поддержкой свойств, а затем просто приведения Thread.currentThread (). GetContextClassLoader ()?

...