原因是modusr.remove()执行之后并没有马上把database里面的记录delete掉的
你可以在modUsrHome.create之前再一次调用findByPrimaryKey,强制jboss刷新entity bean cach,然后再create

解决方案 »

  1.   


    恩,你说的很对,我也认为肯定是cache没有及时更新,因为我等了20分钟左右再去操作是可以执行的,也就是说他的更新在20分钟左右。我也用了你的方法,也提示记录确实已经删除了。
    15:10:41,974 INFO  [STDOUT] 记录未找到:javax.ejb.ObjectNotFoundException: No su
    ch entity!但是接下来的错误依旧。不知道在JBOSS中那里可以设置更新时间的参数?
      

  2.   

    哈哈,JBOSS就不如人家的WEBLOGIC好用,WEBLOGIC开发的CMP真的很不错的,性能优化,工作简单
      

  3.   

    那你把findByPrimaryKey放在try catch里面就ok了,这条语句肯定会出错的,应为刷新完了cache,entity bean肯定不存在了还有一种方法在xml里面指定不用cache,具体你自己找一找资料看一下怎么设置的吧,这方法对性能有一定影响
      

  4.   


    谢谢cugarwang。对,我是把findByPrimaryKey放在try catch里面,打印出上述错误是我想确认一下数据是否真的已经删除。程序我还是让它继续执行的,就是执行modUsrHome.create("demo","01");还是出来原来的错误:“INSERTING AN ALREADY EXISTING BEAN”。第二种方法:我在XML中的cache是JBOSS默认的1000。我去改小一点试试但我也怕影响性能啊。。
      

  5.   


    改了cache后好象还是没什么效果。我改的是实体bean对应的            <list-cache-max>10</list-cache-max>
    整个配置如下:        <entity>
                <ejb-name>TsModUsrEtyEJB</ejb-name>
                <table-name>ts_modusr</table-name>
                <ejb-designer-id>TsModUsrEtyEJB</ejb-designer-id>
                <datasource>java:/entsys</datasource>
                <datasource-mapping>Sybase</datasource-mapping>
                <create-table>false</create-table>
                <remove-table>false</remove-table>
                <read-only>false</read-only>
                <time-out>30</time-out>
                <pk-constraint>true</pk-constraint>
                <fk-constraint>true</fk-constraint>
                <row-locking>false</row-locking>
                <preferred-relation-mapping>foreign-key</preferred-relation-mapping>
                <strategy>on-load</strategy>
                <page-size>1000</page-size>
                <eager-load-group>*</eager-load-group>
                <list-cache-max>10</list-cache-max>
                <cmp-field>
      

  6.   

    那用transaction吧,delete以后吧transaction commit,然后再create
      

  7.   


    你是指直接在session bean中连接数据库,然后递交SQL语句执行删除?
      

  8.   


    我整个工程都是从weblogic转移过来的,如果全要改代码的话,工作量将会很大
      

  9.   

    把server\default\conf\standardjboss.xml 里面的
    <container-configuration>
    <container-name>Standard CMP EntityBean</container-name>
      <commit-option>A</commit-option>
    改成C试一试
    然后在jboss.xml里面加上一条
    <configuration-name>Standard CMP EntityBean</configuration-name>