我错过了从数据库(配置)到JPA的链接

时间:2013-12-29 00:14:08

标签: java-ee jpa jdbc ejb persistence

我正在接近Java EE,我已经开始阅读Oracle的Java 6 EE教程,以及有关JPA 2,EJB 3,JDBC 4等的各种JSR,以试图全面了解。

我在Eclipse中用Maven(非常基本的东西)放了一些测试代码,我编写了一个servlet,我编写并尝试了不同的会话bean,这一切都有效。 但我不明白我应该如何有效地将数据库实例与我的ejb和jpa实体所在的容器相关联。

我正在使用Glassfish,所以bean的处理没有外部依赖;关于JPA我想我必须选择一个实现,而Glassfish则没有,对吧? 我选择了Hibernate,但我想同样的问题适用于EclipseLink。 我想使用容器管理的实体管理器,所以在我的理解中,一切都应该与注释和接口一起使用。

我可以编写我的实体,将一个persistence.xml文件放在一起,很好;在我上面提到的文档中,我读到实体管理器可以通过DI o JNDI查找获取,但我遗漏了我应该在哪里配置我正在使用的数据库(即连接URL),用户名,密码和模式名称

另外,我不知道如何将它提供给系统,所以写作:

@Resource
private DataSource ds;

将找到我提供的配置并立即开始工作。 我正在使用MySql,我有驱动程序。

我错过了什么?我应该阅读其他一些文件吗?如何填写最后一个块,以便最终可以从我的ejbs访问数据库?

2 个答案:

答案 0 :(得分:0)

由于它不适合你,它应该是:

@Resource(name="YourDB")

YourDB是您在 persistence.xml中为jta-data-source配置的名称

如果您没有为@Resource注释提供任何名称和类型,它将从您的声明中推断出默认值。以下是有关此默认Field Based Injection的详细信息。

答案 1 :(得分:0)

“链接”是DataSource配置。在Java EE容器中,通常您将在persistence.xml中声明持久性单元。每个PU通常包含指向JDBC资源的<jta-data-source>(用于容器管理的事务)元素。有几种方法可以配置DataSource:

  • 像我这样的老朋友通常是通过Admin Console来完成的。
  • Java EE 6还引入了DataSourceDefinition annotation及其等效<data-source>元素,该元素可以包含在application.xmlweb.xmlejb.jar.xml等文件中({ {3}})。
  • 第三,应用程序服务器通常公开供应商特定的方式来配置DataSource。例如,Glassfish允许您通过more info和它自己的glassfish-resources.xml描述符(asadmin)来完成。

如果要将同一应用程序部署到不同的服务器(例如developmentproduction),建议使用管理控制台和asadmin方法,每个服务器都指向不同的数据库。优点是jndi将抽象最终的DataSource,因此,每个服务器可以拥有自己的数据库设置(具有相同的jndi名称)。最终结果是您无需更改应用程序即可将其部署到特定服务器。

其他方法是应用程序作用域,因此您可以获得相反的好处。您的DataSource将为应用程序“修复”,但您不必在每台服务器上配置新的DataSource。