我使用的是Glassfish 3.1.2.2。我有一个具有TransactionManagementType EJB(称为MyBean)的应用程序。BEAN设置在类级别上。在业务方法中,我从数据源获取连接,将连接上的auto commit设置为false,对数据库表执行INSERT/DELETE/UPDATE操作,然后在最后提交。然后我有一个在单独类中实现的web服务(称为MyWebService),它使用MyBean调用业务方法。客户端应用程序是一个独立的Java应用程序,它具有使用MyWebService的WSDL生成的web服务客户端。客户端将超时时间设置为10秒。如果对MyWebService的调用超过10秒,客户端将获得一个超时异常。这都没问题。我遇到的问题是,在Glassfish日志中,我看到MyBean做了所有的工作,也提交了更改,但我没有看到数据库中的数据。这快把我逼疯了!有人知道是怎么回事吗?
我发现web service、Java EE甚至GlassFish都不是罪魁祸首。有罪的一方是客户端,它也对数据库进行一些更新。客户端负责覆盖预期的结果。