2016-04-29 6 views
0

Я пытаюсь настроить веб-приложения пула соединений 2 с использованием дескриптора контекста XML для двух отдельных путей и баз данных, но с тем же логическим кодом. Проблема заключается в том, что при использовании JNDI для поиска источника данных ресурсы переопределяются, когда причал загружает контекст, а приложения в конечном итоге используют одну и ту же базу данных. Вот моя конфигурация и код:Jetty - пул соединений для разных контекстов и базы данных, но тот же код поиска

Конфигурация для MyApp1.xml:

<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/myDataBase</Arg> 
    <Arg> 
     <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
     <Set name="Url">jdbc:mysql://host:3306/mydb</Set> 
     <Set name="User">...</Set> 
     <Set name="Password">...</Set> 
     </New> 
    </Arg> 
    </New> 

Конфигурация для MyApp2.xml

<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/myDataBase</Arg> 
    <Arg> 
     <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
     <Set name="Url">jdbc:mysql://host:3306/mydb-test2</Set> 
     <Set name="User">...</Set> 
     <Set name="Password">...</Set> 
     </New> 
    </Arg> 
    </New> 

код, используемый в приложениях:

public class MyDb { 
... 

static { 
    try { 
    datasource = (DataSource) new InitialContext().lookup("jdbc/myDataBase"); 

    } catch (NamingException e) { 
    // ... 
    } 
... 

} 

Так , контекст загрузочных нагрузок для MyApp1.xml, а затем MyApp2.xml. Когда я пытаюсь получить доступ к приложениям, они используют одну и ту же базу данных: mydb-test2.

Как я могу правильно решить эту проблему?

EDIT:

Я попытался добавить аргумент в конфигурации, но он не работает; странно, что теперь контексты оба используют первые сконфигурированные базы данных: MYDB

Это XML для каждого приложения:

<Configure id='wac1' class="org.eclipse.jetty.webapp.WebAppContext"> 
... 

    <New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource"> 
     <Arg><Ref refid='wac1'/></Arg> 
     <Arg>jdbc/myDataBase</Arg> 
     <Arg> 
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
      <Set name="Url">jdbc:mysql://host:3306/mydb</Set> 
      <Set name="User">...</Set> 
      <Set name="Password">...</Set> 
      </New> 
     </Arg> 
     </New> 

... 




<Configure id='wac2' class="org.eclipse.jetty.webapp.WebAppContext"> 
... 

    <New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource"> 
     <Arg><Ref refid='wac2'/></Arg> 
     <Arg>jdbc/myDataBase</Arg> 
     <Arg> 
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> 
      <Set name="Url">jdbc:mysql://host:3306/mydb-test2</Set> 
      <Set name="User">...</Set> 
      <Set name="Password">...</Set> 
      </New> 
     </Arg> 
     </New> 

... 

Что мне не хватает? Должен ли я изменить код (способ, которым я делаю поиск)?

Я попытался

datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/myDataBase"); 

, но я получаю javax.naming.NameNotFoundException - вероятно, потому, что я не использую ENV переменные, но я не думаю, что мне нужно, только в контексте поиска областей видимости)

EDIT 2:

Хорошо, так что я был на самом деле отсутствует web.xml конфигурации, которая решается вопрос (см http://www.eclipse.org/jetty/documentation/current/jndi-configuration.html#configuring-datasources)

<resource-ref> 
    <res-ref-name>jdbc/HugaDataBase</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

ответ

1

Вам необходимо установить scope для записей JNDI. Вместо пустого первого аргумента вы должны иметь что-то вроде этого: <Arg><Ref refid='myapp'/></Arg>

+0

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

+0

Думаю, вам действительно нужно добавить ресурс-ref в ваш web.xml. Вы пробовали это? Тогда java: comp/env кажется правильным и является тем, который вы должны использовать. – Roberg

+0

Да, я пробовал это через несколько часов, и это сработало, я забыл опубликовать. Эта ссылка помогла: http://www.eclipse.org/jetty/documentation/current/jndi-configuration.html#configuring-datasources –