那是因为你在客户端没有启动事务。
我想你应该设置事务是Required的级别吧客户端调用setEname的时候没有带有事务,所以服务器真正调用EJB的方法的时候
就会启动一个事务,然后在方法退出之后进行提交(如果有异常则会进行回滚)所以你中断了客户端,其实两次的执行都已经是启动并提交了两次事务了

解决方案 »

  1.   

    能说的详细一点吗?在哪个地方设置事务是Required的级别?
    多谢!
      

  2.   

    我说的很清楚了吧,因为你Client调用中说不带事务的,所以EJB会自动启动事务并提交
    每个setEname都会经过启动和提交,这个是Required级别的做法Required是在你的EJB发布文件中指定的,ejb-jar.xml
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>MyServer</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>就是这里了
            </container-transaction>
        </assembly-descriptor>
    你如果要实现你的要求,你可以在Client lookup远程的UserTransation对象
    具体我没有用过,可以看看资料。