我正在尝试将我的耳朵从玻璃鱼2升级到玻璃鱼3。我们曾经将会话bean和我们的实体都放在一个罐子文件中。我了解到,我需要将它们放在单独的jar文件中,以便能够部署到玻璃鱼3。我这样做的方法是创建一个新的jar并将session bean, ejb-jar.xml
, persistence.xml
和 sun-ejb-jar.xml
移动到其中。会话bean lib将旧的lib作为依赖性。旧的lib仍然包含我们使用过的自定义Exception
类以及实体以及几乎所有其他曾经存在的东西。
但是我从集成测试中注意到的是,当异常抛出时,交易不会像以前那样回滚。我现在仍在部署到GF2。除了这个微妙的问题外,一切似乎都在起作用。如何解决此问题?我需要将这些Exception
类移动到Session Bean Jar吗?
这是以下例外的一个示例:
@ApplicationException(rollback=true)
public class MessageOutOfOrderException extends ConditionException { //this is the one that gets thrown
//...
}
@ApplicationException(rollback=true)
public class ConditionException extends Exception { //this is the parent. It also gets thrown directly sometimes
//...
}
这是一个gf2 bug:https://java.net/jira/jira/browse/glassfish-fish-5183
解决方法是修改您的ejb-jar.xml,然后将类似的行添加到其中:
<assembly-descriptor>
<application-exception>
<exception-class>com.blah.EntityAccessException</exception-class>
<rollback>true</rollback>
</application-exception>
我希望GF3不需要这样做。