Preparing for Jira 10.4

On this page

In this section

Still need help?

The Atlassian Community is here for you.

Ask the community

This documentation is intended for Jira developers who want to ensure that their existing apps are compatible with Jira Software Data Center 10.4 and Jira Service Management Data Center 10.4.

We've moved the communication about Jira Software Data Center and Jira Service Management Data Center development releases to this page. With this transition, we aim to provide partners and developers with a single source of information about improvements and changes to our products.

You can continue using the Atlassian Developer community for discussion and support. For archive release announcements, check out our changelog.

Latest version

Here you can find information about the latest EAPs.

Application

Date

Number

Version (Maven)

Downloads

Jira Software


 

10.4.0-EAP03

10.4.0-m0004

Source files

Jira Service Management


 

10.4.0-EAP03

10.4.0-m0004

Source files

Summary of changes

This section provides an overview of the changes we intend to make so that you can start thinking about their impact on your apps. Once the updates are ready, we'll indicate when they’ve been implemented and in which milestone.


Jira Software and Jira Service Management common features

Moving away from Pico

Status: IMPLEMENTED (EAP 01)

We’re removing the Pico technology and standardizing on Spring across the board. This change is designed to have no impact on P2 plugins or change the composition of services available in OSGi. Additionally, we’ve ensured that ComponentAccessor maintains its existing contract. We’re also removing the Pico explicit code from the internal com.atlassian.jira.component.pico package and some of these changes are still pending. Join our community discussion regarding moving away from Pico

This update doesn’t require any changes in Jira Software, Jira Service Management, or any of our in-house bundled apps.

Customize the order of issue link types

Status: IMPLEMENTED (EAP 01)

Admins can now customize the order of issue link types. We’ve introduced two sorting methods:

  • Drag and drop: Rearrange the order directly in the issue link type table.
  • Sort alphabetically: Use the dropdown menu to sort in ascending or descending order.

Additionally, we’ve introduced two API resources for these operations within the Issue Link Type API group:

  1. [PUT] /api/2/issueLinkType/{issueLinkTypeId}/order
  2. [PUT] /api/2/issueLinkType/order

Note that if you have a large number of issue link types, the page may become slow or even unresponsive. In this case, you can disable the feature by adding com.atlassian.jira.issuelinkingtypes.customiseorder to the list in the DarkSiteFeatures page.

Preparing for OpenSearch

Status: IMPLEMENTED (EAP 02)

We're laying the foundations for more agnostic option for search tooling, starting with adding an abstraction layer. This change is key to enable future OpenSearch support. The new abstraction layer introduces a new search API. Search and indexing performance will remain consistent with the existing Lucene implementation. This change also marks the start of our plans to remove Lucene from public APIs.
See the search API upgrade guide.

New Jira Stats logging location

Status: IMPLEMENTED (EAP 02)

Starting from Jira 10.4.0, Jira Stats will be logged to atlassian-jira-stats.log instead of atlassian-jira.log. This is configured by the log4j2.xml properties. Learn more about logging in Jira

Tools like Splunk, Grafana, Logstash, Kibana, or any other that rely on Jira Stats must be adapted to the new file location. If the log4j2.xml configuration file is overridden, adapt it manually:

        <JiraHomeAppender name="jirastatslog"
                          fileName="atlassian-jira-stats.log"
                          filePattern="atlassian-jira-stats.log.%i">
            <PatternLayout alwaysWriteExceptions="false">
                <Pattern>${StackTraceFilteringPattern}</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="20480 KB"/>
            </Policies>
            <DefaultRolloverStrategy fileIndex="min" max="10"/>
        </JiraHomeAppender>
        (...)
                <!--        #####################################################-->
        <!--        # Jira Stats logging-->
        <!--        #####################################################-->

        <!--        # on INFO logs queue stats per node, on DEBUG logs queue stats per queue-->
        <Logger name="com.atlassian.jira.cluster.distribution.localq.LocalQCacheManager" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.cluster.dbr.DBRSenderStats$TotalAndSnapshotDBRSenderStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.cluster.dbr.DBRReceiverStats$TotalAndSnapshotDBRReceiverStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.WriterWithStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.versioning.EntityVersioningManagerWithStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.issue.index.IndexingStatsManager" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.MonitoringIndexWriter" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.ha.ReIndexStatsLogger" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.ha.ReplicationStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.plugin.PluginTransactionListener" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.propertyset.TotalAndSnapshotPropertyEntryStoreStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.ha.TotalAndSnapshotIndexRepairStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.QueueingIndexStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <!--        # Cluster Authentication stats-->
        <Logger name="com.atlassian.jira.cluster.distribution.localq.rmi.auth.ClusterAuthStatsManager" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.index.stats.TotalAndSnapshotIndexSearcherStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>
        <Logger name="com.atlassian.jira.util.stats.JiraStats" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>

If you add a new custom JiraStat and it doesn't use the JiraStats.create(…), then you must also add the custom logger from this class as:

<Logger name="logger_name_usually_a_package_and_classname" level="INFO" additivity="false">
            <AppenderRef ref="jirastatslog"/>
        </Logger>


Last modified on Jan 23, 2025

Was this helpful?

Yes
No
Provide feedback about this article

In this section

Powered by Confluence and Scroll Viewport.