Last updatedApr 1, 2019

Preparing for JIRA 7.6

This page covers changes in JIRA 7.6 that can affect add-on compatibility and functionality. This includes changes to the JIRA platform and the JIRA applications (JIRA Core, JIRA Software, JIRA Service Desk).

As a rule, Atlassian makes every effort to inform add-on developers of known API changes as far in advance as possible. Where possible, we attach release targets. Unless otherwise indicated, every change on this page is expected to be released with the first public release of the JIRA Server 7.6 products. We also make release milestones available prior to the release:

  • For JIRA Server, the JIRA development team releases a number of EAP milestones prior to the final release, for customers and developers to keep abreast of upcoming changes. For more information on these releases, see JIRA EAP Releases.
  • For JIRA Cloud, the JIRA team releases updates to the JIRA Cloud products on a weekly basis. Add-ons that integrate with the JIRA Cloud products via Atlassian Connect should use the JIRA REST API, which is subject to the Atlassian REST API Policy.

We will update this page as development progresses, so please stay tuned for more updates. We also recommend following the JIRA news on Atlassian Developers blog for important announcements and helpful articles.

Summary

The risk level indicates the level of certainty we have that things will break if you are in the "Affected" column and you don't make the necessary changes.

Change. Platform/ApplicationRisk level. Affects

Change: Priority schemes (UI changes)

Platform/Application: JIRA Core, JIRA Software

Risk level: medium

Affects: Add-on developers using APIs to manage priorities in JIRA, and administrators.

With JIRA 7.6, we're introducing priority schemes that change the way priorities are managed. Now, by using priority schemes, you can associate different sets of priorities with your project.

This doesn't change your configuration until you create some schemes and make use of them. After the upgrade, all priorities are moved to the default priority scheme, which works like a global list of priorities (always includes all existing priorities). The default priority scheme can't be edited or deleted.

See Priority schemes - release notes.

Change: Priority schemes (API changes)

 Platform/Application: JIRA Core, JIRA Software

 

Risk level: medium

Affects: Add-on developers using APIs to manage priorities in JIRA.

Together with priority schemes, we've added and changed some APIs so that plugins can manage them.

See API changes for plugin developers.

Change: API changes - experimental API

 Platform/Application: JIRA Service Desk

Risk level:low

Affects: With an upcoming release of JIRA Service Desk, a number of the methods in our API will be moving out of the experimental state and in to standard API state. For most of these components the API will remain unchanged, but for some there will be adjustments which will represent a breaking change. 

See API changes - experimental API.

JIRA platform changes

All changes in JIRA platform are also relevant for JIRA Core and JIRA Software.

Priority schemes - UI changes

For more information about managing priority schemes in the UI, see release notes.

Priority schemes - API changes for plugin developers

If you're a plugin developer, and want your plugin to manage priority schemes, take a look at this list of API changes. We've not only added new APIs that allow plugins to manage priority schemes, but we also changed the existing ones, which will most likely make your plugins incompatible. This is for priority schemes, the APIs for managing priorities don't change, but bear in mind that the current global list of priorities now becomes the default priority scheme, so your plugins might retrieve inaccurate data regarding priorities themselves. 

What's new?

We're adding these APIs to allow plugins to manage priority schemes. 

 Classname - com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

Method signatures:

