我想在代码中找到我的数据源名称。有没有办法做到这一点? 我正在使用eclipselink。
感谢 更具体地说,我的目标是获得一个jdbc连接对象。 我知道我可以做到这一点:
datasource = (DataSource) (new InitialContext()).lookup("my_data_source_name")
connection = dataSource.getConnection();
但我不想在我的代码中硬编码数据源名称。
我也试过
java.sql.Connection connection = em.unwrap(java.sql.Connection.class);
并且它总是返回null。
答案 0 :(得分:6)
.unwrap()
应该是可行的方式,如EclipseLink wiki所述。
我也曾在调用em.unwrap(java.sql.Connection.class);
时获取null,因为不在交易中。当像这样调用时:
em.getTransaction().begin();
java.sql.Connection conn = em.unwrap(java.sql.Connection.class);
// ...
em.getTransaction().commit();
一切正常!
答案 1 :(得分:2)
java.sql.Connection connection = em.unwrap(java.sql.Connection.class);
应该可以使用,您使用的是哪个版本?确保交易处于活动状态。
要获取您应该能够使用的数据源名称,
((JNDIConnector)em.unwrap(JpaEntityManager.class).getSession().getLogin().getConnector()).getName();
答案 2 :(得分:0)
Here's我发现有用的内容:
private DataSource createDataSource() {
ClientDataSource dataSource = new ClientDataSource();
dataSource.setServerName("localhost");
dataSource.setPortNumber(1527);
dataSource.setDatabaseName("sample");
dataSource.setUser("app");
dataSource.setPassword("app");
return dataSource;
}
private EntityManagerFactory getEntityManagerFactory() {
if (emf == null) {
Map properties = new HashMap();
properties
.put(PersistenceUnitProperties.NON_JTA_DATASOURCE,createDataSource());
emf = Persistence.createEntityManagerFactory(PU_NAME, properties);
}
return emf;
}
您可以在代码中创建数据源,而不是通过persistence.xml进行配置吗?