读书人

Jboss4.05+EJB3+oracle的实体操作非常

发布时间: 2012-10-26 10:30:59 作者: rapoo

Jboss4.05+EJB3+oracle的实体操作非常之慢问题请教
Jboss4.05+EJB3+Oracle
现写了一个简单的BBS:
freemarker+struts2---->EJB3----->DB。
出现如下问题,
1、所有SQL语句在程序中运行时间都很长,长的不可思议,拿到数据库中直接执行(pl/sql developer)非常快,,说明语句是没问题的,
2、怀疑DB连接问题,netstat -na观察服务器和客户端,都没问题,连接很正常。
3、怀疑JBOSS方面的配置问题,可单独写个例子,跑的欢的很,一点问题没有,速度奇快。
4、怀疑此程序问题,可此程序异常简单,
客户端是JSP,代码如下:

      em.createQuery("select bf  from bbs_forum bf  where bf.forumtype=:Type and bf.forumstatu=:forumstatu").setParameter("forumstatu",forumstatu)         .setParameter("Type", Type)          .getResultList();      em.createQuery("select bf  from bbs_forum bf  where bf.forumtype=:Type and bf.forumstatu=:forumstatu").setParameter("forumstatu",forumstatu)         .setParameter("Type", Type)          .getResultList();      em.createQuery("select bf  from bbs_forum bf  where bf.forumtype=:Type and bf.forumstatu=:forumstatu").setParameter("forumstatu",forumstatu)         .setParameter("Type", Type)          .getResultList();      em.createQuery("select bf  from bbs_forum bf  where bf.forumtype=:Type and bf.forumstatu=:forumstatu").setParameter("forumstatu",forumstatu)         .setParameter("Type", Type)          .getResultList();return null;

换成这个看看是否时间会变成四秒? 2 楼 wtb 2007-05-09 测试过,换个普通语句确实没问题,上面我就测试过,换个表,换个最普通的查询就没问题,不过有点我没想明白,这个语句我直接拿到oracle中运行只有45ms,在jboss中跑怎么就要2s钟了?
事务没问题,此问题,我已设置了不需要事务,但支持(改成SUPPORTS)事务方面很正常,数据库目前就一个在使用,不存在并发
按楼上兄弟的做法,复制了几份查询,,,所需时间还是那么多。 3 楼 抛出异常的爱 2007-05-09 wtb 写道测试过,换个普通语句确实没问题,上面我就测试过,换个表,换个最普通的查询就没问题,不过有点我没想明白,这个语句我直接拿到oracle中运行只有45ms,在jboss中跑怎么就要2s钟了?
事务没问题,此问题,我已设置了不需要事务,但支持(改成SUPPORTS)事务方面很正常,数据库目前就一个在使用,不存在并发
按楼上兄弟的做法,复制了几份查询,,,所需时间还是那么多。第二次是否会快一点?
有时实例初始化会慢一点 4 楼 wtb 2007-05-09 不,,我刷新N次都是一样。
不过我找到一个原因之所在,,那就是我的关联比较复杂,有的地方用到了实体导航,引起大规模装载。。。
现在我把关联全改成:fetch = FetchType.LAZY,速度有所提升。
那这肯定是问题之一:
但是,我的问题又来了,
1、用LAZY,前台(freemarker)中不能导航了,非常不爽
2、不LAZY,前台能导航,可一时解决不了影响速度的问题。
以前用hibernaet的时候,使用open session in view,就轻松解决延迟加载又能实现导航功能。
但ejb3的实体生命周期在Bean的方法调用结束就结束了,如果关联是延迟加载,则无法实现导航,,不知道高人有何好的解决方法?,

读书人网 >操作系统

热点推荐