DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
current status
This work is being done in 'master' branch, with progress to date in: https://github.com/apache/isis/blob/master/todo-deprecation-list.txt
in Apache Isis 1.16.0 we'll be updating DataNucleus to 5.1, which requires moving to Java 8. This is probably in itself a good enough reason to rename this to Apache Isis 2.0.0, but also note that one of the DN classes - TypeSafeQuery - is exposed from the Apache Isis applib and in DN 5.1 that class is renamed ... so backward compatibility is broken anyway.
According to semver, we therefore should call this release Apache Isis 2.0.0. Do people agree?
Following on from that, we may as well look to remove stuff that's been deprecated for a while. Below I've listed stuff that has been deprecated, and which I think should be removed. Comments welcome.
Propose:
make AppManifest mandatory
remove support for Xxx.layout.json
remove support for contributed services (use mixins instead)
Propose to remove (isis-core-applib):
org.apache.isis.applib
AbstractContainedObject.java - entire class
AbstractDomainObject.java - entire class
AbstractFactoryAndRepository.java - entire class
DomainObjectContainer.java - entire class
IsisApplibModule.java
ActionDomainEvent - the N-arg constructors (just use the 0-arg ones)
CollectionDomainEvent - the N arg constructors (just use the 0-arg ones)
PropertyDomainEvent - the N arg constructors (just use the 0-arg ones)
org.apache.isis.applib.annotation
Action.java
publishingPayloadFactory() - attribute; use the simpler PublisherService SPI instead
DomainObject.java
publishingPayloadFactory() - attribute, use the simpler PublisherService SPI instead
PublishedAction.java - entire annotation, use @Action(publishing=...) instead
PublishedObject.java - entire annotation, use @DomainObject(publishing=...) instead
PublishingPayloadFactoryForAction.java - entire annotation, replaced with simpler PublisherService SPI
PublishingPayloadFactoryForObject.java - entire annotation, replaced with simpler PublisherService SPI
ActionInteraction.java - entire annotation, use @Action(domainEvent=...)
CollectionInteraction.java - entire annotation, use @Collection(domainEvent=...)
PostsActionInvokedEvent.java - entire annotation, use @Action(domainEvent=...) instead
PostsCollectionAddedToEvent.java - entire annotation, use @Collection(domainEvent=...) instead.
PostsCollectionRemovedFromEvent.java - entire annotation, use @Collection(domainEvent=...) instead.
PostsPropertyChangedEvent.java - entire annotation, use @Property(domainEvent=...) instead.
PropertyInteraction.java - entire annotation, use @Property(domainEvent=...) instead.
ActionOrder.java - entire annotation, use @MemberOrder instead
FieldOrder.java - entire annotation, use @MemberOrder instead
ActionSemantics.java - entire annotation, use @Action(semantics=...)
Idempotent.java - entire annotation, use @Action(semantics=...) instead.
QueryOnly.java - entire annotation, use @Action(semantics=...) instead.
Aggregated.java - entire annotation, not supported internally
NotPersistable.java - entire annotation, not supported and does nothing
AutoComplete.java - entire annotation, use @DomainObject(autoComplete...=...)
Bookmarkable.java - entire annotation, use @DomainObjectLayout(bookmarking=...)
Bounded.java - entire annotation, use @DomainObject(bounded=...)
Bulk.java - entire annotation, use @Action(invokeOn=...)
Bulk.InteractionContext - entire service, use ActionInvocationContext service instead
InvokedOn.java - entire enum, along with @Bulk annotation.
CollectionLayout.java
render() - use @CollectionLayout(defaultView=...) instead
Render.java - entire annotation, use @CollectionLayout(defaultView=...) instead
RenderType.java - supporting enum for @Render annotation
Resolve.java - entire annotation, use @CollectionLayout(defaultView=...) instead
Audited.java - entire annotation, use @DomainObject(audited=...)
Command.java - entire annotation, use @Action(command=...) instead
CommandExecuteIn.java - entire annotation, use @Action(commandExecuteIn=...) instead
CommandPersistence.java - entire annotation, use @Action(commandPersistence=...) instead
CssClass.java - entire annotation, use @XxxLayout(cssClass=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
CssClassFa.java - entire annotation, use @XxxLayout(cssClass=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
Debug.java - entire annotation, use @Action#(restrictTo=...) instead
Exploration.java - entire annotation, use @Action(restrictTo=....) instead
Prototype.java - entire annotation, use @Action(restrictTo=....) instead
DescribedAs.java - entire annotation, use @XxxLayout(describedAs=...) instead
Disabled.java - entire annotation, use @Property(editingDisabledReason=...) instead
Hidden.java - entire annotation, use @Property(hidden=...), @Collection(hidden=...), @Action(hidden=...)
Ignore.java - entire annotation, use @Programmatic instead.
Immutable.java - entire annotation, use @DomainObject(editing=...) instead
Mandatory.java - entire annotation, use @Property(optionality=...) and @Parameter(optionality=...), or @javax.annotations.Nullable
Optional.java - entire annotation, use @Property(optionality=...) and @Parameter(optionality=...), or @javax.annotations.Nullable
Mask.java - entire annotation, not supported by either Wicket viewer or RO viewer
MaxLength.java - entire annotation, use @Property(maxLength=...) and @Parameter(maxLength=...)
MemberGroups.java - entire annotation, use @MemberGroupLayout instead
MultiLine.java - entire annotation, use @PropertyLayout(multiLine=...) and @ParameterLayout(multiLine=...) instead.
MustSatisfy.java - entire annotation, use @Property(mustSatisfy=....) or @Parameter(mustSatisfy=...) instead
Named.java - entire annotation, use @XxxLayout(named=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
Plural.java - entire annotation, use @DomainObjectLayout(plural=...) instead
RegEx.java - entire annotation, use @Property(regexPatternFlags=...) or @Parameter(regexPatternFlags=...) instead
RenderedAsDayBefore.java - entire annotation, use @PropertyLayout(renderedAsDayBefore=...) and @ParameterLayout(renderedAsDayBefore=...)
SortedBy.java - entire annotation, use @CollectionLayout(sortedBy=...) instead
TypeOf.java - entire annotation, use @Collection(typeOf=...) or @Action(typeOf=...) instead.
TypicalLength.java - entire annotation, use @PropertyLayout(typicalLength=...) instead.
NotContributed.java - entire annotation, use @DomainService(nature=...) or mixins instead.
NotInServiceMenu.java - entire annotation, use @DomainService(nature=...) or mixins instead.
NotPersisted.java - entire annotation, use @Property(notPersisted=...) instead
ObjectType.java - entire annotation, use @DomainObject(objectType=...) or @javax.jdo.annotations.Discriminator instead.
Paged.java - entire annotation, use @DomainObjectLayout(paged=...) or @CollectionLayout(paged=...) instead.
Parameter.java
minLength() attribute; not supported. For autocomplete, use @MinLength annotation.
When.java - entire enum, no replacement (believe is unused within the framwork)
org.apache.isis.applib.clock
Clock.java -
getTimeAsCalendar() (1 usage found)
getTimeAsDate() (1 usage found)
org.apache.isis.applib.events - entire package. These event classes supported only by WrapperFactory;
redundant as @Xxx(domainEvent=...) on member achieves much the same effect using event bus
org.apache.isis.applib.filter - entire package of Filter classes; use guava Predicate instead.
org.apache.isis.applib.fixturescripts
FixtureScript.java - various methods to simplify API
add(...) - use addResult(...) instead
asKeyValueMap(String) - removed; this shouldn't have had public visibility.
execute(...) and executeChild(...) - use ExecutionContext#executeChild(FixtureScript, String, FixtureScript)} instead
executeIfNotAlready(FixtureScript) - removed; this shouldn't have had public visibility.
lookup(String, Class<T>) - use ExecutionContext#lookup(...) instead
FixtureScripts.java - remove deprecated methods;
framework provides an implementation of this service, and use FixtureScriptsSpecificatoinProvider to configure instead.
org.apache.isis.applib.marker - remove these marker interaces (tend to use annotations in preference)
ImmutableOncePersisted.java
ImmutableUntilPersisted.java
NeverImmutable.java
NonPersistable.java
ProgramPersistable.java
org.apache.isis.applib.services.actinvoc
ActionInvocationContext.java -remove unused constructors
org.apache.isis.applib.services.audit (2 usages found)
AuditingService3.java - remove entire service, use AuditerService instead
org.apache.isis.applib.services.background (10 usages found)
ActionInvocationMemento.java - remove entire class, use InteractionDto and CommandDto are used internally instead
BackgroundCommandService.java - remove methods using AIM, instead keep those using CommandDto (in BackgroundCommandService2)
BackgroundService.java
asActionInvocationMemento(Method, Object, Object[]) - remove this internal API, no longer called by framework
org.apache.isis.applib.services.bookmark (8 usages found)
BookmarkService.java - deprecated methods, have overloads in BookmarkService2 subtype [suggest we retain these for now]
org.apache.isis.applib.services.classdiscovery
ClassDiscoveryService.java , push down into ClassDiscoveryService2
org.apache.isis.applib.services.command
Command2.java - methods for working with interaction events (remove with those event types)
flushActionInteractionEvents()
peekActionInteractionEvent()
popActionInteractionEvent()
pushActionInteractionEvent(ActionInteractionEvent<?>)
org.apache.isis.applib.services.command.spi
CommandService.java
startTransaction(Command, UUID) - no longer required to do anything, so remove
org.apache.isis.applib.services.eventbus
AbstractInteractionEvent.java - remove
ActionInteractionEvent.java - remove
ActionInvokedEvent.java - remove
CollectionAddedToEvent.java - remove
CollectionInteractionEvent.java - remove
CollectionRemovedFromEvent.java - remove
PropertyChangedEvent.java - remove
PropertyInteractionEvent.java - remove
org.apache.isis.applib.services.memento (19 usages found)
MementoService.java - remove entire service (previously to support view models, but now @ViewModel and JAXB)
org.apache.isis.applib.services.metamodel
MetaModelService2.java - push down to subtype, retain overloads for now
org.apache.isis.applib.services.publish - remove classes pertaining to original PublishingService (payload factories etc).
EventMetadata.java - remove class
EventPayload.java - remove class
EventPayloadForActionInvocation.java - remove class
EventPayloadForObjectChanged.java - remove class
PublishedEventStateType.java - remove class
PublishingService.java - remove domain service interface
StatusMessageMessageType.java - remove class
org.apache.isis.applib.services.settings
SettingTypes.java - remove, used only by 3rd party code (incode platform settings module)
org.apache.isis.applib.services.wrapper
WrapperObject.java
save() and wrapped() - remove to avoid name clashes, use __isis_Xxx() methods instead
org.apache.isis.applib.snapshot
Snapshottable.java - remove ? [suggest we retain the Snapshot service for now]
org.apache.isis.applib.value
DateTime.java
longValue() - use #millisSinceEpoch()
Time.java
longValue() - use #millisSinceEpoch()
org.apache.isis.core.objectstore.jdo.applib.annotations - remove package entirely
Auditable.java - use @DomainObject(audited=...) instead.
org.apache.isis.objectstore.jdo.applib
Auditable.java - use @DomainObject(audited=...) instead.
org.apache.isis.objectstore.jdo.applib.service
DomainChangeJdoAbstract.java - move to incode platform
JdoColumnLength.java - remove class (all constants defined in other classes)
- https://github.com/apache/isis/blob/rel/isis-1.15.1/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/JdoColumnLength.java
Util.java - remove
org.apache.isis.objectstore.jdo.applib.service.support
IsisJdoSupport.java - replaced by org.apache.isis.applib.services.jdosupport.IsisJdoSupport
Notes:
- sometimes there are multiple versions of a type, eg BookmarkService2 and BookmarkService, where BookmarkService2 extends BookmarkService. In these cases, suggest pull up the methods from the subtype(s) into the supertype, and then delete those subtypes... ie we end up with a new expanded version of BookmarkService.
To retain:
Below is the code currently deprecated in the applib, but I propose to retain even in 2.0.0 (on the grounds that a replacement for them is not fully designed):
org.apache.isis.applib.adapters - custom value type support
org.apache.isis.applib.annotation
Encodable.java - entire annotation, part of custom value types support
Parseable.java - entire annotation, part of custom value types support
MemberGroupLayout.java - entire annotation, use Xxx.layout.xml instead [move to retained, per comments at bottom: see [1] ]
org.apache.isis.applib.fixtures - "legacy" fixture support package ... by and large can use FixtureScripts (though not sure if there's feature parity in all cases)
AbstractFixture.java
AbstractFixtureSusa.java
BaseFixture.java
CompositeFixture.java
DateFixture.java
LogonFixture.java
org.apache.isis.applib.fixtures.switchuser
SwitchUserService.java
SwitchUserServiceAware.java
org.apache.isis.applib.services.command
Command.java - methods that pertain to the execution of the command and its completion (for that, use Interaction) [suggest we retain for now]
getCompletedAt()
getException()
getResult()
getStartedAt()
next(String)
setCompletedAt(Timestamp)
setStartedAt(Timestamp)
Command3.java - metods for working with domain events (equiv functionality in Interaction) [suggest we retain for now]
flushActionDomainEvents()
peekActionDomainEvent()
popActionDomainEvent()
pushActionDomainEvent(ActionDomainEvent<?>) (
Also for 2.0.0, new features/deprecations:
- automatically wrap domain services (perhaps behind a config property)
- automatically infer \@Programmatic for all \@DomainService(nature=DOMAIN)
- deprecate use of guava predicates, but don't remove (too big a change, weren't deprecated previously)
- deprecate FixtureScripts service with view to removing from applib ... the framework provides an implementation by default
- get rid of automatic initialization of fields (perhaps behind a config property)
- deprecate the Apache Isis' DateTime classes for removal in the future) ... and probably all of the custom value types, subclasses of Magnitude
Comments:
1 Kevin: Removing Layout annotations and relying only on xxx.layout.xml: Personally, I prefer not to have rely on "out of band" (i.e. not in source code) resources. I understand the power of the *.layout.xml resource, but is there an overhead in maintaining them when the sources (i.e. property names) change? However, I am not using this in code, so I will defer to those who are!