我使用EJB的Web应用程序。持久性由容器管理,因此实体管理器被注入。
@PersistenceContext(name="Ejbs", type=PersistenceContextType.TRANSACTION)
private EntityManager em;
我需要在我的一个EJB方法中获取jdbc连接。我已经读到可以使用下一个代码:
java.sql.Connection conn = em.unwrap(java.sql.Connection.class);
但我总是变空。
为什么呢?我怎样才能获得底层连接?
更新:
更改数据源定义后,它开始工作。我删除了一行我的数据源定义,它开始工作。我删除的行是
<driver-class>oracle.jdbc.OracleDriver</driver-class>
我的数据源定义是:
<datasource jta="true" jndi-name="java:/jboss/datasources/Unificado" pool-name="Unificado" enabled="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:@10.12.54.186:1522:prd</connection-url>
<driver>ojdbc6</driver>
<security>
<user-name>unificado</user-name>
<password>*******</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
答案 0 :(得分:0)
注入:
@PersistenceContext
private EntityManager entityManager;
并使用以下方式获取连接:
EntityManagerFactoryInfo info = (EntityManagerFactoryInfo) entityManager.getEntityManagerFactory();
Connection connection = info.getDataSource().getConnection();
答案 1 :(得分:0)
您可以使用以下方式获得连接:
Session session = entityManager.unwrap(Session.class);
session.doWork(connection -> doSomeStuffWith(connection));
如何获取EntityManager?
@PersistenceContext
private EntityManager entityManager;
这是进口:
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Session;
现在,如果您在连接池方面遇到问题,请检查this tread
希望这会对您有所帮助。
谢谢:)