我正在接近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访问数据库?
答案 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:
<data-source>
元素,该元素可以包含在application.xml
,web.xml
和ejb.jar.xml
等文件中({ {3}})。glassfish-resources.xml
描述符(asadmin)来完成。如果要将同一应用程序部署到不同的服务器(例如development
和production
),建议使用管理控制台和asadmin方法,每个服务器都指向不同的数据库。优点是jndi
将抽象最终的DataSource,因此,每个服务器可以拥有自己的数据库设置(具有相同的jndi
名称)。最终结果是您无需更改应用程序即可将其部署到特定服务器。
其他方法是应用程序作用域,因此您可以获得相反的好处。您的DataSource将为应用程序“修复”,但您不必在每台服务器上配置新的DataSource。