Я хочу использовать прокси-аутентификацию для базы данных 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>