2013年第6周二工具熟悉总结

今天感觉有几点收获:1.坚持解决了Hibernate映射报错的问题;2.知道了Hibernate中getsession方法的缺陷;3.熟悉了MyEclipse开发工具的使用。

Hibernate映射报错问题

今天费了很长时间大概有2小时在解决一个hibernate映射文件报错的问题(还没完全弄明白,hibernate映射domain中表结构的顺序,这些要进一步深入学习hibernate),明明在src的xml配置文件中没有引用到一个dto的类,但是总报找不到该类的映射,搜索了对应表字段,没有找到,还要说没有引用的类都没有找到。叫了一个有些经验的java程序员还是弄了近30小时,把修改的代码都还原了还是不行,不经意间我ctrl+shift+R定位时发现了WebRoot下的class中对应的xml配置文件,打开果然里面引用了对应的类,猛然间想起来昨天晚上不小心本应该修改src中的xml,结果修改成了class中的xml,删掉对应的类引用后,果然程序能正常运行了。不知为何hibernate中src中的xml没有同步到class中,可能是不能对哪里面增加的东西进行增加吧。

另外一个映射报错问题是因为我表对应类class路径写错了。

不要用Hibernate的getsession方法

晚上一位老程序员指出我hibernate迁移dao代码时不应该用getsession,有泄露连接的嫌疑。仔细搜索了果然这样。

  在 Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取 session进行数据操作而没有显式地关闭该session,那么程序表现为:每个session会打开一个connection,并且 connection会一直保持(因为没有显式地close).如果程序使用了c3p0连接池,则因为c3p0连接池默认最大连接数是15,程序会表现为当打开第15个连接时,程序处于停滞状态,等待从连接池获取新的连接.

  在同样条件下,使用HibernateTemplate进行数据操作,就没有连接数持续增长的情况,程序结束时连接数归零.这印证了spring文档上所说:HibernateTemplate会对session进行了管理,能够确保Session实例的正确打开和关闭.

  需要注意的是:在Spring环境里,即使我们使用Hibernate原生的API,比如这里所说的使用HibernateDaoSupport的getSession()方法得到Session进行数据操作(而不是使用Spring自己提供的API,比如HibernateTemplate),这些操作也依然会被纳入spring管理的事务中去.原因是通过getSession()方法得到Session是一个绑定到当前事务上的session.此处可参考:http://www.javaeye.com/topic/110801.这就是为什么Spring文档中提到的:You can implement DAOs based on the plain Hibernate 3 API, while still being able to participate in Spring-managed transactions.

如果程序使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor那将是另外一种情形了.

 

  简单总结: HibernateDaoSupport的getSession()得到的Session会参与Spring管理的事务中,但是不能自动的关闭. HibernateTemplate 除能参与到 Spring管理的事务中,还 能够确保Session实例的正确打开和关闭.

Myeclipse工具使用问题

今天再次学习了Myeclipse快捷键使用问题,发现原来我知道的快捷键真是太少了。再次学习有以下几个感受:

  1. myeclipse中可以直接在资源管理器中打开包浏览器中对应的文件,不用再属性中复制路径到资源管理器中(这两天我一直这样干的,感觉很不爽,原来myeclipse一直提供有工具栏这是我没有发现;主要感觉在资源管理器中打开提交svn,比直接在myeclipse中插件方便些,引用可以在提交对比修改代码时进行相应的修改操作。不用重复选择,且图标看着比插件中更具体清晰。)

默认情况下使用eclipse打开当前文件所在文件夹很麻烦,需要右键点击 Package Explorer 中的节点选择属性,然后复制路径,再打开资源管理器,然后再把路径粘贴进去。而MyEclipse一直有一个很好用的工具在工具栏上,只要选中 Package Explorer 的节点,一点击这个图标就可以在资源管理器中打开文件了。

MyEclipse 里面的插件名叫:Desktop toolbar。

于是我就在 Eclipse 的工具栏配置中寻找这个插件,可是没有找到,经过在网上查阅资料后,终于找到了一个模拟这个插件的办法,配置和操作起来也比较简单,在这里分享给大家。

依次展开如下菜单:

Run ---- External Tools ---- External Tools Configurations

1.在 program 下面新建一个工具;

2.在 Location 中填写 windows 资源管理器路径;

3.在 Arguments 中填写 ${container_loc};(不带分号)

4.选择 Common 选项卡;

5.选中 External Tools 复选框(使该项出现在工具栏中);

6.点击 Apply 按钮。

好了,单击工具栏上的 External Tools 按钮即可在资源管理器中打开你在 Package Explorer 中选中的文件所在的目录了。

  1. 自定义快捷键:ctrl+shift+1自动定位到当前文件在包浏览器中的位置,alt+shift+w也可以尝试下。Ctrl+K自动定位上一个或下一个关键字类似F3。
  2. Ctrl+1,ctrl+D之类的快捷键原来以为没用,现在发现真的很好用。感觉进一步熟悉MyEclipse快捷键操作之后基本可以抛弃鼠标,只用键盘操作。

posted on 2013-02-05 21:09  时间朋友  阅读(151)  评论(0编辑  收藏  举报

导航