Preparing for Jira 10.4

On this page

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-EAP02

10.4.0-m0002

Source files

Jira Service Management


 

10.4.0-EAP02

10.4.0-m0002

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 adding an abstraction layer to Jira's search functionality that will help us remove Lucene from the public APIs. This change is setting the stage for future OpenSearch support. The search and indexing performance will remain consistent with the existing Lucene implementation, ensuring a smooth transition. We’re actively working on the new API details that we’ll share with you soon.

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 9, 2025

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.