gpt4 book ai didi

java - Jboss7 OSGI 上的 hibernate (无 EJB)

转载 作者:行者123 更新时间:2023-12-01 09:43:27 25 4
gpt4 key购买 nike

我使用实体 bean 和一些提供 HomeLocalHomeRemote 接口(interface)的无状态 ejb,我在其中注入(inject) persistenceContext 并获取 EntityManager .

作为新的要求(Karaf 上的迁移),我必须摆脱所有 EJB。

我的问题是如何用简单的 DAO 类替换这个无状态 ejb 并在这些类中注入(inject)或获取实体管理器?

我的 JPA 提供程序是 hibernate 的。

我需要一些示例、教程或任何类型的帮助。

最佳答案

您可以使用 Apache Aries 项目:

有趣的是,您将使用蓝图,声明您的 bean 并定义服务(假设您想使用服务)

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0">

<bean id="jpaDemo" init-method="init" class="org.demo.osgi.datasource.jpa.JpaComponentImpl">
<jpa:context unitname="demo" property="entityManager"/>
<tx:transaction method="*" value="Required"/>
</bean>

<service ref="jpaDemo" interface="org.demo.osgi.datasource.jpa.JpaComponent"/>

</blueprint>

然后JpaComponent可以使用注入(inject)的entityManager(Scala中的代码,但我相信你会明白的)

trait JpaComponent {

}
class JpaComponentImpl extends JpaComponent {

val logger = org.slf4j.LoggerFactory.getLogger(classOf[JpaComponent])

@BeanProperty
var entityManager : EntityManager = _

def init = {
logger.info(s"em=${entityManager}")
}
}

persistence.xml 放入您的包中(例如 META-INF/persistence.xml)。示例如下:

<persistence-unit name="demo" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/jbtravel)</jta-data-source>
<mapping-file>META-INF/airport.xml</mapping-file>
</persistence-unit>

您将需要以下功能:

  • jpa
  • hibernate
  • jndi
  • 交易

以及以下 bundle

  • mvn:org.apache.aries/org.apache.aries.util/1.0.1
  • mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/1.0.1
  • mvn:org.apache.aries.jpa/org.apache.aries.jpa.container.context/1.0.1

另外设置以下 OSGI 元数据

  • 元持久性:META-INF/persistence.xml
  • 服务组件:*

另请参阅https://github.com/rparree/osgi-demos/tree/master/datasource对于上面的示例

关于java - Jboss7 OSGI 上的 hibernate (无 EJB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38266346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com