Aries JPA container是一个持久化容器,但它不类似Hibernate,而只是相当于Hibernate的一部分,它还需要如OpenJPA之类的JPA实现的支持,才能真正地完成持久化的工作。
一个常见的OSGI JPA应用可以是这样的:若干个用JPA的规范编写的实体(Entity),集合在一个Bundle里,并用persistence.xml描述成一个持久化单元(persistence unit)。而persistence.xml里则通过JNDI将JDBC DataSource与该域绑定。最后,Aries JPA container就能将持久化单元的EntityManagerFactory或EntityManager提供给应用来引用。
以下是一个例子:
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="com.ponder.examples.jpa01PU" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/jpa01DS)</non-jta-data-source>
<class>com.ponder.examples.jpa01.CustomerEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
</properties>
</persistence-unit>
</persistence>
blueprint.xml:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0">
<cm:property-placeholder persistent-id="com.ponder.examples.jpa01">
<cm:default-properties>
<cm:property name="DS.DriverName" value="com.mysql.jdbc.Driver" />
<cm:property name="DS.Url" value="jdbc:mysql://192.168.0.1:3306/mydb" />
<cm:property name="DS.User" value="user" />
<cm:property name="DS.Password" value="password" />
<cm:property name="DS.InitialSize" value="5" />
<cm:property name="DS.MinIdle" value="5" />
<cm:property name="DS.MaxIdle" value="20" />
<cm:property name="DS.MaxWait" value="1000" /> <!-- 1000毫秒 -->
<cm:property name="DS.MaxActive" value="30" />
<cm:property name="DS.LogAbandoned" value="true"/>
<cm:property name="DS.RemoveAbandoned" value="true"/>
<cm:property name="DS.RemoveAbandonedTimeout" value="180"/> <!-- 180秒 -->
<cm:property name="DS.TestWhileIdle" value="true"/>
<cm:property name="DS.TestOnBorrow" value="false"/>
<cm:property name="DS.TestOnReturn" value="false"/>
<cm:property name="DS.ValidationQuery" value="SELECT COUNT(0) FROM DUAL"/>
<cm:property name="DS.ValidationQueryTimeout" value="1"/>
<cm:property name="DS.TimeBetweenEvictionRunsMillis" value="30000"/>
<cm:property name="DS.NumTestsPerEvictionRun" value="30"/>
</cm:default-properties>
</cm:property-placeholder>
<bean id="jpa01DS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${DS.DriverName}" />
<property name="url" value="${DS.Url}" />
<property name="username" value="${DS.User}" />
<property name="password" value="${DS.Password}" />
<property name="initialSize" value="${DS.InitialSize}"/>
<property name="minIdle" value="${DS.MinIdle}"/>
<property name="maxIdle" value="${DS.MaxIdle}"/>
<property name="maxWait" value="${DS.MaxWait}"/>
<property name="maxActive" value="${DS.MaxActive}"/>
<property name="logAbandoned" value="${DS.LogAbandoned}"/>
<property name="removeAbandoned" value="${DS.RemoveAbandoned}"/>
<property name="removeAbandonedTimeout" value="${DS.RemoveAbandonedTimeout}"/>
<property name="testWhileIdle" value="${DS.TestWhileIdle}"/>
<property name="testOnBorrow" value="${DS.TestOnBorrow}"/>
<property name="testOnReturn" value="${DS.TestOnReturn}"/>
<property name="validationQuery" value="${DS.ValidationQuery}"/>
<property name="validationQueryTimeout" value="${DS.ValidationQueryTimeout}"/>
<property name="timeBetweenEvictionRunsMillis" value="${DS.TimeBetweenEvictionRunsMillis}"/>
<property name="numTestsPerEvictionRun" value="${DS.NumTestsPerEvictionRun}"/>
</bean>
<service ref="jpa01DS" interface="javax.sql.DataSource">
<service-properties>
<entry key="osgi.jndi.service.name" value="jdbc/jpa01DS"/>
</service-properties>
</service>
</blueprint>
其中的关键点如下:
1、持久化单元(PU)定义(persistence.xml);
2、数据源(Datasource):采用apache的dbcp;
3、blueprint通过placeholder配置DataSource,并发布DataSource服务,并注册到JNDI ;
4、PU通过jndi引用Datasource;
5、部署时,karaf通过configAdmin服务将etc/com.ponder.examples.jpa01.cfg的配置信息读入到blueprint的placeholder处。
分享到:
相关推荐
标题中的“基于SOA和ESB企业总线的OSGi企业级应用”是一个关于构建企业级软件系统的主题,其中涉及到三个关键概念:Service-Oriented Architecture(SOA)、Enterprise Service Bus(ESB)以及OSGi(Open Service ...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个Bundle。在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来...
**OSGi企业版本的技术规范**是OSGi联盟为满足企业级应用的需求而制定的一套详细的技术标准与指导原则。该规范旨在提供一个灵活且可扩展的框架,支持复杂的企业级应用开发与部署。 #### 二、OSGi核心框架解析 #####...
Apache Aries项目是Apache软件基金会的一个开源项目,它旨在提供OSGi企业级应用所需的工具和容器,支持OSGi应用程序的开发、部署和运行。通过使用Aries,开发者可以更方便地利用OSGi的强大功能,比如服务动态发现、...
在企业应用中,OSGi可以用来构建服务网关或者中间件,以支持微服务架构。 由于OSGi提供了一个严格的模块化标准,它特别适合于大型分布式系统的设计和开发。在这些系统中,服务可能需要频繁更新而不影响系统的其他...
2. **作为独立的Java应用程序部署**:如果需要将OSGi应用程序作为一个独立的Java应用程序部署,可以使用特定的工具(如Bndtools)来打包应用程序,使其能够脱离Eclipse环境独立运行。 通过遵循上述指南,您可以顺利...
### 基于OSGi和Spring开发企业级Web应用 #### OSGi与Spring结合的重要性 随着企业级应用复杂度的不断提升,对于软件架构的要求也越来越高。为了更好地满足这一需求,许多开发团队开始关注并采用OSGi(Open Service...
《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...
6. **社区与资源**:介绍OSGI社区,相关的开源项目,以及获取更多帮助和信息的渠道。 7. **案例研究**:分析实际项目中的OSGI应用,展示其在解决特定问题上的效果。 通过这两本书的学习,读者不仅能掌握OSGI的基本...
Java应用架构设计中,模块化模式与OSGi是两个关键概念,它们对于构建大型、可扩展且易于维护的系统至关重要。模块化模式使得代码组织更加有序,而OSGi(Open Services Gateway Initiative)则是一种实现模块化的动态...
8. **社区与资源**:参与OSGi社区,获取最新的资讯和技术支持,利用开源项目如Apache Aries、Blueprint等来加速开发。 "OSGi原理与最佳实践"这本书可能会详细讲解以上各个方面,并可能包含实例代码和实战经验分享,...
dm Server 是一个完全模块化部署的基于 OSGi 的 Java 服务器,为运行企业 Java 应用和 Spring 应用提供更加强大的灵活性和可靠性。 在本文中,我们将通过一个简单实例,介绍如何利用 Spring-DM 开发基于 OSGi 和 ...
利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...
### 开发一个简单的 OSGi Web 应用实例 #### 一、项目概述 本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署...
总结,通过以上步骤,我们可以在Eclipse环境下构建一个结合了Spring和OSGi的项目,利用Spring的强大功能和OSGi的模块化优势,打造灵活、可扩展的企业级应用。这个过程涉及到了源码的编写、工具的使用,以及模块化...
扩展Tomcat支持OSGi应用服务项目文件。其项目为eclipse工程。项目说明请参见我的blog《扩展Tomcat支持OSGi应用服务》:http://blog.163.com/haizai219@126/blog/static/44412555200971223629869/
Java应用架构设计中,模块化模式与OSGi是两种重要的技术,它们对于构建...在深入学习这两个概念时,可以参考《Java应用架构设计模块化模式与OSGi》这本书,它将详细阐述这两者的原理、实践方法以及在实际项目中的应用。
7. **企业应用集成**:OSGi在企业级应用中发挥着重要作用,尤其是在大型分布式系统中。它可以用来构建微服务架构,简化组件间的通信,提高系统的可扩展性和可维护性。 8. **最佳实践**:书中可能涵盖了如何有效地...
Spring-DM,即Spring Dynamic Modules,是Spring官方在2008年推出的项目,旨在将Spring框架与OSGi模块化平台相结合,为Java开发者提供了一套全面的工具和API,以支持在OSGi环境中开发、部署和管理Spring应用程序。...
总结来说,OSGi与Web容器的整合提供了一种强大的方式来构建和部署Web应用,使得应用组件可以独立升级和替换,减少了应用的耦合度。通过选择合适的工具和方法,开发者可以充分利用OSGi的动态性和灵活性,创建更健壮、...