Tomcat против Weblogic JNDI Поиск

java tomcat java-ee weblogic jndi

46171 просмотра

8 ответа

Серверы Weblogic, которые мы используем, были настроены для разрешения имен источников данных JNDI, таких как «appds».

Для разработки (localhost) мы могли бы запустить Tomcat, и когда он объявлен в разделе файла server.xml, Tomcat повесит источники данных JNDI на «java: comp / env / jdbc / *» в дереве JNDI.

Проблема: в Weblogic поиском JNDI является «appds», а в Tomcat кажется, что я должен предоставить формальный «java: comp / env / jdbc / appds». Я боюсь, что версия Tomcat является неявным стандартом, но, к сожалению, я не могу изменить конфигурацию Weblogic ... так что это означает, что мы получаем два разных конфигурационных файла Spring (мы используем Spring 2.5) для облегчения работы в различных средах.

Есть ли элегантный способ решения этой проблемы. Могу ли я искать имена JNDI непосредственно в Tomcat? Может ли Spring взять имя и посмотреть в обоих местах? Поиски или предложения Google будут отличными.

Автор: Luther Baker Источник Размещён: 12.11.2019 09:18

Ответы (8)


11 плюса

Решение

JndiLocatorSupportимеет свойство resourceRef. При установке этого true префикс «java: comp / env /» будет добавлен автоматически. Поэтому я считаю, что было бы правильно дифференцировать этот параметр при переходе с Tomcat на Weblogic.

Автор: martsraits Размещён: 14.01.2009 07:37

19 плюса

Как использовать одно имя JNDI в вашем веб-приложении

Я боролся с этим в течение нескольких месяцев сам. Лучшее решение - сделать ваше приложение переносимым, чтобы у вас было одинаковое имя JNDI как в Tomcat, так и в Weblogic.

Чтобы сделать это, вы изменяете свое web.xmlи, spring-beans.xmlуказывая на одно имя jndi, и предоставляете сопоставление каждому jndi-имени конкретного поставщика.

Я разместил каждый файл ниже.

Тебе нужно:

  • <resource-ref />Запись в web.xml для вашего приложения , чтобы использовать одно имя
  • Файл WEB-INF/weblogic.xmlдля сопоставления вашего имени jndi с ресурсом, управляемым WebLogic.
  • Файл META-INF/context.xmlдля сопоставления вашего имени jndi с ресурсом, управляемым Tomcat.
    • Это может быть либо в установке Tomcat, либо в вашем приложении.

Как правило, предпочитают иметь свои имена JNDI в вашем приложении , как jdbc/MyDataSourceи jms/ConnFactoryи избежать предваряя их java:comp/env/.

Кроме того, источники данных и фабрики соединений лучше всего управляются контейнером и используются с JNDI. Это распространенная ошибка Instantiate пулов соединений базы данных в приложении .

весна

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup jndi-name="jdbc/appds"
                 id="dataSource" />
</beans>

web.xml

<resource-ref>
    <description>My data source</description>
    <res-ref-name>jdbc/appds</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

weblogic.xml

<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">

<resource-description>
    <jndi-name>appds</jndi-name>
    <res-ref-name>jdbc/appds</res-ref-name>
</resource-description>
</weblogic-web-app>

META-INF / context.xml (для Tomcat)

<Context>
    <ResourceLink global="jdbc/appds" name="jdbc/appds" type="javax.sql.DataSource"/>
</Context>
Автор: Leonel Размещён: 24.11.2010 06:17

2 плюса

Я справился с трюком с Tomcat и WebLogic, используя Spring. Вот описание того, как это работает для меня.

Автор: duffymo Размещён: 19.06.2009 10:23

2 плюса

Следующий конфиг работает в Tomcat и Weblogic для меня.

Весной:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
   <!-- This will prepend 'java:comp/env/' for Tomcat, but still fall back to the short name for Weblogic -->
   <property name="resourceRef" value="true" /> 
   <property name="jndiName" value="jdbc/AgriShare" />
</bean>

В консоли администратора Weblogic создайте ресурс JDBC с именем jdbc/AgriShare. В разделе «Цели» убедитесь, что вы направили данные на сервер, на котором вы используете приложение! , Этот конкретный момент стоил мне времени только сейчас ...

Автор: Val Blant Размещён: 09.08.2011 07:23

1 плюс

Как насчет переменной среды? Задайте разработчикам машины с именем tomcat и производство с именем Weblogic. Вы даже можете настроить свой код на использование кода по умолчанию (WebLogic) в случае, если переменная не существует.

Автор: Marcio Aguiar Размещён: 07.09.2008 05:18

1 плюс

Как вы ссылаетесь на ресурс весной?

Вот что мы имеем для кота:

контекст:

<Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="
JMS Connection Factory"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="tcp://localhost:61615" brokerName="StandaloneAc
tiveMQBroker"/>

весна:

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<jee:jndi-lookup jndi-name="jms/ConnectionFactory" id="connectionFactory" resource-ref="true"
                         expected-type="javax.jms.ConnectionFactory" lookup-on-startup="false"/>

Пространство имен Джи происходит из:

http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd

Автор: harmanjd Размещён: 14.01.2009 08:34

1 плюс

Настройка DataSource в самом приложении не такая уж и безумная :) Я бы сказал, что это даже обязательно, если приложение предназначено для развертывания в сетке. Река, GigaSpaces или аналогичные.

Примечание. Я не говорю, что параметры подключения должны быть жестко заданы внутри WAR, их необходимо указывать во время развертывания / выполнения. Это упрощает управление экземплярами облака, поскольку их можно настроить только на месте.

Настройка ресурсов в контейнере имеет смысл, только если там развернуто несколько приложений, и они могут использовать общий ресурс.

Опять же, в облачных типах развертываний существует только одно приложение на экземпляр контейнера сервлета.

Автор: Konstantin Размещён: 27.01.2011 07:21

0 плюса

В моем приложении также была похожая проблема, и вот как я ее решил:

1) WEB-INF/classes/application.propertiesсодержит запись:

ds.jndi = Java: комп / ENV / JDBC / ВЗР

2) На компьютере WLS у меня есть запись в /etc/sysenvфайле:

ds.jndi = wlsds

3) Я сконфигурировал spring для поиска JNDI по свойству ${ds.jndi}, используя PropertyPlaceholderConfigurerbean-компонент с classpath:application.propertiesи file:/etc/sysenvкак местоположения. Я также установил ignoreResourceNotFoundдля trueтак, чтобы разработчики не должны были /etc/sysenvна своих машинах.

4) Я запустил интеграционный тест с использованием Cargo + Jetty и не смог правильно настроить среду JNDI. Так что у меня BasicDataSourceнастроен запасной вариант с использованием defaultObjectсвойства JndiObjectFactoryBean.

Автор: Binil Thomas Размещён: 08.09.2008 08:07
Вопросы из категории :
32x32