首页 > hibernate映射文件头地址影响解析速度原因以及可有工具定位哪一处代码执行较久

hibernate映射文件头地址影响解析速度原因以及可有工具定位哪一处代码执行较久

遗留工程开发新功能 增加了几张表 用eclipse hibernate 插件自动生成映射文件(*.hbm.xml)和Entity, 然后开发dao, 单元测试的时候发现时间有点久, 偶尔还有这样的异常

Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:555)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:613)
    ... 49 more
Caused by: org.dom4j.DocumentException: Connection timed out Nested exception: Connection timed out
    at org.dom4j.io.SAXReader.read(SAXReader.java:484)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:546)
    ... 50 more

刚开始误以为数据库连接超时,但偶然中发现新生成的映射文件的头与之前的映射文件的头不一致
新映射文件头是这样的

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

已有映射文件头

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

发现解析新映射文件需要好几秒

Feb 27, 2016 1:58:04 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : config/bar/Award.hbm.xml
Feb 27, 2016 1:58:09 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.foo.activities.bar.entity.Award -> award

而将http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd改成http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd后, 立即解析完成

Feb 27, 2016 2:00:00 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : config/bar/Award.hbm.xml
Feb 27, 2016 2:00:00 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.foo.activities.bar.entity.Award -> award

为什么会有这样大的差距呢,而在浏览器中实际访问上述两个url, 却得到相反的认识, 访问http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd很快, 而访问http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd压根访问不了。

尝试跟踪了半天源码也没找到具体哪里不同。可有什么工具可以便捷的定位到底是哪一处代码执行较久吗? 现在使用JDK自带的jvisualvm中的Sample, 定位的还是很粗粒度, 如

基本上就是异常信息中的类信息。


DTD文件在jar包里通常会提供的,没有的话才会试图从网上获取。你的jar包里只有sourceforge那个,所以新的hibernate那个需要从网络获取,导致花费时间很长。

【热门文章】
【热门文章】