Пользовательский ресурс в JNDI на разных серверах приложений - PullRequest
4 голосов
/ 20 сентября 2010

Предисловие:
Большинство приложений J2EE используют управляемые контейнером источники данных через JNDI.Это нормально, поскольку дает одно место для настройки этих соединений.
Проблема возникает, когда мы хотим использовать среду ORM (например, hibernate) или что-то, что должно знать схему по умолчанию (в основном для Oracle, могут быть и другие),который может отличаться от имени пользователя, используемого для подключения к БД.

Я хочу поместить имя схемы по умолчанию где-то рядом с определением источника данных.Один из вариантов - поместить его в JNDI.Затем я буду вручную читать оттуда перед созданием EntityManager (ну, на самом деле, используя Spring).

Как я выяснил, существует простой способ указать пользовательский ресурс (в этой ситуации это будет String с именем схемы по умолчанию).) в Apache Tomcat вот так (поправьте меня, если я ошибаюсь):

<Environment name="schemaNames/EmployeeDB"
             type="java.lang.String"
            value="empl"
      description="Schema name of Employees Database for HR Applications"/>

В любом случае, учитывая, что это можно сделать в Apache Tomcat, как мне настроить тот же пользовательский ресурс JNDI (типа String)на других серверах приложений:

  • JBoss 4/5
  • WebSphere 6/7
  • WebLogic 9/10

Если вы знаетео других серверах, которые тоже были бы хорошими.

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

Большое спасибо!

Обновление:
Нашел какой-то способ добиться этого на JBoss.Я не проверял это, хотя.
http://forums.java.net/jive/thread.jspa?messageID=316228

Нашел информацию для WebLogic, но они говорят об этом программно, а не с конфигурацией:
http://weblogic -wonders.com/ weblogic / 2010/06/12 / binding-objects-in-weblogic-servers-jndi-tree /
http://forums.oracle.com/forums/thread.jspa?messageID=4397353

Ответы [ 4 ]

5 голосов
/ 25 сентября 2010

Для WebSphere вы можете фактически установить схему по умолчанию в определенном вами источнике данных.Это пользовательское свойство с именем currentSchema.(т. е. в V7 это Ресурсы> JDBC> Источники данных> имя вашего источника данных> Пользовательские свойства> currentSchema.

В противном случае вы можете использовать привязку пространства имен и определить его там: (т.е. в V7 этоEnvironment> Naming> Bindings пространства имен. Вы можете использовать JNDI для поиска этого, если не хотите программно устанавливать его в WebSphere.

Невозможно поговорить с JBoss и WebLogic, так как я не работал сим.

3 голосов
/ 11 сентября 2013

Если вы используете Hibernate, это свойство, которое нужно добавить в единицу постоянства:

<property name="hibernate.default_schema" value="myschema" />

Это префикс, который JPA вставит для имен таблиц.

Если вам нужно что-то «ближе» к определениям AS Datasources, вы можете внедрить некоторый специфичный для БД SQL во время соединения с БД; например, Oracle,

ALTER SESSION SET CURRENT_SCHEMA =

В JBoss вы можете добавить это в определение источника данных:

<new-connection-sql>
ALTER SESSION SET CURRENT_SCHEMA=myschema
</new-connection-sql>

Также редактируется в JBoss 7 Admin.

В Weblogic вы можете добавить это в пулы подключений.

На Вебсфере это должно быть похоже.

2 голосов
/ 28 марта 2012

Эта же проблема уже давно беспокоит WebLogic, в частности 10.3.5 (11g).

Я провел большую часть дня, оглядываясь по сторонам, и все, что я нашел, это: http://code.google.com/p/weblogic-jndi-startup/. Это работает просто отлично. Это немного ограничивает: требует, чтобы объект, который вы хотите добавить в JNDI, имел конструктор с одним параметром String.

Для того, что мне было нужно, weblogic-jndi-startup не работал, поэтому я построил код Роджера и придумал следующее: https://bitbucket.org/phillip_green_idmworks/weblogic-jndi-custom-resource-configuration/. У меня есть запись на http://coder -in-training.blogspot.com/2012/03/weblogic-jndi-custom-resource.html

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

В JBoss вы можете использовать специальный MBean (org.jboss.naming.JNDIBindingServiceMgr) и service.xml для настройки JNDI-записей, а затем отобразить эти записи в ваших веб-приложениях. Здесь довольно длинное объяснение этого довольно нетривиального процесса:

http://usna86 -techbits.blogspot.com / 2011/01 / JBoss-JNDI-и-javacompenv.html

Я все еще ищу способ поместить весь файл свойств / пакет ресурсов в jndi, так как это ручное отображение становится очень утомительным, когда у вас есть много свойств, которые вы хотите поместить в jndi и сделать доступными для ваших веб-приложений. ,

...