Preparing for JIRA 7.5

This page covers changes in JIRA 7.5 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.5 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/Application Risk level. Affects

Change: Epics and versions panel in the Kanban backlog

 Platform/Application: JIRA Software

Risk level: low

Affects: Mostly users.

All versions and epics will now be displayed in the epics and versions panels in the Kanban backlog. They're enabled by default for each board that enables (or has already enabled) the Kanban backlog.

The epics panel also changes how epics are displayed on the board – no longer as cards (like all other issues), but as filters in the epics panel. You can disable the epics panel in Board settings > Columns, but the versions panel will always be in the backlog.

Change: Renaming and deleting sprints, adding a sprint goal

 Platform/Application: JIRA Software

Risk level: low

Affects: Users.

New functions regarding sprints – renaming and deleting sprints, and adding a sprint goal. Deleted sprints might influence reports.

Change: Events for creating and deleting issue links

 Platform/Application: JIRA

Risk level: low

Affects: New events for creating and deleting issue links that might be used by plugin developers, or by users as webhooks in JIRA.

Change: New JDBC driver for SQL Server

 Platform/Application: JIRA

Risk level: medium

Affects: Users with Microsoft SQL Server as database. You won't be able to start JIRA after the upgrade until you run the JIRA config tool to update the URL pattern. Read below for details.

JIRA platform changes

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

New JDBC driver for Microsoft SQL Server

We've shipped a new driver for Microsoft SQL Server, which requires that you update the driver's URL in the dbconfig.xml file. In most cases, it's enough to run the JIRA configuration tool, which will update the URL automatically, but if you've customized the URL by adding some properties to it, you might need to make the changes manually. 

  Show me how to do this...

Running the JIRA configuration tool

If you never customized the JDBC URL, run the JIRA config tool to update it.
1. Go to <installation-directory>/bin, and run the config.bat / config.sh file.
2. Click Save. Your configuration will be updated.
3. Restart JIRA.

Updating the URL manually

If the configuration tool doesn't fix the error, update the URL manually.
1. Go to JIRA's home directory, and edit the dbconfig.xml file.
2. Adjust the value of the URL parameter to the following pattern:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

For details about the URL and its properties, see Building the connection URL.

When you start JIRA after the upgrade, you'll get an error message until you fix this issue.

New events for creating and deleting issue links that might be used by plugin developers, or by users as webhooks in JIRA. The new events are IssueLinkCreatedEvent and IssueLinkDeletedEvent.

When creating webhooks, you can use the following events. The string in parentheses is the name of the webhookEvent in the response.

  • create (issuelink_created)
  • deleted (issuelink_deleted)

For more info about creating webhooks in JIRA, see Webhooks.

JIRA will fix corrupted indexes by itself

We've made this change already in 7.4.2, but we just wanted to make sure you know about it. JIRA now has an automatic recovery of corrupted indexes, which saves you a lot of manual work. However, the broken documents will be deleted from the indexes, and this might result in e.g. JQL not being able to find some issues. You can recognize that your indexes were being fixed by searching the atlassian-jira.log file for a line like this one:

2017-07-18 23:51:49,990 JIRA-Bootstrap ERROR      [c.a.jira.index.LuceneCorruptionChecker] Index '/jirahome/caches/indexes/issues' is broken: 2 bad segments.
    Performing healing the index. 2 documents will be lost

All deleted documents can be recreated by running a reindex in JIRA. For more details, see Lucene index corruption

REST API changes

We've also made some changes to our APIs:

  • With GET /rest/agile/1.0/sprint/{sprintId}, you can now retrieve a new field called "goal", which shows a sprint's goal.
  • With DELETE /rest/agile/1.0/sprint/{sprintId}, you can now delete not only sprints that haven't started yet, but also the completed ones.
  • With PUT /rest/agile/1.0/sprint/{sprintId} and POST /rest/agile/1.0/sprint/{sprintId}, you can now use the new "goal" property to add a goal to a sprint.
  • With POST /rest/agile/1.0/sprint/{sprintId}, you can update the "name" and "goal" properties for any completed sprint.

JIRA Core changes

No specific JIRA Core application changes.

JIRA Software changes

Improvements to sprints – rename and delete, add a sprint goal

We've introduced some new options that will help you manage your sprints. You can add a goal to a sprint to let your team know what you're aiming for, delete an obsolete sprint so that it doesn't affect your reports and future planning, or rename a sprint to something that better describes it.

For more info about this change, see JIRA Software 7.5 EAP release notes.

Epics and versions panels in the Kanban backlog

With JIRA 7.5, we're introducing two new panels in the Kanban backlog – versions and epics. They'll be enabled by default if you have previously enabled the Kanban backlog. The panels will help you refine your backlog, group your issues, and easily manage them by using versions and epics as filters. Because of this change, epics will no longer be displayed as cards on the board (like all other issues), but will be moved to the panel instead. If you don't like this change, you can disable the epics panel in Boards settings > Columns

