在karaf3中加入jpa

1、不使用karaf自己的jpa,也就是不要feature:install jpa
2、使用EclipseLink jpa
3、要使用 http://wiki.eclipse.org/Gemini/JPA提供的模块化支持,在osgi环境中使用EclipseLink作为jpa
4、在karaf的deploy目录中加入以下bundles:
(1)EclipseLink的bundles
javax.persistence_2.0.4.v201112161009.jar 
org.eclipse.persistence.antlr_3.2.0.v201206041011.jar
org.eclipse.persistence.asm_3.3.1.v201206041142.jar
org.eclipse.persistence.core_2.4.1.v20121003-ad44345.jar
org.eclipse.persistence.jpa.jpql_2.0.1.v20121003-ad44345.jar
org.eclipse.persistence.jpa_2.4.1.v20121003-ad44345.jar
(2) Gemini/JPA的bundles
org.eclipse.gemini.jpa-1.1.0.RELEASE.jar
在这里下载: Gemini JPA Home
osgi.enterprise.jar
(4)数据库的jdbc驱动器
mysql-connector-java-5.1.24-bin.jar
5、编写持久化单元bundle
在这个bundle中包含三部分:
(1)实体定义
package  dwpaas.console;

import  javax.persistence.Entity;
import  javax.persistence.GeneratedValue;
import  javax.persistence.Id;

@Entity
public class DwpaasUser {
@Id
@GeneratedValue
private Integer id;
private String username;
private String name;
private String password;
public Integer getId() {
returnid;
}
publicvoid setId(Integer id) {
this.id = id;
}
public String getUsername() {
returnusername;
}
publicvoid setUsername(String username) {
this.username = username;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPassword() {
returnpassword;
}
publicvoid setPassword(String password) {
this.password = password;
}

}
(2)持久化单元定义:persistence.xml,该文件放在META-INF目录下
<? xml version="1.0"encoding="UTF-8"?>
<persistenceversion="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-unitname="dwmc"transaction-type="RESOURCE_LOCAL"]]>
<provider]]>org.eclipse.persistence.jpa.PersistenceProvider</provider]]>
<class]]>dwpaas.console.DwpaasUser</class]]>
<properties]]>
<propertyname="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/dwmc?useUnicode=true&amp;characterEncoding=UTF-8"/>
<propertyname="javax.persistence.jdbc.user"value="dwmc"/>
<propertyname="javax.persistence.jdbc.password"value="dwmc6309"/>
<propertyname="javax.persistence.jdbc.driver"value="com.mysql.jdbc.Driver"/>
<propertyname="eclipselink.logging.level"value="OFF"/>
<propertyname="eclipselink.orm.throw.exceptions"value="true"/>
<propertyname="eclipselink.ddl-generation"value="drop-and-create-tables"/>
            <propertyname="eclipselink.ddl-generation.output-mode"value="database"/>
</properties]]>
</persistence-unit]]>
</persistence]]>
(3)在bundle的描述文件中增加:
Meta-Persistence : META-INF/persistence.xml
其完整的内容如下:
Manifest-Version : 1.0
Bundle-ManifestVersion : 2
Bundle-Name : Pu
Bundle-SymbolicName : dwpaas.console.pu
Bundle-Version : 1.0.0.qualifier
Bundle-Vendor : Dareway
Bundle-RequiredExecutionEnvironment : JavaSE-1.6
Meta-Persistence : META-INF/persistence.xml
Import-Package : com.mysql.jdbc; version ="5.1.24",
 javax.persistence;
version ="2.0.4"

部署该持久化单元bundle之后,就会在osgi环境中自动注册emf服务。

6、 EntityManagerFactory服务
Property NameProperty Value
osgi.unit.nameName of the persistence unit
osgi.unit.versionBundle version of the persistence bundle
osgi.unit.providerClass name of assigned provider
osgi.managed.bundlesBundle id of the persistence bundle
利用下述代码从osgi环境中获得emf服务:
public static EntityManagerFactory lookupEMF(String unitName) {
ServiceReference[] refs = null;
try {
refs = context.getServiceReferences(EntityManagerFactory.class
.getName(), String.format("(%s=%s)",
EntityManagerFactoryBuilder.JPA_UNIT_NAME, unitName));
} catch (InvalidSyntaxException isEx) {
thrownew RuntimeException("Filter error", isEx);
}
return (refs == null) ? null : (EntityManagerFactory)context
.getService(refs[0]);
 
}

该方法是在bundle的Activator中实现的,其中的context就是osgi的 BundleContext。

使用emf访问数据库:
EntityManagerFactory emf = lookupEMF( "dwmc" );
if (emf !=null){
System.out.println("get emf successful.");
EntityManager em = emf.createEntityManager();
}else{
System.out.println("get emf not successful.");
 
}

7、在karaf的console使用下述命令可以看到:
karaf@root()> bundle:list
START LEVEL 100 , List Threshold: 50
   ID   State         Level Name
[  91] [  Resolved] [   80] XBean-Finder-Fragment (3.0.0.M3), Hosts: 92
[ 116] [    Active] [   80] Java Persistence API 2.0 (2.0.4.v201112161009)
[ 117] [    Active] [   80] EclipseLink JPA (2.4.1.v20121003-ad44345)
[ 118] [    Active] [   80] EclipseLink Core (2.4.1.v20121003-ad44345)
[ 119] [    Active] [   80] EclipseLink ANTLR (3.2.0.v201206041011)
[ 120] [    Active] [   80] EclipseLink ASM (3.3.1.v201206041142)
[ 121] [    Active] [   80] osgi.enterprise (4.2.0.201003190513)
[ 122] [    Active] [   80] EclipseLink Hermes Parser (2.0.1.v20121003-ad44345)
[ 123] [    Active] [   80] Sun Microsystems' JDBC Driver for MySQL (5.1.24)
[ 124] [    Active] [   80] Pu (1.0.0.1)
[ 125] [    Active] [   80] Emf (1.0.0.1)
[ 126] [    Active] [   80] Gemini JPA (1.1.0.RELEASE)
 
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值