`
javasogo
  • 浏览: 1775342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

TopLink源代码分析 JPA中的Session实现

阅读更多

TopLink源代码分析 JPA中的Session实现

[什么是JPA]

Java Persistence API
  JPAJDK 5.0注解或XML描述象-系表的映射系,并将运行期的象持久化到数据中。

  Sun引入新的JPA ORM范出于两个原因:其一,Java EEJava SE用的象持久化的开发工作;其二,Sun希望整合ORM实现天下一。

  JPAEJB 3.0组开发,作JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web用、甚至桌面用中使用。JPA的宗旨是POJO提供持久化,由此可经过这几年的践探索,能脱离容器独立运行,方便开发测试的理念已深入人心了。目前Hibernate 3.2TopLink 10.1.3以及OpenJPA都提供了JPA实现

  JPA体思想和HibernateTopLinkJDOORM框架大体一致。的来JPA包括以下3方面的技

  ORM映射元数据,JPA支持XMLJDK 5.0注解两元数据的形式,元数据描述象和表之的映射系,框架据此将象持久化到数据表中;

  JPA API,用来操作象,CRUD操作,框架在后台替我完成所有的事情,开发者从繁JDBCSQL中解脱出来。

  查询语言,是持久化操作中很重要的一个方面,通面向象而非面向数据查询语查询数据,避免程序的SQL密耦合

[TopLinke中的JPA源代码---数据session的实现]

通过JPA访问数据库的代码

sessionManager manager = new sessionManager.getMananger();
DatabaseSession session = (DatabaseSession)manager.getSession(“sessionName”, test.getClass().getClassLoader());

接上面的getSession函数

public synchronized AbstractSession getSession(String sessionName, ClassLoader objectClassLoader, boolean shouldLoginSession, boolean shouldRefreshSession, boolean shouldCheckClassLoader) {

AbstractSession session = (AbstractSession)getSessions().get(sessionName);

if (shouldCheckClassLoader && (session != null) && !session.getDatasourcePlatform().getConversionManager().getLoader().equals(objectClassLoader)) {

//bug 3766808 if a different classloader is being used then a reload of the session should

//be completed otherwise failures may occur

shouldRefreshSession = true;

}

if ((session == null) || shouldRefreshSession) {

if (session != null) {

if (session.isDatabaseSession() && session.isConnected()) {

((DatabaseSession)session).logout();

}

getSessions().remove(sessionName);

}

}

if (session == null) {

logAndThrowException(SessionLog.WARNING, ValidationException.noSessionFound(sessionName, ""));

} else if (shouldLoginSession && !session.isConnected()) {

((DatabaseSession)session).login();

}

return session;

}

以上程序中 session.login()中对应的真实处理函数

/**

* PUBLIC:

* Connect to the database using the predefined login.

* The login must have been assigned when or after creating the session.

*

* @see #login(Login)

*/

public void login() throws DatabaseException {

preConnectDatasource();

connect();

postConnectDatasource();

}

以上第一个调用函数

preConnectDatasource() 主要做数据库连接前的处理 代码如下

/**

* INTERNAL:

* This method includes all of the code that is issued before the datasource

* is connected to.

*/

protected void preConnectDatasource(){

//Bug#3440544 Check if logged in already to stop the attempt to login more than once

if (isLoggedIn) {

throw ValidationException.alreadyLoggedIn(this.getName());

}

this.platform = null;

if (isInProfile()) {

getProfiler().initialize();

}

updateProfile(SessionProfiler.LoginTime, new Date(System.currentTimeMillis()));

// Login and initialize

getEventManager().preLogin(this);

//setup the external transaction controller

getServerPlatform().initializeExternalTransactionController();

log(SessionLog.INFO, null, "topLink_version", DatasourceLogin.getVersion());

if (getServerPlatform().getServerNameAndVersion() != null) {

log(SessionLog.FINE, null, "application_server_name_and_version", getServerPlatform().getServerNameAndVersion());

}

}

以上第一个调用函数

connect(); 正式连接数据库 代码如下

/**

* Connect to the database.

* Exceptions are caught and re-thrown as TopLink exceptions.

*/

protected void connect(Login login) throws DatabaseException {

setDatasourceConnection(login.connectToDatasource(this));

setIsConnected(true);

}

[总结]

以上主要分析了TOPLINK中关于JPA连接数据库session的源代码分析

分享到:
评论

相关推荐

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    Toplink_JPA注解参考

    toplink jpa的中文注解参考,虽然老了一点基本上还是很有用的。 原来下载的一个兄弟的chm,里面的锚链接有问题,反编译后修改了链接,并且保留html格式,使用更方便。

    Oracle Toplink JPA

    Oracle Toplink JPA

    黎活明老师讲解的JPA源码

    JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用的对象持久化的开发工作,实现ORM的统一。JPA作为一项对象持久化的标准,不但可以获得Java EE应用服务器的支持,还可以直接在Java SE中使用。JPA必将...

    jpa toplink相关jar包,完整版。

    javaee实现jpa的toplink相关jar包。完整版。

    JavaEE源代码 spring-toplink

    JavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源代码 spring-toplinkJavaEE源...

    myeclipse_jpa_toplink.swf

    myeclipse_jpa_toplink.swf

    JPA文档_学TOPLINK必看_PDF格式

    JPA文档_学TOPLINK必看_PDF格式

    JPA+批注参考.pdf

    JPA(java persistence api)是JavaEE5.0平台的标准的ORM规范。而Hibernate、TopLink和OpenJPA为JPA的一种实现方式。 本文档主要是对其注解的详细说明。

    用JPA时需要的jar包

    JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化...目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

    JSF+Spring+JPA(Hibernate实现)的环境搭建

    JSF+Spring+JPA以我个人看来,应该说是Struts2+Spring+Hibernate的替代解决方案。 引入JPA去取代或者说包装或者说是升级Hibernate是为了符合JAVA EE的规范,达到ORM统一的结果。下次项目用EJB也好、用TOPLINK也好、...

    ejb3.0 jpa

    JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分...目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现。

    JPA注解参考文档

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...

    JPA持久化简介

    Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗? 朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。

    JPA 注解参考文档

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...

    TopLink 教程

    为数不多的TopLink中文文档,珍惜啊 为数不多的TopLink中文文档,珍惜啊 为数不多的TopLink中文文档,珍惜啊

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.2.3 在Java SE环境下使用 TopLink JPA实现 374 10.2.4 在Java SE环境下使用 EntityManager 377 10.2.5 使用orm.xml管理O/R映射 379 10.3 理解实体 382 10.3.1 持久化上下文和持久化单元 382 10.3.2 实体类的要求 ...

    TopLink_Mysql例子

    toplink mysql5 开发工具:Eclipse3.3 for J2ee 简要过程(先导好mysqlJDBC包和toplink包,进mysql建好数据库), 1.新建pojo类,加入Annotation 2.在src目录下建META-INF目录,写好persistence.xml文件 3.写测试类 自动...

    Getting Started with JPA

    The Java Persistence API (JPA) is the Java standard for mapping Java objects to a relational database. Even though proprietary mapping products like Hibernate and TopLink still exist, they are now ...

Global site tag (gtag.js) - Google Analytics