For more info about this change, see JIRA Software 7.5 EAP release notes.

JIRA Service Desk changes

JIRA Service Desk has a number of elements of it's API which are currently defined as experimental  but that is about to change. 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 into 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. 

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. 

The following will be changing in a forthcoming release (after JIRA 7.5.0):

Classname
Current method signature
Replacement
ServiceDeskService

Either<AnError, ServiceDesk> getServiceDeskById(

ApplicationUser user, long serviceDeskId

);

Breaking change:

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

Either<AnError, ServiceDesk> getServiceDeskById(

ApplicationUser user, int serviceDeskId

);

Current javadoc:

 ServiceDeskService: getServiceDeskById 

PortalService

Either<AnError, Portal> getPortalForId(

ApplicationUser user, long portalId

);

Breaking change:

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

Either<AnError, Portal> getPortalForId(

ApplicationUser user, int portalId

);

Current javadoc:

PortalService: getPortalForId 

Queue

long getId()

Breaking change:

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

int getId()

Current javadoc:

Queue: getId 

 

long getServiceDeskId() 

Breaking change:

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

int getServiceDeskId()

Current javadoc:

Queue: getServiceDeskId 

QueueQuery

Optional<Long> queueId(); 

Breaking change: 

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

Optional<Integer> queueId();

Current javadoc:

QueueQuery: queueId 

 

long serviceDeskId();

Breaking change:

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

int serviceDeskId();

Current javadoc:

QueueQuery: serviceDeskId 

QueueQuery Builder interface

Builder serviceDeskId(long serviceDeskId);

Breaking change:

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

Builder serviceDeskId(int serviceDeskId);

Current javadoc:

QueueQuery.Builder: serviceDeskId 

 

Builder queueId(long queueId);

Breaking change:

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

Builder queueId(int queueId);

Current javadoc:

QueueQuery.Builder: queueId 

QueueRequestQuery

long queueId();

Breaking change:

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

int queueId();

Current javadoc:

QueueRequestQuery: queueId 

 

long serviceDeskId();

Breaking change:

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

int serviceDeskId();

Current javadoc:

ueueRequestQuery: serviceDeskId 

QueueRequestQuery Builder interface

Builder serviceDeskId(long serviceDeskId);

Breaking change:

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

Builder serviceDeskId(int serviceDeskId);

Current javadoc:

QueueRequestQuery: serviceDeskId 

 

Builder queueId(long queueId);

Breaking change:

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

Builder queueId(int queueId);

Current javadoc:

QueueRequestQuery: queueId 

RequestType

long getPortalId();

Breaking change:

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

int getPortalId();

Current javadoc:

RequestType: getPortalId 

SlaInformation

long getId(); 

Breaking change:

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

int getId();

Current javadoc:

SlaInformation: getId

SlaInformationQuery
Optional<Long> id();

Breaking change:

The id method will return an integerinstead of a long.

Optional<Integer> id();

Current javadoc:

SlaInformationQuery: id 

SlaInformationQuery Builder
Builder id(Long slaMetricId);

Breaking change:

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

Builder id(Integer slaMetricId);

Current javadoc:

SlaInformationQuery.Builder: id 

What's deprecated? 

As well as the breaking changes listed above, we're also going to be deprecating a number of existing experimental API which will be removed in a future release. The following classes are being deprecated in preparation for removal:

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

     

In addition, the following methods are being deprecated. Some of these have equivalents which can be used, and where this is the case these are documented.

Classname
Method signature
Replacement
ServiceDeskCommentService

Either<AnError, ValidatedPublicCommentParameters> validatePublicComment(

@Nonnull ApplicationUser user, 

@Nonnull CreatePublicCommentParameters commentInternalParameters

);

#createServiceDeskComment(

ApplicationUser, ServiceDeskCommentCreateParameters

)

Javadoc:

ServiceDeskCreationService 

 

Either<AnError, ValidatedInternalCommentParameters> validateInternalComment(

@Nonnull ApplicationUser user, 

@Nonnull CreateInternalCommentParameters commentPublicParameters

);

#createServiceDeskComment(

ApplicationUser, ServiceDeskCommentCreateParameters

)

 Javadoc:

ServiceDeskCreationService 

 

Either<AnError, ServiceDeskComment> createPublicComment(

@Nonnull ApplicationUser user, 

@Nonnull ValidatedPublicCommentParameters commentParameters

);

#createServiceDeskComment(

ApplicationUser, ServiceDeskCommentCreateParameters

)

 Javadoc: 

ServiceDeskCreationService 

 

Either<AnError, ServiceDeskComment> createInternalComment(

@Nonnull ApplicationUser user, 

@Nonnull ValidatedInternalCommentParameters commentParameters

);

#createServiceDeskComment(

ApplicationUser, ServiceDeskCommentCreateParameters

)

 Javadoc: 

ServiceDeskCreationService 

CustomerContextService <T> T inCustomerContext(Callable<T> callable);
#runInCustomerContext(NoExceptionsCallable)

