Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee I';我缺少从数据库(配置)到JPA的链接_Jakarta Ee_Jpa_Jdbc_Ejb_Persistence - Fatal编程技术网

Jakarta ee I';我缺少从数据库(配置)到JPA的链接

Jakarta ee I';我缺少从数据库(配置)到JPA的链接,jakarta-ee,jpa,jdbc,ejb,persistence,Jakarta Ee,Jpa,Jdbc,Ejb,Persistence,我正在学习JavaEE,我已经开始阅读Oracle的Java6EE教程,以及关于JPA2、EJB3、JDBC4等的各种JSR,试图了解整个情况 我用Maven在Eclipse中编写了一些测试代码(非常基本的东西),编写了一个servlet,编写并尝试了不同的会话bean,所有这些都可以工作。 但我不明白应该如何有效地将数据库实例与ejb和jpa实体所在的容器链接起来 我使用的是Glassfish,因此处理这些豆子时没有外部依赖性;关于JPA,我想我必须选择一个实现,而Glassfish没有一个实

我正在学习JavaEE,我已经开始阅读Oracle的Java6EE教程,以及关于JPA2、EJB3、JDBC4等的各种JSR,试图了解整个情况

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

我使用的是Glassfish,因此处理这些豆子时没有外部依赖性;关于JPA,我想我必须选择一个实现,而Glassfish没有一个实现,对吧? 我会选择Hibernate,但我想同样的问题也适用于EclipseLink。 我想使用容器管理的实体管理器,因此在我的理解中,一切都应该与注释和接口一起工作

我可以编写我的实体,把persistence.xml文件放在一起,很好;在我上面提到的文档中,我读到可以通过DI o JNDI查找获得实体管理器,但我缺少配置我正在使用的数据库(即连接url)、用户名、密码和模式名的位置

另外,我不知道如何将其提供给系统,因此:

@Resource
private DataSource ds;
将立即找到我提供的配置和工作。 我使用的是MySql,我有驱动程序


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

由于它不适用于您,因此应该是:

@Resource(name="YourDB")
YourDB
是您在persistence.xml中为
jta数据源配置的名称

如果您没有为
@Resource
注释提供任何名称和类型,它将根据您的声明推断默认值。下面是有关此默认设置的更多详细信息。

“链接”是数据源配置。在JavaEE容器中,通常在
Persistence.xml
中声明一个持久化单元。每个PU通常包含一个指向JDBC资源的
(对于容器管理的事务)元素。有几种方法可以配置数据源:

  • 像我这样的老古董通常都是通过网络来完成的
  • JavaEE6还引入了及其等价的
    元素,这些元素可以包含在文件中,如
    application.xml
    web.xml
    ejb.jar.xml
    ()
  • 第三,应用服务器通常公开特定于供应商的配置数据源的方法。例如,Glassfish可以让您通过它自己的
    Glassfish resources.xml
    descriptor()完成这项工作
如果要将同一应用程序部署到不同的服务器(例如,
开发
生产
),建议使用管理控制台和asadmin方法,每个服务器都指向不同的数据库。优点是
jndi
将抽象最终的数据源,因此,每个服务器都可以保存自己的数据库设置(使用相同的
jndi
名称)。最终的结果是,您不需要为了将应用程序部署到特定服务器而更改应用程序


其他方法是应用程序范围的,因此您会得到相反的好处。您的数据源将为应用程序“修复”,但您不必在每台服务器上配置新的数据源。

Glassfish附带EclipseLink。@RichardSitze谢谢:-)Java EE生态系统太大了,我对所有组件都还远未完全了解。老实说,我不知道前者是否有效,正是因为我不明白在哪里配置数据源信息(url、用户名、密码等等),才提出了这个问题。此外,正如我从您的答案中所读到的,数据库引用是在persistence.xml中硬编码的:如果我要更改数据库类型怎么办?有没有可能在运行时或者在persistence.xml之外设置它们?我不想使用管理控制台,因为我可能会在以后切换应用服务器,我想学习最独立于工具的方式来做事情;我想现在最适合我的是
DataSourceDefinition
注释。是否可以在源代码中全部配置?我见过一个项目(使用Spring)从文本文件中读取jdbc信息(url/schema/等):这可以用JavaEEAPI完成吗?是的
DataSourceDefinition
是目前公认的标准(由于上述原因,大多数商店都会使用某种控制台)。关于编程构建PU,大多数ORM提供商都会提供一种方法(,),但这绝不是标准的API。如果你想从经验丰富的程序员那里得到一些建议,我很感谢Java EE标准及其特性(我们使用它会更好!),一旦你接受了这样一个事实,即创建一个数据源将是你在更好地切换应用服务器时最不关心的事情(是的,有标准……但一旦你将你的第一个真实项目从GlassFish转移到Weblogic或JBoss,你就会明白我的意思)。对不起,hibernate示例的正确链接是:。总的来说,控制台并没有那么糟糕(如果你学会使用GlassFish控制台,你将不得不面对WebLogic、WebSphere等方面的问题……它们都非常相似)。我终于让它工作起来了,谢谢。
@DataSourceDefinition
注释类是否必须使用
@Stateless
或任何其他与EJB相关的注释进行注释?