Как приложение, которое использует SpringName SimpleNamingContextBuilder, узнает, что оно ищет ресурсы в своем каталоге? - PullRequest
6 голосов
/ 16 апреля 2011

Как приложение, которое использует SimpleNamingContextBuilder Spring в качестве своего JNDI провайдера, узнает, что оно ищет ресурсы в своем каталоге?Что связывает приложение с каталогом имен Spring?Например, как бин JndiObjectFactoryBean в этом предыдущем ответе знает, как найти ресурс my-db в каталоге Spring?Разве JndiObjectFactoryBean не требуется контекстная среда со свойством java.naming.factory.initial, установленным для некоторой реализации интерфейса InitialContextFactory?Какое значение должно быть java.naming.factory.initial при использовании SimpleNamingContextBuilder в качестве поставщика JNDI?

Ответы [ 2 ]

13 голосов
/ 19 апреля 2011

В двух словах: если вы хотите смоделировать дерево JNDI с помощью макета InitialContext в модульных тестах, можно использовать SimpleNamingContextBuilder.Я создал экземпляр SimpleNamingContextBuildeit в методе запуска при запуске и успешно создал InitialContext в памяти.например, в весеннем тестовом классе ..

@BeforeClass
    public static void setupJndi() throws Exception {
    SimpleNamingContextBuilder.emptyActivatedContextBuilder();
    Context context = new InitialContext();
    context.bind("java:comp/env/jms/ConnectionFactory",myJmsConnectionFactory);
   }
8 голосов
/ 17 апреля 2011

Класс времени выполнения Java NamingManager служит связующим звеном между приложением Java и его каталогом имен.Когда SimpleNamingContextBuilder активирует , он устанавливается на статический элемент InitialContextFactoryBuilder в NamingManager.Когда приложение создает InitialContext для получения контекста JNDI, класс InitialContext делегирует NamingManager, который, в свою очередь, запрашивает IntialContextFactoryBuilder (в данном случае SimpleNamingContextBuilder) для создания IntialContextFactory, что в конечном итоге создает InitialContext.

JndiObjectFactoryBean, не нуждается в явной контекстной среде, поскольку SimpleNamingContextBuilder предоставляет InitialContextFactory для NamingManager и JndiObjectFactoryBean использует NamingManager для получения своих ресурсов.Таким образом, в предыдущем ответе JndiObjectFactoryBean «знает», что искать в каталоге имен Spring для ресурса my-db, поскольку SimpleNamingContextBuilder зарекомендовал себя как поставщик JNDI в NamingManager.

...