= Publishing _(enum)_
:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

The available policies as to whether data should be published to corresponding subscribers. The framework supports several kinds of data that are available for publishing:

* *xref:refguide:applib:index/services/publishing/spi/EntityChanges.adoc[EntityChanges] ... subscribed to via xref:refguide:applib:index/services/publishing/spi/EntityChangesSubscriber.adoc[EntityChangesSubscriber]*

 *
* *_EntityPropertyChange_ ... subscribed to via xref:refguide:applib:index/services/publishing/spi/EntityPropertyChangeSubscriber.adoc[EntityPropertyChangeSubscriber]*

 *
* *xref:refguide:applib:index/services/command/Command.adoc[Command] ... subscribed to via xref:refguide:applib:index/services/publishing/spi/CommandSubscriber.adoc[CommandSubscriber]*

 *
* *xref:refguide:applib:index/services/iactn/Execution.adoc[Execution] ... subscribed to via xref:refguide:applib:index/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber]*

 ** * * * 

== API

[source,java]
.Publishing.java
----
enum Publishing {
  AS_CONFIGURED     // <.>
  ENABLED     // <.>
  ENABLED_FOR_UPDATES_ONLY     // <.>
  DISABLED     // <.>
  NOT_SPECIFIED     // <.>
}
----

<.> xref:#AS_CONFIGURED[AS_CONFIGURED]
+
--
Publishing of data triggered by interaction with this object should be handled as per the default publishing policy configured in `application.properties` .
--
<.> xref:#ENABLED[ENABLED]
+
--
Do publish data triggered by interaction with this object.
--
<.> xref:#ENABLED_FOR_UPDATES_ONLY[ENABLED_FOR_UPDATES_ONLY]
+
--
Applies only to xref:refguide:applib:index/services/publishing/spi/EntityPropertyChangeSubscriber.adoc[EntityPropertyChangeSubscriber] , whereby events are published for modifications to the object, but no events are published for the initial creation of an object.
--
<.> xref:#DISABLED[DISABLED]
+
--
Do *not* publish data triggered by interaction with this object (even if otherwise configured to enable publishing).
--
<.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
+
--
Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
--

== Members

[#AS_CONFIGURED]
=== AS_CONFIGURED

Publishing of data triggered by interaction with this object should be handled as per the default publishing policy configured in `application.properties` .

If no publishing policy is configured, then publishing is disabled.

[#ENABLED]
=== ENABLED

Do publish data triggered by interaction with this object.

[#ENABLED_FOR_UPDATES_ONLY]
=== ENABLED_FOR_UPDATES_ONLY

Applies only to xref:refguide:applib:index/services/publishing/spi/EntityPropertyChangeSubscriber.adoc[EntityPropertyChangeSubscriber] , whereby events are published for modifications to the object, but no events are published for the initial creation of an object.

In the case of audit trail extension, this effectively suppresses all of the "[NEW] -> value" entries that are created for every property of the entity when it is being created, and also all of the "value -> [DELETED]" entries that are created for every property of the entity when it is being deleted.

This variant is intended only where the application code has enough traceability built into the domain (perhaps to provide visibility to the end-users) that the technical auditing is overkill. It will also of course reduce the volume of auditing, so improves performance (likely both response times and throughput).

For other subscribers, behaviour is the same as _#ENABLED_ .

[#DISABLED]
=== DISABLED

Do *not* publish data triggered by interaction with this object (even if otherwise configured to enable publishing).

[#NOT_SPECIFIED]
=== NOT_SPECIFIED

Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
