无法实施 Rational Team Concert (RTC) 普通 jar 以通过来自 WebSphere Server 应用程序的 REST API 调用创建工作项
Unable to implement Rational Team Concert (RTC) plain jars to create work items via REST API calls from a WebSphere Server Application
当尝试将 RTC plain jar 集成到自定义的 WebSphere 服务器应用程序中时,以下代码行出现异常。
this.teamRepository = TeamPlatform.getTeamRepositoryService().getTeamRepository(this.repositoryURI);
异常:
[12/2/15 16:04:19:883 SGT] 000000a4 BusinessExcep E CNTR0020E: EJB
threw an unexpected (non-declared) exception during invocation of
method "createTestAutoDefect" on bean
"BeanId(RTCWebClientEAR#RTCWebClient.war#RTCWorkItemHandler, null)".
Exception data: java.lang.NoClassDefFoundError:
com.ibm.team.repository.client.internal.ContributorManager
(initialization failure) at
java.lang.J9VMInternals.initialize(J9VMInternals.java:177) at
com.ibm.team.repository.client.internal.TeamRepository.<init>(TeamRepository.java:427)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.createSharedTeamRepository(TeamRepositoryService.java:526)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:113)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:132)
...
Caused by: java.lang.IllegalArgumentException: The type name
Contributor and the namespace URI com.ibm.team.repository do not
resolve to an IItemType. at
com.ibm.team.repository.common.internal.querypath.AbstractQueryPathModel$Implementation.getItemType(AbstractQueryPathModel.java:192)
at
com.ibm.team.repository.common.query.IQuery$Factory.newInstance(IQuery.java:93)
at
com.ibm.team.repository.client.internal.ContributorManager.createAllContributorsQuery(ContributorManager.java:72)
at
com.ibm.team.repository.client.internal.ContributorManager.<clinit>(ContributorManager.java:60)
at java.lang.J9VMInternals.initializeImpl(Native Method) at
java.lang.J9VMInternals.initialize(J9VMInternals.java:237) at
com.ibm.team.repository.client.internal.TeamRepository.<init>(TeamRepository.java:427)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.createSharedTeamRepository(TeamRepositoryService.java:526)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:113)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:132)
似乎 类 RTC plain jar 没有正确加载。
这些 jar 被放入托管实现 RTC 功能的 Web 项目的 EAR 的库文件夹中。
看this thread and this one,好像是:
- 使用不可执行的 jar 文件时出现问题
- 或者,如 in here,类路径中没有所有必需的 jar 文件的症状
通过如下调整 WebSphere 的 class 加载行为解决了该问题:
在 RAD(eclipase 核心)IDE 中,右键单击包含 RTC 客户端 Web 项目的 EAR
-> Java EE
-> 打开 WebSphere Application Server Deployment,转到 Application 部分并设置 Classloader mode: PARENT_LAST and WAR classloader policy: 申请
通过以下方式找到此解决方案:https://jazz.net/forum/questions/75680/cant-connect-to-jazz-server-in-was-70?page=1&focusedAnswerId=75682#75682
原因很可能是由于 class 加载行为导致 eclipse classes 中缺少插件配置。
WebSphere 是通过像 eclipse 这样的 OSGI 技术实现的,因此默认情况下,eclipse 平台 classes 是从 WebSphere 加载的,而不是 EAR 应用程序中包含的 RTC 客户端库(普通 RTC jar 文件)。
因此,一个可能的解决方案是反转 class 加载策略。
当尝试将 RTC plain jar 集成到自定义的 WebSphere 服务器应用程序中时,以下代码行出现异常。
this.teamRepository = TeamPlatform.getTeamRepositoryService().getTeamRepository(this.repositoryURI);
异常:
[12/2/15 16:04:19:883 SGT] 000000a4 BusinessExcep E CNTR0020E: EJB
threw an unexpected (non-declared) exception during invocation of
method "createTestAutoDefect" on bean
"BeanId(RTCWebClientEAR#RTCWebClient.war#RTCWorkItemHandler, null)".
Exception data: java.lang.NoClassDefFoundError:
com.ibm.team.repository.client.internal.ContributorManager
(initialization failure) at
java.lang.J9VMInternals.initialize(J9VMInternals.java:177) at
com.ibm.team.repository.client.internal.TeamRepository.<init>(TeamRepository.java:427)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.createSharedTeamRepository(TeamRepositoryService.java:526)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:113)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:132)
...
Caused by: java.lang.IllegalArgumentException: The type name
Contributor and the namespace URI com.ibm.team.repository do not
resolve to an IItemType. at
com.ibm.team.repository.common.internal.querypath.AbstractQueryPathModel$Implementation.getItemType(AbstractQueryPathModel.java:192)
at
com.ibm.team.repository.common.query.IQuery$Factory.newInstance(IQuery.java:93)
at
com.ibm.team.repository.client.internal.ContributorManager.createAllContributorsQuery(ContributorManager.java:72)
at
com.ibm.team.repository.client.internal.ContributorManager.<clinit>(ContributorManager.java:60)
at java.lang.J9VMInternals.initializeImpl(Native Method) at
java.lang.J9VMInternals.initialize(J9VMInternals.java:237) at
com.ibm.team.repository.client.internal.TeamRepository.<init>(TeamRepository.java:427)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.createSharedTeamRepository(TeamRepositoryService.java:526)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:113)
at
com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:132)
似乎 类 RTC plain jar 没有正确加载。
这些 jar 被放入托管实现 RTC 功能的 Web 项目的 EAR 的库文件夹中。
看this thread and this one,好像是:
- 使用不可执行的 jar 文件时出现问题
- 或者,如 in here,类路径中没有所有必需的 jar 文件的症状
通过如下调整 WebSphere 的 class 加载行为解决了该问题:
在 RAD(eclipase 核心)IDE 中,右键单击包含 RTC 客户端 Web 项目的 EAR -> Java EE -> 打开 WebSphere Application Server Deployment,转到 Application 部分并设置 Classloader mode: PARENT_LAST and WAR classloader policy: 申请
通过以下方式找到此解决方案:https://jazz.net/forum/questions/75680/cant-connect-to-jazz-server-in-was-70?page=1&focusedAnswerId=75682#75682
原因很可能是由于 class 加载行为导致 eclipse classes 中缺少插件配置。
WebSphere 是通过像 eclipse 这样的 OSGI 技术实现的,因此默认情况下,eclipse 平台 classes 是从 WebSphere 加载的,而不是 EAR 应用程序中包含的 RTC 客户端库(普通 RTC jar 文件)。
因此,一个可能的解决方案是反转 class 加载策略。