Nano Hash - криптовалюты, майнинг, программирование

В java EE 6: когда я могу изменить свойства EntityManager?

Я хочу использовать прокси-аутентификацию для базы данных Oracle Express в простом веб-приложении с java EE 6 на Glassfish. Документ Eclipselink 2.3.0 здесь говорит:

Если используется EntityManager, управляемый JEE и JTA, указание прокси-пользователя/пароля может быть более сложным, поскольку EntityManager и соединение JDBC не находятся под контролем приложений. Свойства единицы персистентности по-прежнему можно указать в EntityManager. Если это будет сделано до того, как EntityManager установит соединение с базой данных, это все равно будет работать.

Мой код показан ниже, но я предполагаю, что соединение с базой данных уже установлено, когда вызывается метод @Postconstruct init(), поскольку последнее свойство не изменяется с истинного по умолчанию на ложное. Кроме того, я получаю сообщение ORA-00942: таблица или представление не существуют из метода save(). Пользователь pool в пуле подключений jdbc, определенном в файле glassfish-resources.xml, не имеет доступа к таблицам, как и прокси-пользователь user_a.

@Stateless
public class Boundary {

    @PersistenceContext EntityManager em;

    @PostConstruct
    private void init()  {
        em.setProperty("eclipselink.oracle.proxy-type", OracleConnection.PROXYTYPE_USER_NAME);
        em.setProperty(OracleConnection.PROXY_USER_NAME, "pool[user_a]");
        em.setProperty(OracleConnection.PROXY_USER_PASSWORD, "pool");
        em.setProperty(OracleConnection.PROXY_ROLES, "pool_user");
        em.setProperty("eclipselink.jdbc.exclusive-connection.mode", "Always");
        em.setProperty("eclipselink.jdbc.exclusive-connection.is-lazy", "false");
    }

    public void save() {
        em.merge(new AnEntity());
    }
}

У меня не так много опыта в этом, но было бы очень полезно, если бы прокси-аутентификацию можно было сделать такой простой, поэтому я потратил некоторое время на попытки. В управляемом контексте JavaEE можно ли установить свойства EntityManager до того, как он будет подключен?

Мой файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="ProxyUserPU" transaction-type="JTA">
    <jta-data-source>SecondTry</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    <properties>
      <property name="eclipselink.target-database" value="Oracle"/>
      <property name="eclipselink.jdbc.exclusive-connection.is-lazy" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

Ответы:


1

Я не думаю, что PostConstruct - правильное место для этого.

Новый EntityManager привязан к контексту персистентности на каждой границе транзакции, поэтому вам необходимо установить это свойство в начале каждого транзакционного метода SessionBean. Вероятно, вы могли бы также использовать SessionEvents в EclipseLink для настройки свойств.

Если ваши свойства исправлены, вы также можете поместить их в свой файл persistence.xml.

См. http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditing#Use_Oracle_proxy_authentication_to_allow_a_shared_connection_pool_and_a_user_context

30.05.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..