我正在构建一个管理数据库访问的框架。
框架从用户获取任务并处理管理对数据库的访问的连接池。用户只需向我发送SQL命令。
我想支持的一个功能是使用JPA,在这种情况下,我将提供实体管理器。在某些情况下,我想提供JDBC访问以及JPA访问。数据库的参数是用XML文件编写的。
因此对于JPA,我需要在persistence.xml中编写属性,因此再次为JDBC创建相同的参数并不是那么聪明。你知道我是否可以从persistence.xml获取数据库的参数,你知道是否有源代码可以做到这一点。或者我应该自己解析persistence.xml?
答案 0 :(得分:3)
您知道我是否可以从
persistence.xml
获取数据库的参数,您知道是否有源代码可以执行此操作。或者我应该自己解析persistence.xml
?
我不知道标准JPA API中的任何内容允许检索驱动程序类名,jdbc url,用户名和密码。
第二个问题,这些属性的键在JPA 1.0中没有标准化。例如,Hibernate将使用:
<property name="hibernate.connection.driver_class" value=""/>
<property name="hibernate.connection.url" value=""/>
<property name="hibernate.connection.username" value=""/>
<property name="hibernate.connection.password" value=""/>
虽然EclipseLink将使用:
<property name="eclipselink.jdbc.driver" value=""/>
<property name="eclipselink.jdbc.url" value=""/>
<property name="eclipselink.jdbc.user" value=""/>
<property name="eclipselink.jdbc.password" value=""/>
这可能会使解析变得脆弱。
如果这是一个选项,也许您可以使用属性文件来存储提供者特定的键和值(我建议使用标准化的JPA 2.0属性作为键)。例如:
# keys for JPA
javax.persistence.jdbc.driver = hibernate.connection.driver_class
javax.persistence.jdbc.url = hibernate.connection.url
javax.persistence.jdbc.user = hibernate.connection.username
javax.persistence.jdbc.password = hibernate.connection.password
# values common to JPA and JDBC
driver = org.h2.Driver
url = jdbc:h2:mem:test
username = scott
password = tiger
并使用Persistence.createEntityManagerFactory(String, Map)
并传递您将使用文件中的属性提供的Map
来创建EntityManagerFactory
:
Map map = new HashMap();
map.put(...);
...
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPu", map);