在java EE 6中:我什么时候可以更改EntityManager的属性



我想在一个简单的Web应用程序中使用Glassfish上的java EE 6对Oracle Express数据库使用代理身份验证。Eclipselink 2.3.0 doc 在这里说:

如果使用 JEE 和 JTA 管理的实体管理器,则指定代理用户/密码可能会更加困难,因为实体管理器和 JDBC 连接不受应用程序控制。持久性单元属性仍可在实体管理器上指定。只要在实体管理器建立数据库连接之前完成此操作,这仍然有效

我的代码如下,但我想在调用 @Postconstruct init() 方法时已经建立了数据库连接,因为最后一个属性不会从默认的 true 更改为 false。另外,我得到 ORA-00942:save(( 方法中不存在表或视图。在 glassfish-resources 中定义的 jdbc 连接池中的用户.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上设置属性?

我的坚持.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>

我不认为PostConstruct是正确的地方。

新的 EntityManager 绑定到每个事务边界上的持久性上下文,因此您需要在每个事务 SessionBean 方法的开头设置这些属性。 您可能还可以使用 EclipseLink 中的 SessionEvents 来配置属性。

如果属性是固定的,也可以将它们放在持久性.xml中。

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

相关内容

  • 没有找到相关文章

最新更新