1

我们正在从 WAS 6.1 迁移到 8.5。我只是将我们在 6.1 中部署的 EAR 文件复制到了 8.5。该应用程序运行良好,我很高兴,直到 web-sphere 管理员决定打开 Java2 安全性。当前的 was.policy 文件有 java.security.AllPermission。但我想这不适用于 java2 安全性,所以我对其进行了更改并授予了对每个读/写文件的 io 权限。在此之后,所有与权限相关的错误都消失了,但我遇到了一个奇怪的异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wsJtaTm' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: 
Instantiation of bean failed; nested exception is 
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean]: 
Constructor threw exception; nested exception is
org.springframework.transaction.TransactionSystemException: Could not find WebSphere 5.1/6.0/6.1 TransactionManager factory class; nested exception is
java.lang.ClassNotFoundException: com.ibm.ws.Transaction.TransactionManagerFactory

我的春季交易是这样定义的:

<bean id="wsJtaTm"
    class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean" />

<bean id="transactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager" ref="wsJtaTm" />
</bean>

我不明白为什么当关闭 Java2 安全性时应用程序会工作,以及为什么当我打开 java2 安全性时它会抛出 ClassNotFound 异常。

据我所知,com.ibm.ws.Transaction.TransactionManagerFactory 应该由服务器本身加载,并且应该可供应用程序使用。我的应用程序中没有任何 jar 具有此类。

该错误源自 bean id wsJtaTm 的构造函数。我在 was.policy 文件中遗漏了什么吗?

在进一步的研究中,我发现这个类存在于服务器安装的插件文件夹中名为 com.ibm.ws.runtime.jar 的 jar 文件中。我不明白为什么打开 java2 安全性时这个 jar 变得不可见。

请注意我使用的是spring v2.5

请帮忙。

4

1 回答 1

0

该类com.ibm.ws.Transaction.TransactionManagerFactory不是 API,当启用 Java 2 安全性时,WebSphere Application Server 会限制对非 API 类的访问(如果应用程序可以访问内部类,它们可以轻松绕过 Java 2 安全性)。尝试使用 Spring's org.springframework.transaction.jta.WebSphereUowTransactionManager,它使用受支持的 UOWManager API。

于 2013-10-04T15:37:39.317 回答