liberty 18.0.0.3 中的 JPA2 使用 MySQL 数据库

JPA2 in liberty 18.0.0.3 using MySQL database

我是 JPA 和 Liberty 的新手。谁能解释一下如何通过relate/link、server.xml、web.xml和persistence.xml配置来建立数据库连接? 非常感谢您对此的帮助。

在 Liberty 中,您定义 JDBC 驱动程序 jar 文件的位置并使用 JNDI 名称配置数据源元素。此知识中心页面包含 MySQL、

的示例

https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_dep_configuring_ds.html

直接引用上面的页面,

<dataSource id="DefaultDataSource" jndiName="jdbc/mySQL">
<jdbcDriver libraryRef="MySQLLib"/>
    <properties databaseName="SAMPLEDB" serverName="localhost" portNumber="3306"/>
</dataSource>

<library id="MySQLLib">
    <file name="C:/mysql-connector-java-x.x.xx/mysql-connector-java-x.x.xx.jar"/>
</library>

在此之后,您可以在 persistence.xml 中配置 jta-data-source 元素指向您选择的 JNDI 名称。例如,

...
<persistence-unit name="ExamplePersistenceUnit">
  <jta-data-source>jdbc/mySQL</jta-data-source>
</persistence-unit>

以上内容足以使其正常工作,无需涉及 web.xml。 部署描述符 (web.xml) 使您可以选择添加 indirection/mapping 级别,并能够配置一些额外的设置,例如可共享性和容器与应用程序身份验证。您可以通过在 web.xml 中定义指向数据源的资源引用来完成此操作。资源引用的名称为 java:comp/env、java:module/env、java:app/env 或 java:global/env 反映了他们的知名度。我将在下面的示例中使用 java:module,这意味着我们定义的引用仅在同一模块(提供 web.xml 的 Web 模块)、

中可见
<resource-ref>
  <res-ref-name>java:module/env/jdbc/mySQLRef</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
  <lookup-name>jdbc/mySQL</lookup-name>
</resource-ref>

在上面定义资源引用后,数据源继续在 server.xml 中指定的 JNDI 名称可用,但也可以通过资源引用的 JNDI 名称可用,这意味着您可以交替指定,

  <jta-data-source>java:module/env/jdbc/mySQLRef</jta-data-source>

部署描述符还可以做一些更高级的事情,比如定义数据源来代替服务器配置。但是,为了让这个答案简单明了,我跳过了这种可能性。

这个IBM KnowledgeCenter topic是一个很好的起点