Javadoc:

CustomerContextService 

  void inCustomerContext(Runnable runnable);
#runInCustomerContext(NoExceptionsCallable)

Javadoc:

CustomerContextService 

  <T> T outOfCustomerContext(Callable<T> callable);
#runOutOfCustomerContext(NoExceptionsCallable)

Javadoc:

CustomerContextService 
ServiceDeskLicence String getLicenseType();

This method is not applicable anymore and will always return ABP

Javadoc:

ServiceDeskLicense  

ServiceDeskCustomerRequestService

Either<AnError, CustomerRequest> getRequestForKey(

@Nullable ApplicationUser user, @Nonnull String issueKey

);

#getCustomerRequests(ApplicationUser, CustomerRequestQuery)
Javadoc:

ServiceDeskCustomerRequestService  

 

Either<AnError, CustomerRequest> getRequestForIssue(

@Nullable ApplicationUser user, 

@Nonnull Issue issue

);

#getCustomerRequests(ApplicationUser, CustomerRequestQuery)
Javadoc:

ServiceDeskCustomerRequestService  

  RequestTypeUpdateParameters.Builder requestTypeUpdateParametersBuilder();
#newUpdateBuilder()
Javadoc:

ServiceDeskCustomerRequestService  

 

Either<AnError, CustomerRequest> updateRequestType(

@Nullable ApplicationUser user,

RequestTypeUpdateParameters requestTypeUpdateParameters

);

#updateCustomerRequest(
ApplicationUser, CustomerRequestUpdateParameters
)

Javadoc:

ServiceDeskCustomerRequestService 

  Either<AnError, CustomerRequest> getRequestForIssueOverrideSecurity(Issue issue);

#getCustomerRequests(ApplicationUser, CustomerRequestQuery)

Javadoc:

ServiceDeskCustomerRequestService 

  Either<AnError, CustomerRequest> getRequestForKeyOverrideSecurity(String issueKey);

#getCustomerRequests(ApplicationUser, CustomerRequestQuery)

Javadoc: 

ServiceDeskCustomerRequestService 

RequestTypeGroup RequestTypeGroup withOrder(Option<Integer> order);

This deprecated and Experimental API will be removed in a future release

Javadoc:

RequestTypeGroup  

RequestTypeService

Either<AnError, List<RequestType>> getRequestTypes(

@Nonnull ApplicationUser user, 

@Nonnull RequestTypeQueryParameters

requestTypeQueryParameters

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService  

  RequestTypeQueryParameters.Builder queryBuilder();
#newQueryBuilder()

Javadoc:

RequestTypeService  

 

Either<AnError, RequestType> getRequestTypeForRequest(

@Nonnull ApplicationUser user, 

@Nonnull CustomerRequest customerRequest

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService 

 

Either<AnError, RequestType> getRequestTypeForIssue(

@Nonnull ApplicationUser user, 

@Nonnull Issue issue

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService  

  Either<AnError, List<RequestType>> getAllRequestTypes(ApplicationUser user);
#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService 

 

Either<AnError, RequestType> getRequestTypeForRequestOverrideSecurity(

@Nonnull CustomerRequest customerRequest

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService  

 

Either<AnError, RequestType> getRequestTypeForIssueOverrideSecurity(

@Nonnull Issue issue

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService 

 

Either<AnError, RequestType> createRequestType(

long projectId, 

int issueTypeId,

String name,

String description, 

long iconId,

List<Integer> groupIds

);

#createRequestType(
ApplicationUser, RequestTypeCreateParameters
)

Javadoc:

RequestTypeService  

 

Either<AnError, List<RequestType>> getRequestTypesForGroup(

Integer groupId, Long projectId

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

 Javadoc:

RequestTypeService  

 

Either<AnError, List<RequestType>> getRequestTypesByGroup(

Integer groupId,

Integer serviceDeskId

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService

 

Either<AnError, RequestType> getRequestTypeByIdAndProjectId(

Integer requestTypeId,

Long projectId

);

#getRequestTypes(ApplicationUser, RequestTypeQuery)

Javadoc:

RequestTypeService 

 

Either<AnError, RequestType> deleteRequestTypeByIdAndProjectId(

Integer requestTypeId,

Long projectId

);

#deleteRequestType(
ApplicationUser, RequestTypeDeleteParameters
)

Javadoc:

RequestTypeService 

 

Either<AnError, RequestType> updateRequestTypeByIdAndProjectId(

Integer requestTypeId,

Long projectId,

RequestType requestType

);

#updateRequestType(
ApplicationUser, RequestTypeUpdateParameters
)

Javadoc:

RequestTypeService 

FpKit

Callable<Unit> runnableToCallable(Runnable runnable)

This deprecated and Experimental API will be removed in a future release

Javadoc:

FpKit

Was this page helpful?

Have a question about this article?

See questions about this article

Powered by Confluence and Scroll Viewport