如何以编程方式设置@PersistenceContext,以便从简单的属性文件中获取配置(jDBC Url,Driver Class等)(这样用户可以简单地修改此文件)而不是更大的更复杂的persistence.xml文件?
我所读到的是,使用Persistence.createEntityManagerFactory("bla", properties)
将完全没用,因为@PersistenceContext(unitName = "bla")
将永远不会起作用(并且它不起作用,给NPE ......)。
我知道有很多教程,但是他们都使用带有硬编码数据库类型的persistence.xml(Oracle,MySQL,...),没有人解释我如何以编程方式设置这个托管bean?
答案 0 :(得分:0)
鉴于您提供了ejb
标记,我假设您正在一个完整的Java EE环境中执行。
您的用户永远不必触摸persistence.xml,因为它通常配置了数据源引用:
<persistence-unit name="bla" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/BlaDS</jta-data-source>
...
然后,用户使用其Java EE服务器实现提供的工具来创建数据源。
大多数实现都提供用于执行此任务的GUI和CLI工具。
例如,在WildFly中,CLI脚本可能如下所示:
# Execute offline
embed-server --server-config=standalone.xml
deploy postgresql-42.0.0.jre7.jar
# Add the application datasource
data-source add \
--name=BlaDS \
--driver-name=postgresql-42.0.0.jre7.jar \
--connection-url=jdbc:postgresql://bladb-host:5432/bladb \
--jndi-name=java:jboss/datasources/BlaDS \
--user-name=bla \
--password=bla-password \
--use-ccm=false \
--min-pool-size=10 \
--max-pool-size=25 \
--pool-prefill=true \
--blocking-timeout-wait-millis=5000 \
--new-connection-sql="set datestyle = ISO, European;"
通常,用户需要能够控制其他与数据库连接相关的属性,如连接池大小等,如图所示。