Spring, URL внешнего поставщика JndiTemplate - PullRequest
4 голосов
/ 05 августа 2010

Мой проект требует загрузки фабрики начального контекста и URL-адреса провайдера из файла свойств. Вот моя весенняя конфигурация

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" lazy-init="true">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">${initial.context.factory}</prop>
            <prop key="java.naming.provider.url">${provider.url}</prop>
        </props>
    </property>
</bean>

<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true" depends-on="jndiTemplate">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>${queue.connection.factory}</value>
    </property>
</bean>

А вот как инициализируется мой контейнер Spring

    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    ppc.setProperties(ConfigManager.getProperties());
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    context.addBeanFactoryPostProcessor(ppc);
    context.refresh();

Инициализация QueueConnectionFactory вызывает исключение

Исключение в потоке "main" org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'jmsQueueConnectio nFactory ', определенный в ресурсе пути к классу [spring-config.xml]: сбой вызова метода init; Вложенное исключение - javax.naming.Com municationException [Исключением корня является java.net.ConnectException: http://maven.apache.org/ingestionservices-core: Нет известного действительного пор t для: 'По умолчанию [http]: http (http): null: -1: 192.168.50.160: -1'; Нет доступного маршрутизатора к месту назначения] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFa ctory.java:1412) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFact ory.java:519) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactor y.java:456) в org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:291) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222 ) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:288) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:281) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:281) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190) в org.springframework.context.support.AbstractApplicationContext.getBean (AbstractApplicationContext.java:1075) на com.quickplay.ingestionservices.poolmgr.PoolManager.initialize (PoolManager.java:143) на com.quickplay.ingestionservices.poolmgr.PoolManager. (PoolManager.java:56) на com.quickplay.ingestionservices.poolmgr.PoolManager.main (PoolManager.java:47)

Похоже, что свойство provider.url настроено неправильно. Это работает, если я жестко закодирую URL провайдера. Может кто-то указать, что происходит? Спасибо

1 Ответ

5 голосов
/ 05 августа 2010

изменить существующий файл config.xml

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:project.properties</value>
    </property>
</bean>


<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" lazy-init="true">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">${initial.context.factory}</prop>
            <prop key="java.naming.provider.url">${provider.url}</prop>
        </props>
    </property>
</bean>

<bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true" depends-on="jndiTemplate">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>${queue.connection.factory}</value>
    </property>
</bean>

создать файл свойств "project.properties", поместить в путь к классу

# jndiTemplate Info
queue.connection.factory="value..."
provider.url="value..."
initial.context.factory="value..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...