Method signatureJavadoc
1
2
3
4
5
FieldConfigScheme createWithDefaultMapping(
  String name,
  String description,
  List<String> optionIds
);
Doc
1
2
3
4
FieldConfigScheme updateWithDefaultMapping(
  FieldConfigScheme fieldConfigScheme,
  List<String> optionIds
);
Doc
1
2
3
FieldConfig getFieldConfigForDefaultMapping(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
void delete(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
FieldConfigScheme getScheme(
  Project project
);
Doc
1
2
3
FieldConfigScheme getScheme(
  Long id
);
Doc
1
List<FieldConfigScheme> getAllSchemes();
Doc
1
2
3
boolean isDefaultScheme(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
FieldConfigScheme getDefaultScheme();
Doc
1
2
3
String getDefaultOption(
  IssueContext issueContext
);
Doc
1
2
3
String getDefaultOption(
	FieldConfig fieldConfig
);
Doc
1
2
3
4
void setDefaultOption(
  FieldConfig fieldConfig,
  String optionId
);
Doc
1
2
3
List<String> getOptions(
  IssueContext issueContext
);
Doc
1
2
3
List<String> getOptions(
  FieldConfig fieldConfig
);
Doc
1
2
3
4
void setOptions(
  FieldConfig fieldConfig,
  List<String> optionIds
);
Doc
1
2
3
void addOptionToDefault(
  String optionId
);
Doc
1
2
3
void removeOptionFromAllSchemes(
  String optionId
);
Doc
1
2
3
Collection<FieldConfigScheme> getAllRelatedSchemes(
  String optionId
);
Doc
1
2
3
4
void assignProject(
  @Nonnull FieldConfigScheme priorityFieldConfig,
  @Nonnull Project project
);
Doc
1
2
3
Set<Project> getProjectsWithScheme(
  @Nonnull FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
4
void unassignProject(
  @Nonnull FieldConfigScheme scheme,
  @Nonnull Project project
);
Doc

We're also adding new events for whenever a priority scheme is created, updated, or deleted.

Classname - com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

EventJavadoc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeCreatedEvent
Doc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeDeletedEvent
Doc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeUpdatedEvent
Doc

What's changing?

Some APIs also receive additional options, so that priorities are added or removed from priority schemes.

Classname - com.atlassian.jira.config.PriorityManager 

Method signatureChangeJavadoc
createPriorityIn addition to creating a priority, also adds this priority to the default priority scheme.Doc
removePriorityIn addition to removing a priority, also removes this priority from all priority schemes.Doc

What's deprecated?

These APIs are deprecated, and replaced by the new PrioritySchemeManager class.

com.atlassian.jira.config.PriorityManager

Method signatures:

  • setDefaultPriority
    Replacement: 

    com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager 

    #setDefaultOption(FieldConfig, String)

    Javadoc

  • getDefaultPriority
    Replacement: 

    com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

    #getDefaultOption(IssueContext)

    Javadoc

com.atlassian.jira.config.ConstantsManager

Method signatures:

  • getDefaultPriority
    Replacement: 

    com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

    #getDefaultOption(com.atlassian.jira.issue.context.IssueContext), or

    com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

    #getDefaultOption(com.atlassian.jira.issue.fields.config.FieldConfig)

    Javadoc

JIRA Service Desk changes

JIRA Service Desk has a number of elements of its API which are currently defined as experimental but that is about to change. With the 3.7.0 release a number of components were either deprecated for removal, or updated with details about how they will represent a breaking change in a future release. Well, those changes are coming now in the JIRA Service Desk 3.9.0 release. This release will also be moving the majority of the components in our API out of the experimental state and into a standard public API state. 

What's Changing?

A number of components will have breaking changes. The changes are relatively minor and revolve around changes to IDs that will be returning integers rather than longs. This helps us to align with the values that we are currently storing in the database and will stop us having to do a lot of unnecessary type conversion in the future. 

Classname

Breaking change

New method signature

ServiceDeskService

The getServiceDeskById method will require an integer rather than a long as the serviceDeskId.

Old method signature:

Either<

Old javadoc:

ServiceDeskService: getServiceDeskById

Either<

New javadoc:

ServiceDeskService: getServiceDeskById

PortalService

The getPortalForId method will request and integer rather than a long as the portalId.

Old method signature:

Either<

Old javadoc:

PortalService: getPortalForId 

Either<

New javadoc:

PortalService: getPortalForId

Queue

The return value for this method will return an integer rather than a long.

Old method signature:

long getId()

Old javadoc:

Queue: getId 

int getId()

New javadoc:

Queue: getId

The return value for this method will return an integer rather than a long.

Old method signature:

long getServiceDeskId()

Old javadoc:

Queue: getServiceDeskId

int getServiceDeskId()

New javadoc:

Queue: getServiceDeskId

QueueQuery

The return value for this method will return an integer rather than a long.

Old method signature:

Optional<Long> queueId();

Old javadoc:

Optional<Integer> queueId(); 

New javadoc:

 QueueQuery: queueId


The return value for this method will return an integer rather than a long.

Old method signature:

long serviceDeskId();

Old javadoc:

QueueQuery: serviceDeskId

int serviceDeskId();

New javadoc:

QueueQuery: serviceDeskId

QueueQuery Builder interface

The serviceDeskID interface will require an integer rather than a long as the serviceDeskId

Old method signature:

Builder serviceDeskId(

Old javadoc:

QueueQuery.Builder: serviceDeskId 

Builder serviceDeskId(

New javadoc:

The queueId interface will require an integer rather than a long as the queueId

Old method signature:

Builder queueId(

Old javadoc:

QueueQuery.Builder: queueId

Builder queueId(

New javadoc:

QueueQuery.Builder: queueId

 

QueueRequestQuery

The return values for this method will return an integer rather than a long

Old method signature:

longqueueId

Old javadoc:

intqueueId

New javadoc:

The return values for this method will return an integer rather than a long

Old method signature:

long serviceDeskId();

Old javadoc:

QueueRequestQuery: serviceDeskId

int serviceDeskId();

New javadoc:

QueueRequestQuery: serviceDeskId


QueueRequestQuery Builder interface

The serviceDeskID interface will require an integer rather than a long as the serviceDeskId

Old method signature:

Builder serviceDeskId(

Old javadoc:

Builder serviceDeskId(

New javadoc:

The queueId interface will require an integer rather than a long as the queueId

Old method signature:

Builder queueId(

Old javadoc:

QueueRequestQuery.Builder: queueId

Builder queueId(

New javadoc:

QueueRequestQuery.Builder: queueId


RequestType

The getPortalId method will return an integer instead of a long.

Old method signature:

longgetPortalId

Old javadoc:

intgetPortalId

New javadoc:

SlaInformation

The getId method will return an integer instead of a long.

Old method signature:

long getId();

Old javadoc:

int getId();

New javadoc:

SlaInformation: getId

SlaInformationQuery

The id method will return an integerinstead of a long.

Old method signature:

Optional<Long> id();

Old javadoc:

Optional<Integer> id();

New javadoc:

 

SlaInformationQuery Builder

The id interface will require an integer instead of a long.

Old method signature:

Builder id(Long slaMetricId);

Old javadoc:

Builder id(Integer slaMetricId);

New javadoc:

SlaInformationQuery.Builder: id

 

What's been removed?

As well as the breaking changes listed above, we've also removed a number of existing experimental API that were deprecated previously. This is being done to make the new public API state, both cleaner and more useable.What's been removed? 

The following classes have been removed:

  • CreateInternalCommentParameters
  • CreatePublicCommentParameters
  • ServiceDeskCommentParameters
  • ValidatedInternalCommentParameters
  • ValidatedPublicCommentParameters
  • RequestTypeUpdateParameters
  • RequestTypeQueryParameters

In addition, the following methods have been removed. Most of these have equivalents which can now be used as a direct replacement. The ones that don't have been deemed insufficient for making public, as the usage was not recommended.

Classname

Method signature

Replacement

ServiceDeskCommentService

Either<

Old javadoc:

ServiceDeskCommentService: validatePublicComment 

#createServiceDeskComment(

New javadoc:

ServiceDeskCommentService: createServiceDeskComment

Either<

ServiceDeskCommentService: validateInternalComment

Old javadoc:

#createServiceDeskComment(

ServiceDeskCommentService: createServiceDeskComment

Either<

ServiceDeskCommentService: createPublicComment

Old javadoc:

#createServiceDeskComment(

ServiceDeskCommentService: createServiceDeskComment

Either<

ServiceDeskCommentService: createInternalComment

Old javadoc:

#createServiceDeskComment(

ServiceDeskCommentService: createServiceDeskComment

CustomerContextService

<T> T inCustomerContext(

Old javadoc:

#runInCustomerContext(

New javadoc:

void inCustomerContext(

CustomerContextService: inCustomerContext

Old javadoc:

#runInCustomerContext(

CustomerContextService: runInCustomerContext

<T> T outOfCustomerContext(

CustomerContextService: outOfCustomerContext

Old javadoc:

#runOutOfCustomerContext(

CustomerContextService: runOutOfCustomerContext

void outOfCustomerContext(

CustomerContextService: outOfCustomerContext

Old javadoc:

CustomerContextService: runOutOfCustomerContext

ServiceDeskLicence

String getLicenseType();

Old javadoc:

#runOutOfCustomerContext(

This method is not applicable anymore. It will always be ABP

ServiceDeskCustomerRequestService

Either<

Old javadoc:

ServiceDeskCustomerRequestService: getRequestForKey 

#getCustomerRequests(

New javadoc:

ServiceDeskCustomerRequestService: getCustomerRequests

Either<

ServiceDeskCustomerRequestService: getRequestForIssue

Old javadoc:

#getCustomerRequests(

ServiceDeskCustomerRequestService: getCustomerRequests

RequestTypeUpdateParameters

ServiceDeskCustomerRequestService: requestTypeUpdateParametersBuilder

Old javadoc:

#newUpdateBuilder()

ServiceDeskCustomerRequestService: newUpdateBuilder

Either<

ServiceDeskCustomerRequestService: updateRequestType

Old javadoc:

#updateCustomerRequest(

ServiceDeskCustomerRequestService: updateCustomerRequest

Either<

ServiceDeskCustomerRequestService: getRequestForIssueOverrideSecurity

Old javadoc:

#getCustomerRequests(

ServiceDeskCustomerRequestService: getCustomerRequests

Either<

ServiceDeskCustomerRequestService: getRequestForKeyOverrideSecurity

Old javadoc:

#getCustomerRequests(

ServiceDeskCustomerRequestService: getCustomerRequests

RequestTypeGroup

RequestTypeGroup withOrder(

Old javadoc:

This deprecated and Experimental API has been removed.

RequestTypeService

Either<

Old javadoc:

#getRequestTypes(

New javadoc:

RequestTypeService: getRequestTypes 

RequestTypeQueryParameters

RequestTypeService: queryBuilder

Old javadoc:

#newQueryBuilder()

RequestTypeService: newQueryBuilder

Either<

RequestTypeService: getRequestTypeForRequest

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: getRequestTypeForIssue

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: getAllRequestTypes

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: getRequestTypeForRequestOverrideSecurity

Old javadoc:


RequestTypeService: getRequestTypes

Either<

RequestTypeService: getRequestTypeForIssueOverrideSecurity

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: createRequestType

Old javadoc:

#createRequestType(

RequestTypeService: createRequestType

Either<

RequestTypeService: getRequestTypesForGroup

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: getRequestTypesByGroup

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: getRequestTypeByIdAndProjectId

Old javadoc:

#getRequestTypes(

RequestTypeService: getRequestTypes

Either<

RequestTypeService: deleteRequestTypeByIdAndProjectId

Old javadoc:

#deleteRequestType(

RequestTypeService: deleteRequestType

Either<

RequestTypeService: updateRequestTypeByIdAndProjectId

Old javadoc:

#updateRequestType(

RequestTypeService: updateRequestType

FpKit

Callable Unit runnableToCallable(

Old javadoc:

This deprecated and Experimental API has been removed.