Bug 873866
Summary: | Enable API Diff Checkbuild between JON minor/micro versions | ||
---|---|---|---|
Product: | [JBoss] JBoss Operations Network | Reporter: | Mike Foley <mfoley> |
Component: | Plugin Container | Assignee: | Lukas Krejci <lkrejci> |
Status: | CLOSED CURRENTRELEASE | QA Contact: | Mike Foley <mfoley> |
Severity: | urgent | Docs Contact: | |
Priority: | urgent | ||
Version: | JON 3.1.1 | CC: | jshaughn, lkrejci, loleary, spinder |
Target Milestone: | ER03 | ||
Target Release: | JON 3.2.0 | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2014-01-02 20:43:15 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | 803737 | ||
Bug Blocks: | 1012435 |
Description
Mike Foley
2012-11-06 20:58:41 UTC
We need a jenkins job running these checks Jenkins job comparing JON3.1.1 artifacts against release/jon3.1.x branch has been created - rhq-release-api-checks-against-latest-released documenting the jenkins job is create and running. http://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/rhq-release-api-check-against-latest-released/ tests are currently failing. please set to ON_QA again when the job is passing We need to think about what we want from the API check job for the JON 3.2.0 release. What's the API compatibility requirements for micro/minor/major releases? micro=back-compat, only bugfixes minor=back-compat + new features major=incompatible changes + new features? If that's the case, we can either declare this BZ a noop, because we should have the same rules in RHQ or we could be extra dutiful and manually check our intentional-changes-since-*.xml files for incompatible changes that slipped in by accident. @Lukas, from a supportability perspective, the compatibility requirements you outline are correct:
> What's the API compatibility requirements for micro/minor/major releases?
>
> micro=back-compat, only bugfixes
> minor=back-compat + new features
> major=incompatible changes + new features?
The only note I will make is that even on major releases we should be backward compatible as much as possible but this would be the only place a breaking change could be inserted with the appropriate approval from the product team. Otherwise, any new functionality or breaking changes would have to be wrapped by product specific API definitions as appropriate. But, in general, the major release point is where such conversations can take place. Prior to that (micro or minor), any breaking change that requires a user to recompile their client application code or update their libraries or change command-line scripts is unacceptable.
If we are already doing this upstream then perhaps this is a step in the right direction but we should still duplicate this task as part of the product build. Currently we share the same repository but there is always the chance that will change. If so, we must ensure that the API check performed for the product build can only be manipulated by the product release and build teams and that any changes there are considered very carefully prior to them being submitted.
I think the biggest issue we must deal with is that even after the API check jobs were put into place, we still seem to be picking up breaking changes in the public APIs (remote API, plug-in APIs, domain API, etc).
The end goal should be that I can validate the 3.1.0, 3.1.1, and 3.1.2 build against the 3.2 GA build and get the same results.
Commits in master branch minimizing the API: commit 9b38a7ecf4853047cfc3635bff6ec270954e3541 Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 17:43:01 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. Commit 0ba8c5f (among other things) removed several public constants in MeasurementScheduleCriteria because they were improperly named and didn't do what they seemed to. Users might be using those constants even if they don't do what they're supposed to. The constants have therefore been re-introduced with a deprecation notice. commit 8de9364b5f83e26bdda3eb16543c0ba13768393d Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 16:20:45 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. Commit 26959a31d8c37bcb86dc6a845b5707a277bff3cb made the constructor of the DatabaseQueryUtility private, which it should be, and removed an unused class. While the chances of anyone either instantiating the utility class or using the absolutely useless DatabaseQueryUtility.StatementParameter are very slim, we need to keep API back-compat. The public constructor and the class have been reintroduced with a deprecation notice. commit f78beeb0deff4fc4801f2236881e45d659bd578f Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 15:06:43 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. The fix for bug 840512 changed the way we handle the value of an obfuscated property, which rendered the obfuscate() method unused. It has been removed which unfortunately is an API breaking change due to its protected visibility. While the chances of anyone using that method are miniscule we cannot break the API. The method was re-introduced but made a NOOP so that it doesn't break the obfuscation. The deprecation notice on the method suggests to stop using it. commit aeae80458d5175f2e5c3cc164943c561da2cc0f3 Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 15:02:58 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. The fix for bug 1000006 declared the constructor of o.r.c.d.configuration.ConfigurationUtility private. It previously had the default pulic constructor and hence this was a API breaking change. While the utility class should have had the private constructor in first place, we cannot break the API, so the public constructor has been re-introduced with a deprecation notice. commit 53f3329850efcb7fd0e18fca2964c8c4dbb6a3b1 Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 14:46:57 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. Commit 85f75e0 removed 2 enum fields from the server details, because they are no longer used due to our move from DB to Cassandra for metric storage. Nevertheless the clients might be using those fields to get back that information. To retain the backwards compatibility, we need to keep those enum fields, making the server details work without recompilation. The server details will no longer contain any information for the for those fields. The fact that some information might be missing is part of the contract of the ServerDetails class though, so the users should be able to handle that situation. commit be6f70ce0ae66b544965636f503bbe6e4732958b Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 14:40:42 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. Commit a4b78eb6e1adeffaa519115a9ef07b3f00025168 fixed the handling of the server status, but changed the signature of o.r.c.d.cloud.Server#clearStatus() method in an incompatible way. Adding the old method back with a deprecation notice. The chances of anyone using this method are miniscule but we need to retain back-compat. commit 9a5a5a7a1b9153968474a459f097e73d5421e038 Author: Lukas Krejci <lkrejci> Date: Fri Sep 27 14:37:22 2013 +0200 [BZ 873866] - Minimizing API changes between JON 3.1.2.GA and JON 3.2.0.GA. Bug 888927 changed the signature of the AlertConditionAvailabilityCategoryComposite class to add a missing parameter. While the chances of anyone using this method miniscule, we need to retain the back-compat. Therefore I added the wrong constructor back with a deprecation notice. commit 92aaf569774b9328812f447cc940719287540883 Author: Lukas Krejci <lkrejci> Date: Mon Sep 23 15:37:06 2013 +0200 Adding intentional api changes for the new methods ported over from RHQ 4.4.0. commit 2a152b1f670099c7f3341abe8ca35bac11ff29bd Author: Lukas Krejci <lkrejci> Date: Fri Sep 20 21:09:02 2013 +0200 (Almost) regain back-compat with RHQ 4.4.0 in script bindings. commit 3885d705e8b31485fae92e8df5ae2209a4c6a5d0 Author: Jirka Kremser <jkremser> Date: Mon Sep 30 16:55:49 2013 +0200 api checks: reverting a change that broke JON 3.2 backward compatibility commit 1b567f2f9eb2e81f86dbedf60cf85b42283aea05 Author: Jirka Kremser <jkremser> Date: Thu Sep 26 22:36:43 2013 +0200 api checks: Adding back the org.rhq.enterprise.server.measurement.MeasurementAggregate see the commit c2a609f48 for more details. commit c2a609f48d5f364310060d031069495679b69c6f Author: Jirka Kremser <jkremser> Date: Thu Sep 26 22:32:46 2013 +0200 Adding back the org.rhq.enterprise.server.measurement.MeasurementAggregate because of the JON 3.2 backward compatibility breakage (for EJB remote clients). This contains also adding a new method, deprecating the old method and the added class so that it can be removed in the next major release. This is a complete set of differences between JON 3.1.2.GA and JON 3.2.0 as of 2013-10-01. This comes from doing: cat `find $JON_REPO_CHECKOUT/jon/approved-api-changes -name '*.xml'` <?xml version="1.0"?> <differences> <!-- since 4.4.0 --> <difference> <className>org/rhq/core/pluginapi/inventory/ResourceContext</className> <differenceType>7004</differenceType><!-- number of args changed --> <method>ResourceContext(*)</method> <justification>Instances of this class are provided by the API, it is not supposed to be instantiated by users.</justification> </difference> <difference> <className>org/rhq/core/pluginapi/upgrade/ResourceUpgradeContext</className> <differenceType>7004</differenceType><!-- number of args changed --> <method>ResourceUpgradeContext(*)</method> <justification>Instances of this class are provided by the API, it is not supposed to be instantiated by users.</justification> </difference> <!-- since 4.6.0 --> <difference> <className>org/rhq/core/pluginapi/inventory/DisabledResourceDiscoveryComponent</className> <differenceType>8001</differenceType><!-- Class Removed --> <justification>This class was used as a hot fix (13cb988bb4835289393c8e3f736918651d6e2bae) to some a issue on Jan 25 2013. Now it is not used anymore, because the resource type ignoring solves the issue.</justification> </difference> <difference> <className>org/rhq/core/pluginapi/inventory/DisabledResourceComponent</className> <differenceType>8001</differenceType><!-- Class Removed --> <justification>This class was used as a hot fix (13cb988bb4835289393c8e3f736918651d6e2bae) to some a issue on Jan 25 2013. Now it is not used anymore, because the resource type ignoring solves the issue.</justification> </difference> <!-- since 4.6.0 --> <difference> <className>org/rhq/core/domain/criteria/BaseCriteria</className> <differenceType>7012</differenceType><!-- method added --> <method>void addSortId(org.rhq.core.domain.util.PageOrdering)</method> <justification> We are adding a default addSortId operation to all criteria to support paging through large result sets. This interface is not supposed to be implemented by the users. </justification> </difference> <difference> <className>org/rhq/core/domain/criteria/BaseCriteria</className> <differenceType>7012</differenceType><!-- method added --> <method>java.util.List getOrderingFieldNames()</method> <justification> We are adding an operation to return FieldOrdering to support paging through large result sets. This interface is not supposed to be implemented by the users. </justification> </difference> <difference> <className>org/rhq/core/domain/criteria/SavedSearchCriteria</className> <differenceType>6003</differenceType> <!-- Value of compile-time constant has changed --> <field>serialVersionUID</field> <justification> The serialization format of this class has changed. </justification> </difference> <difference> <className>org/rhq/core/domain/criteria/SavedSearchCriteria</className> <differenceType>6010</differenceType> <!-- Field Less Accessible --> <field>serialVersionUID</field> <justification> The serialVersionUID should be private. This fields is meant to be used by JVM not by users. </justification> </difference> <!-- since 4.7.0 --> <difference> <className>org/rhq/core/domain/measurement/MeasurementBaseline</className> <differenceType>6001</differenceType><!-- removed field --> <field>NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_ORACLE</field> <justification> Removing MeasurementBaseline.NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_ORACLE. The constants for native queries shouldn't be exposed at all. </justification> </difference> <difference> <className>org/rhq/core/domain/measurement/MeasurementBaseline</className> <differenceType>6001</differenceType><!-- removed field --> <field>NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_POSTGRES</field> <justification> Removing MeasurementBaseline.NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_POSTGRES. The constants for native queries shouldn't be exposed at all. </justification> </difference> <difference> <className>org/rhq/core/domain/measurement/MeasurementBaseline</className> <differenceType>6001</differenceType><!-- removed field --> <field>NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_SQLSERVER</field> <justification> Removing MeasurementBaseline.NATIVE_QUERY_CALC_FIRST_AUTOBASELINE_SQLSERVER. The constants for native queries shouldn't be exposed at all. </justification> </difference> <!-- since 4.4.0 --> <difference> <className>org/rhq/enterprise/server/content/RepoManagerRemote</className> <differenceType>7012</differenceType><!-- method added to an interface --> <method>byte[] getPackageVersionBytes(org.rhq.core.domain.auth.Subject, int, int)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/measurement/MeasurementDataManagerRemote</className> <differenceType>7012</differenceType><!-- method added to an interface --> <method>java.util.Set findLiveDataForGroup(org.rhq.core.domain.auth.Subject, int, int[], int[])</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <!-- since 4.5.1 --> <difference> <className>**/WebservicesRemote</className> <differenceType>8001</differenceType> <!-- class removed --> <justification>Removed already deprecated web services in this release</justification> </difference> <difference> <className>**/WebServiceTestRemote</className> <differenceType>8001</differenceType> <!-- class removed --> <justification>Removed already deprecated web services in this release</justification> </difference> <difference> <className>**/RemoteWsInvocationHandler</className> <differenceType>8001</differenceType> <!-- class removed --> <justification>Removed already deprecated web services in this release</justification> </difference> <difference> <className>**/ServerVersion</className> <differenceType>8001</differenceType> <!-- class removed --> <justification>Removed already deprecated web services in this release, this file was used for WS client-server compatibility</justification> </difference> <difference> <className>org/rhq/enterprise/server/operation/OperationManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.operation.bean.ResourceOperationSchedule scheduleResourceOperationUsingCron(org.rhq.core.domain.auth.Subject, int, java.lang.String, java.lang.String, int, org.rhq.core.domain.configuration.Configuration, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/operation/OperationManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.operation.bean.GroupOperationSchedule scheduleGroupOperationUsingCron(org.rhq.core.domain.auth.Subject, int, int[], boolean, java.lang.String, org.rhq.core.domain.configuration.Configuration, java.lang.String, int, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <!-- since 4.6.0 --> <difference> <className>org/rhq/enterprise/server/resource/ResourceManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void uninventoryAllResourcesByAgent(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.resource.Agent)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/resource/ResourceManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void uninventoryResourcesOfResourceType(org.rhq.core.domain.auth.Subject, int)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/discovery/DiscoveryBossRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void unignoreAndImportResources(org.rhq.core.domain.auth.Subject, int[])</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/resource/ResourceTypeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void setResourceTypeIgnoreFlagAndUninventoryResources(org.rhq.core.domain.auth.Subject, int, boolean)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <!-- since 4.7.0 --> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleFile addBundleFileViaURL(org.rhq.core.domain.auth.Subject, int, java.lang.String, java.lang.String, org.rhq.core.domain.content.Architecture, java.lang.String, java.lang.String, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createBundleVersionViaURL(org.rhq.core.domain.auth.Subject, java.lang.String, java.lang.String, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This class is never to be implemented by users.</justification> </difference> <!-- since 4.8.0 --> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findNotAcknowledgedStorageNodeAlerts(org.rhq.core.domain.auth.Subject)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findNotAcknowledgedStorageNodeAlerts(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findAllStorageNodeAlerts(org.rhq.core.domain.auth.Subject)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findAllStorageNodeAlerts(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.cloud.StorageNodeConfigurationComposite retrieveConfiguration(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>boolean updateConfiguration(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNodeConfigurationComposite)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findNotAcknowledgedStorageNodeAlerts(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findAllStorageNodeAlerts(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void deployStorageNode(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void deployStorageNode(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void undeployStorageNode(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.cloud.StorageNode)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/cloud/StorageNodeManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void runClusterMaintenance(org.rhq.core.domain.auth.Subject)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void assignBundlesToBundleGroups(org.rhq.core.domain.auth.Subject, int[], int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleGroup createBundleGroup(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.bundle.BundleGroup)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createInitialBundleVersionViaByteArray(org.rhq.core.domain.auth.Subject, int[], byte[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createInitialBundleVersionViaFile(org.rhq.core.domain.auth.Subject, int[], java.io.File)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createInitialBundleVersionViaRecipe(org.rhq.core.domain.auth.Subject, int[], java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createInitialBundleVersionViaURL(org.rhq.core.domain.auth.Subject, int[], java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleVersion createInitialBundleVersionViaURL(org.rhq.core.domain.auth.Subject, int[], java.lang.String, java.lang.String, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void deleteBundleGroups(org.rhq.core.domain.auth.Subject, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.util.PageList findBundleGroupsByCriteria(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.criteria.BundleGroupCriteria)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void unassignBundlesFromBundleGroups(org.rhq.core.domain.auth.Subject, int[], int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/bundle/BundleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>org.rhq.core.domain.bundle.BundleGroup updateBundleGroup(org.rhq.core.domain.auth.Subject, org.rhq.core.domain.bundle.BundleGroup)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/authz/RoleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void addBundleGroupsToRole(org.rhq.core.domain.auth.Subject, int, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/authz/RoleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void addRolesToBundleGroup(org.rhq.core.domain.auth.Subject, int, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/authz/RoleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void removeBundleGroupsFromRole(org.rhq.core.domain.auth.Subject, int, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/authz/RoleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void removeRolesFromBundleGroup(org.rhq.core.domain.auth.Subject, int, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/authz/RoleManagerRemote</className> <differenceType>7012</differenceType> <!-- method added to an interface --> <method>void setAssignedBundleGroups(org.rhq.core.domain.auth.Subject, int, int[])</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <!-- Cherry-picks since 4.9.0 --> <difference> <className>org/rhq/enterprise/server/content/ContentManagerRemote</className> <differenceType>7012</differenceType> <method>org.rhq.core.domain.content.PackageVersion createPackageVersionWithDisplayVersion(org.rhq.core.domain.auth.Subject, java.lang.String, int, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/content/ContentManagerRemote</className> <differenceType>7012</differenceType> <method>java.lang.String createTemporaryContentHandle()</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/content/ContentManagerRemote</className> <differenceType>7012</differenceType> <method>void uploadContentFragment(java.lang.String, byte[], int, int)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/enterprise/server/measurement/MeasurementDataManagerRemote</className> <differenceType>7012</differenceType><!-- method added to iface --> <method>org.rhq.core.domain.measurement.MeasurementAggregate getMeasurementAggregate(org.rhq.core.domain.auth.Subject, int, long, long)</method> <justification>Adding a method to a remote API interface is safe. This is newly implemented functionality.</justification> </difference> <difference> <className>org/rhq/bindings/client/AbstractRhqFacadeProxy</className> <differenceType>7005</differenceType> <!-- arg type changed --> <method>AbstractRhqFacadeProxy(org.rhq.bindings.client.RhqFacade, org.rhq.bindings.client.RhqManagers)</method> <to>AbstractRhqFacadeProxy(org.rhq.bindings.client.RhqFacade, org.rhq.bindings.client.RhqManager)</to> <justification> This is an infrastructural class for support of scripted environments. It is not meant to be used by 3rd parties. </justification> </difference> <difference> <className>org/rhq/bindings/client/AbstractRhqFacadeProxy</className> <differenceType>7004</differenceType> <!-- arg number changed --> <method>java.lang.Object doInvoke(java.lang.Object, java.lang.reflect.Method, java.lang.Class[], java.lang.Object[])</method> <justification> This is an infrastructural class for support of scripted environments. It is not meant to be used by 3rd parties. </justification> </difference> <difference> <className>org/rhq/bindings/client/AbstractRhqFacadeProxy</className> <differenceType>7006</differenceType> <!-- return type changed --> <method>org.rhq.bindings.client.RhqManagers getManager()</method> <to>org.rhq.bindings.client.RhqManager</to> <justification> This is an infrastructural class for support of scripted environments. It is not meant to be used by 3rd parties. </justification> </difference> <difference> <className>org/rhq/bindings/client/RhqFacade</className> <differenceType>7012</differenceType><!-- method added to iface --> <method>java.lang.Object getProxy(java.lang.Class)</method> <justification> This interface is not meant to be implemented by 3rd parties. This is therefore a safe change. </justification> </difference> <difference> <className>org/rhq/bindings/client/RhqFacade</className> <differenceType>7012</differenceType><!-- method added to iface --> <method>java.util.Map getScriptingAPI()</method> <justification> This interface is not meant to be implemented by 3rd parties. This is therefore a safe change. </justification> </difference> <difference> <className>org/rhq/bindings/util/ScriptAssert</className> <differenceType>7002</differenceType><!-- method removed --> <method>void assertEquals(java.lang.Object[], java.lang.Object[], java.lang.String)</method> <justification> This is an infrastructural class for support of scripted environments. The removal of this method does not affect the list of methods available in the scripts. On contrary, removing this override improves the method resolution in the script engines. </justification> </difference> <difference> <className>org/rhq/bindings/util/ScriptAssert</className> <differenceType>7002</differenceType><!-- method removed --> <method>void assertEquals(java.lang.Object[], java.lang.Object[])</method> <justification> This is an infrastructural class for support of scripted environments. The removal of this method does not affect the list of methods available in the scripts. On contrary, removing this override improves the method resolution in the script engines. </justification> </difference> </differences> Moving to ON_QA for testing. |