3

我正在使用持久性 API,并希望从 web.xml 加载 jdbc URL。URL 应该是 servlet 的上下文参数。我找不到不使用 persistence.xml 来构造 EntityManagerFactory 的方法。也许我应该在 servlet 中创建 PersistenceUnit 并设置一些参数?你能给我一些简短的例子吗?

谢谢

4

5 回答 5

3

你可以使用createEntityManagerFactory(String persistenceUnitName, Map properties)类的方法javax.persistence.Persistence。并在地图中插入所有参数

于 2010-06-03T18:34:06.330 回答
1

无论您是否使用数据源,JPA 配置都persistence.xml位于web.xml. 如果要使用 JPA,请提供persistence.xml.

于 2010-06-03T13:31:13.530 回答
1

我个人发现它是使用 JNDI 在 servlet 容器中定义数据源并从 persistence.xml 中引用的最简洁的方法。

这也解决了从 test-uat-p​​rod 迁移时的一个配置问题,因为我可以在机器上使用相同的数据源名称。

是的,我知道 JNDI 不流行,但这很好用,并且它避免了操作也包含在战争中的 hte web.xml。

于 2010-06-03T08:59:31.460 回答
0

您可以使用 env-entry 从 web.xml 中检索任何值

<env-entry>
    <env-entry-name>dbUrl</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>jdbc:url:goes:here</env-entry-value>
</env-entry>

在java中

try {
    Context ctx = new InitialContext();
    String dbUrl= (String) ctx.lookup("java:comp/env/dbUrl");

    //... create your connection
} catch (Exception e ) {

}
于 2010-06-03T12:45:27.420 回答
0

在 web.xml 中定义一个指向数据库 url 的 init-param。例如,对于 MySQL,它将是这样的:

<init-param>
    <param-name>DB_URL</param-name>
    <param-value>jdbc:mysql:///MY_DB</param-value>
</init-param>

然后在您的 Web 应用程序中(在 Servlet 中)使用以下内容获取此值:

String myDbUrl = getServletConfig().getInitParameter("DB_URL");

在 JSP 文件中,您可以通过以下方式获取值:

String myDbUrl  = config.getInitParameter("DB_URL");
于 2010-06-03T13:07:08.480 回答