Sometimes it pays to wait for a good thing. To have a spotless beta, we’ve decided to ship EAP 08 with some remaining upgrades and fixes. But fear not - this time the milestone does not contain any breaking changes.
What’s inside?
We’ve upgraded several Jira platform components and enabled the option to postpone the mandatory reindexing. Read all about it in the Preparing for Jira 8.0 notes.
Where is it?
You can download the EAP milestone here. If you’re using maven.atlassian.com, make sure to get maven 8.0.0-m0024.
What’s next?
We’re nearly done wrapping the Beta for you, so you can expect it within the next 3 weeks. Feature-wise, Beta will be close to what we want to ship as Jira 8.0.
When’s the GA?
We’ve made updates to our plans and decided for the GA to happen towards the end of January 2019. This will give you enough time to prepare for the change and still enjoy the Xmas break.
Should you have any comments, you can post them here and we’ll be on them shortly.
Hi @mmichalak,
when the Beta is released, will you offer a download that includes both Jira Software and Jira Service Desk? Or else will you make one of them available as a downloadable application from within the other (the way it works for official releases, on the Applications admin page)? Because we need to be able to test against an instance that has both Jira Software and Jira Service Desk.
Also, I noticed an API change in the latest EAP that wasn’t documented: the com.atlassian.application.api.ApplicationManager#getApplication(com.atlassian.application.api.ApplicationKey) method now returns a io.atlassian.fugue.Option instead of a com.atlassian.fugue.Option.
Thanks @mmichalak.
There are actually other APIs that are also affected by this change (such as accessing entity properties), and the problem is that I in most cases you can’t identify the changes at compile time. For example:
final EntityPropertyService.PropertyResult propertyResult = issuePropertyService.getProperty(ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser(), issue.getId(), propertyName, new EntityPropertyOptions.Builder().skipPermissionChecks().build());
final EntityProperty entityProperty = propertyResult.getEntityProperty().getOrNull();
This will throw an exception at runtime when compiled against Jira 7 and run on Jira 8 (or vice-versa), even though it will compile just fine without a change, because while there is no explicit reference (import) to either io.atlassian.fugue.Option or com.atlassian.fugue.Option, the compiled code will hold an internal reference to either one of them to call the getOrNull() method.
This is a nasty change that will require extensive testing of our apps.
@verenok you mean to build an app that’s compatible with both Jira 7 and Jira 8? There are two approaches:
build compatibility (adapter) libraries for Jira 7 and Jira 8 (compiling each against the appropriate Jira version) and call the right library based on the Jira version
use Java introspection to call the methods; since the only difference is in the return type it’s actually easy.
@david2 Could I trouble you to expand a little bit on this:
We’re trying to avoid having two versions of our app, but our attempts at using introspection have so far been unsuccessful.
Here’s an original snippet of code affected by the issue:
final EntityProperty entityProperty = issuePropertyService
.getProperty(user, currentIssue.getId(), "property-name-goes-here")
.getEntityProperty()
.getOrNull();
We’ve tried to replace it with something like this:
import java.lang.reflect.Method;
...
// Returns a {io,com}.atlassian.Fugue.Option, depending on JIRA 7 or 8
Object entityPropertyOption = issuePropertyService
.getProperty(user, currentIssue.getId(), "property-name-goes-here")
.getEntityProperty();
Method getOrNull = entityPropertyOption.getClass().getDeclaredMethod("getOrNull");
final EntityProperty entityProperty = (EntityProperty) getOrNull.invoke(entityPropertyOption);
…however we still get a compile error:
incompatible types: io.atlassian.fugue.Option<com.atlassian.jira.entity.property.EntityProperty> cannot be converted to com.atlassian.jira.entity.property.EntityProperty
I’m sure the solution is obvious, but I don’t have a lot of previous experience using introspection; so any help would be greatly appreciated.