[ASPL Fact Announce] [ANN] Af-Arch 1.0-rc6 is out!

Francis Brosnan Blazquez francis en aspl.es
Vie Feb 17 20:40:14 CET 2006


     ###########################################
     #  Af-Arch Framework 1.0-rc6 release note #
     ###########################################

Madrid, Spain 17th Feb, 2006:

    Advanced Software Production Line is proud to announce the
    availability of Af-Arch framework 1.0-rc6.

What is Af-Arch ?

    Af-Arch is a full featured Open Source N-Tier framework to develop
    distributed applications, for database oriented systems. Its
    license schema allow to build Open Source and commercial (closed
    source) applications.

    In conjunction with tools such as af-gen, Af-Arch is a powerful
    framework to build, really fast, high quality distributed
    applications running on Unix platforms and Microsoft Windows.

    Check http://fact.aspl.es/doc/af_arch_what_is.html for more
    information.

What features has Af-Arch ?
 
    Af-Arch is a framework to develop distributed applications which

    * Remote services invocation 
    * Support both invocation models: Synchronous and Asynchronous
    * Services and Server component transparent location
    * Native support for users and groups
    * Native users and groups permissions
    * Native users session
    * Bindings support to other languages
    * Cross-platform development (currently Microsoft Windows and Unix
      platforms)
    * Af-Arch also comes with an IDL compiler (with some useful
      features)
    * Automatic services definition
    * Automatic SQL database definition
    * Automatic autoconf support
    * Af-Arch comes with a command-line administration tool: aspl-clm
    * Database abstraction backend built-in support.
    * Platform license allows Open Source and commercial (closed
      source) developments

    Check http://fact.aspl.es/doc/af_arch_framework_features.html
    for a detailed description about features supported.

Resources

    Af-Arch main project: 
       http://fact.aspl.es

    Af-Arch documentation center
       http://fact.aspl.es/doc

    Af-Arch download site
       http://www.sf.net/projects/aspl-fact

    Advanced Software Production Line
       http://www.aspl.es

This release in short

    A new major stable release have come with many interesting
    features, library dependencies news, new API to make life easy and
    a bunch of work to make the library to be memory efficient. 

    Af-Arch no longer depends on GDA library
    (http://www.gnome-db.org). Now AfGs, server side support for
    Af-Arch, includes built-in database abstraction support,
    implemented to fit better with the Af-Arch framework. For more
    details check the "libafgs" log below.

    Af-Arch platform now support three new return types:
    AfDalNodeData, AfDalStringData and AfDalDecimalData, which allows
    services to return a module node, a plain string and a decimal
    value as a result for the invocation. 

    Af-Arch now support a new formal parameter service AfDalSetOf
    which implements set of items to be sent while the service is
    invoked.

    af-gen tool now support defining string literals that are
    separated by "+" sign, making it easy to write long SQL sentences.

    af-gen tool now allow to generate type definitions that could
    extend, making it possible to create a class hierarchy for types
    to be returned by services.

    libafdal core library now implements a better error reporting
    mechanism which allows to receive all errors generated while
    performing invocation at the reply process code. 

    New reserved services have been added: element_peek_reference
    which allows to get the node associated to a module which is
    relationed through the 0..1 link.
    
      
     
    Many bug fixes and memory leaks have been squashed. 

    This release is considered to be stable and to be previous step to
    Af-Arch 1.0. Currently, ASPL is working to release a new Af-Arch
    application which will use Af-Arch 1.0-rc5.

    Enjoy Af-Arch!!

Changes since 1.0-rc6
    
   af-gen: 

    * fixing a memory leak on the C client STUB generated. On not
      connected servers conditions a queue was not released properly
      while using synchronous invocation.

    * making GetAttributePosition static method to be flagged with
      "new" keyword at the C# client STUB.

    * making af-gen to generate the element list service using the
      custom builder.

    * Making reference service to return the new implementation for
      AfDalNodeData inside the C# layer: NodeData. Which allows to get
      current request status, the server response and the DataNode
      requested.

    * Making all services which returns "node" to use the NodeData
      class as result.

    * updating doxygen module to support the new return type "node".

    * added documentation for the af-gen reference manual to include
      references to the new "bind as" sentence and the return type
      "node".

    * making af-gen to avoid/disallow programmers to use decimal
      definitions which have 0 as the precision bound.

    * adding support for a new return type which allows to get an
      string result.  This new type is AfDalStringData. Implemented
      the C# binding named as StringData class.

    * updating af-gen to include element_list as a default service
      generated on those relations using 1..1 with 0..1.

    * added support for the C layer to generate client stubs for the
      new type set of. Now af-gen support services and modules
      definition with incoming types: set of [string, int, bool,
      decimal].

    * Adding support to the C# layer for the new incoming type: set
      of. Now af-gen tool generates a client stub using the SetOf
      class provided by the AfDal# assembly.

    * making all set of definition to be private/in types. This only
      enables that set of type could only be used while sending data
      from client to servers.

    * adding support to the af-gen gobject generator to support the
      setof type.

    * making af-gen to generate a C# client stub layer with an
      additional checking for the commit method. This warms the
      developers while something is not properly set while making
      commits.

    * adding IntPtr.Zero checks to the C# client layer generated. This
      solves some critical messages showed while executing
      ..::reference service in the case where no reference where
      found.

    * starting support for the new return type: AfDalDecimalData. It
      will allow to return simple Decimal values by Af-Arch services.

    * making af-gen C# and C generator to support the new return
      type: decimal.

    * refactoring source code at synchronous interface generator to
      use the same source code for initial headers definition.

    * removed ancient code not used (it was commented out).

    * adding support to af-gen to detect services add_element inside a
      relation defined with 0..1 and 0..n values having producing them
      a different behavior to be indepepotent that service.

    * adding support to af-gen to produce .def files for C client
      stubs so Microsoft windows platforms could produce import
      libraries.

    * [fix] making C layer generated to delegate string checking to
      coyote level.  Removed all source code generated to check
      strings. Checkings moved to coyote layer.

    * [new] adding support to concat strings using the "+" sign while
      developing on server side. This will allow to write long SQL
      statements splitted by "+" that are joined by af-gen into the
      final source code generated. Great!

    * [new] adding new af-gen option "--no-indent" which allows to
      disable source code indentation using an external program.

    * [fix] making source code definition on IDL files to support
      comments starting with //

    * [new] updating search interface generation to use the new
      request notifier support for error reporting.

    * [fix] making af-gen to produce properties enumerations for the
      search interface that keeps the attribute position no matter if
      they are present. (C# STUB compat).

    * [fix] working to allow view definitions to be managed as they
      were modules.  This will allow to include source code and
      specific services inside view definitions.  Syntax is already
      supported.

    * [fix] fixing delete semantic spec used inside IDL definition (it
      wasn't working). Now on delete keep is the default semantic if
      not delete semantic is defined.

    * [fix] fixing SQL generation while using views as a first
      element. This bug was exposed while implementing support for
      views to be managed as modules.

    * [new] now views also support all commands defined for modules:
      user code relations, rewriting reserved services.

    * [new] adding support for a new reserved service:
      element_peek_reference which works like element_peek but
      returning a DataNode object rather than the unique
      identifier. 

      This solves a common problem found while reading the unique
      identifier through peek_element and then performing a reference
      operation over that result. (implemented C, C# and server side
      support).

    * [fix] making af-gen to use new type
      COYOTE_XML_ARG_DATASET_TO_FREE while using set of types.

    * [fix] improved inheritance between modules inside af-gen
      abstract syntax module.  Now the same code is used to handle
      inheritance between modules and views and across types
      definitions.

    * [fix] improved inheritance between modules inside af-gen
      abstract syntax module.  Now the same code is used to handle
      inheritance between modules and views and across types
      definitions.

    * [new] added support to implement type inheritance for complex
      return types. Now definitions such the following are possible:

        // base type definition
        type CarNames is data (string name, string description) index
(id);

        // specific child type definition
        type ACar : CarNames adds (string plate, decimal cost) index
(plate);

      These new changes allows to have complex types as return ones
      that shares the same pieces of code. GREAT!!!

    * [fix] making af-gen to no longer generates server components
      that are linked to gda library.

    * [fix] making af-gen to support user comments inside string
      literal definitions that are defined using "+" semantic.

    * [fix] making af-gen to produce an C client stub library that not
      requires to recompile the whole library when a changed is
      done. Now, only modules modified are recompiled (and those which
      depends on them).

    * [fix] fixing custom services generation while they return node
      type.  Currently, custom services for node type only support
      using the same module where they are defined.

    * [new] making possible to define as the index for a type defined a
      decimal attribute. In the past only int and string (or a group
      of strings) were allowed as index key. Now decimal attributes
      are also allowed and supported.

    * [fix] making reference service to generate a more verbose return
      message.

    * [fix] Making af-gen to produce a better Commit implementation
      while the idl definition has either disabled the new or the edit
      service. Now af-gen produce a C# layer that notifies the
      developer that some service has been disabled, so it can't be
      executed.

    * [fix] Making af-gen to produce a Commit method, inside the C#
      implementation if either new or edit service is defined.

    * [fix] making "include on definition" to also accept as
      additional header code to be included at the server side to be
      "include on header". Updated af-gen reference manual to include
      this fix.

  libcoyote:

    * making coyote_dataset_free to just return if a null dataset
      reference is received.

    * making coyote_dataset_get_height and coyote_dataset_get_width to
      just return -1 if the received dataset is not properly defined.

    * adding a new function coyote_dataset_is_empty which allows to
      check the emptiness of a dataset.

    * added two new function: 

       - coyote_dataset_is_positive 
       - coyote_dataset_is_negative

      which allows to check if a particular cell inside the given
      dataset have a positive or negative boolean value.

    * making coyote_xml_destroy_message_full to nullify the message
      deallocated

    * [fix] fixing call to vortex_init at coyote_init function which
      wasn't using the vortex initialization status code.

    * modified function coyote_xml_validate_message in coyote_xml.c to
      initialize xmlValidCtxt variable memory

    * [fix] moved coyote layer checking performed at the libafdal
      level. Now coyote_xml_check_str and coyote_xml_check_str_to_free
      are implemented at coyote level.

    * [fix] fixing client STUB search interface generation to not
      include escaped characters already included at the server
      side. (Coyote layer also implements character escaping).

    * adding support for COYOTE_XML_ARG_DATASET_TO_FREE. This will
      allow AfDal layer to provide a dataset reference that should be
      deallocated once used.

    * adding support to libcoyote layer to initialize mime type for
      channels created under the profile coyote-profile to be
      application/xml.

  libafdal:

    * fixing previous memory leak (a queue not properly released)
      inside the afdal_sync module.  changing default synchronous
      timeout to 60 seconds instead of 10 seconds.

    * making afdal_request to drop a warning log on error frame
      received (was using debug log previously).

    * adding a synchronous version for the
      afdal_session_refresh_session function inside the afdal_session
      module:

        -  afdal_sync_session_refresh.

      Added documentation for this function and update documentation
      for afdal_session_refresh_session.

    * updating library to include support for the new return type:
      AfDalStringData.

    * fixing funny bug inside the new return type process
    ---AfDalStringData--- caused by interpreting an string as an int.

    * adding a new supported incoming type for services: set of. Added
      a new module to support this new type: afdal_setof.h and
      afdal_setof.c. 

      This new incoming type allows Af-Arch client level to sent a set
      of elements. This was already supported but within the coyote
      layer using DataSets. Added all module documentation. Currently
      the module support set of: string, int, bool and decimal.

    * fixing a bug on __afdal_setof_add_common function. Wrong
      g_return_if_fail check.

    * fixing another bug (inverse mind) at afdal_setof_is function.

    * making afdal_setof_translate to not add a row if no next element
      is defined.

    * adding a new header file (afdal_types.h) to group all types
      definitions and minimize inter module dependencies.

    * implemented new error report mechanism which allows to receive
      all errors produced while perform afdal request at the process
      function.

      This solve a long term problem caused by having part of the
      source code check at the requester function and the rest at the
      process function. This also greatly simply afdal synchronous
      implementations. Error are now classified. Great!

    * adding a new function to afdal_setof module: afdal_setof_copy,
      which allows to perform a deep copy from a AfDalSetOf instance.

    * added new function to afdal request notifier module:
      afdal_request_notify_get_error, which returns the error
      description string according to the int error num.

    * updating libafdal layer to support the new return type:
      AfDalDecimalData. 

    *  refactored source code inside
      afdal_request_return_initial_and_close to be more easy to
      maintain and upgrade.

    * fixed a bug inside afdal_request which was making to not flag
      error replies with the given afdal error.

    * making afdal_request_close_and_return_initial to avoid creating
      a AfDalDecimal value if received data is empty.

    * fixing a bug causing to not translate
      COYOTE_CODE_SESSION_EXPIRED coyote error into
      AFDAL_SESSION_EXPIRED.

    * adding some checks to afdal_request_call_user_function to avoid
      calling a non-defined return function with non-defined afdal
      data.

    * making logout process to not free current session
      information. This is done at afdal exit time.

    * added new function afdal_session_clear which already clear
      current host location and session info. This function is called
      from afdal_exit function.

    * set implicit definition for VERSION and COMPILATION_DATE cmacros
      to be able to compile even if its value isn't passed

    * import io.h and process.h in windows instead of unistd.h

    * fixed wrong variable declaration after code statement in
      afdal_setof_destroy

    * make afdal_setof_destroy to exit when null value received

    * fixing wrong getenv declarations that should be g_getenv.

    * making notify request status to free operational data before
      notifying request status.

    * [fix] updating sync_implement/get_response base function to
      remove not needed log variables.

    * [new] adding new standard AfDal client STUB error:
      SEARCH_STRING_ERROR, to notify that no search string was
      established while using the search interface.

    * [fix] fixing wrong comments at request process function 
      __afdal_request_fill_state_and_response_values

     * [fix] fixing memory leaks on afdal_session module which was
       causing to loose memory while asking for server locations and
       translating session request replies from coyote datasets to the
       application level layer.

    * [fix] making afdal_support_get_boolean to support reading
      boolean types defined by values: 1, 't' or 'true'.

    * [fix] making afdal_request to be more verbose while reporting
      errors when a reply received is being processed.

    * [fix] fixing a possible race condition found at afdal_request
      module inside the channel reservation code. Previous code was
      making possible to create a channel pool twice. Making channel
      pool existence checking and creation to be atomic.

  af-arch-sharp:

    * adding a new class inside the afdal-sharp assembly: Sync, which
      wraps the afdal_sync public services.

    * Adding a new class __NodeData to support the c binding and the
      NodeData class.

    * Updating NodeData class constructor to copy request status data.

    * Updating Reference handler definition and AfDalInvokeReference
      class to conform the new Reference definition.

    * adding new binding inside the Session class to interface with
      afdal_session_refresh_session function inside the C layer. Also
      added documentation for this function.

    * added a new delegate to represent Session.Refresh method, called
      Refresh.

    * added binging for the new return type AfDalStringData
      represented by StringData class.

    * fixing a bug on AfDecimal.Modify function which was causing to
      free a resource not checked previously.

    * making AfDalList class to initialize internal values. Adding
      some checks to avoid AfDalList to break if no data is found.

    * Adding a new binding class SetOf.cs to support services provided
      by afdal_setof module.

    * adding C# binding for the new function implemented:
      NotifyGetError.

    * Updated DataNode class to include some checks at its constructor
      while receiving an Zero IntPtr. Making the constructor to build
      an non-commited DataNode with Id=-1.

    * adding new class DecimalData and __DecimalData to support C#
      bindings for the AfDalDecimalData return type.

    * adding a new constructor to __DecimalData class to support
      receiving incoming IntPtr values.

    * adding a new method to AfDecimal: Dispose to support disposing
      raw references.

    * implemented IDisposable interface for AfDecimal class. 

    * added new method Dispose to allow outside class consumers to
      dispose raw unmanaged references.

    * [new] added delegate definition for Previous service. 

    * [new] added new constructor to AfDalInvokeGetList class to
      include support for Previous service invocation.

    * [new] adding new method to AfDalList class: DisposeRaw, which
      allows to unref raw unmanaged references to AfDalDataList
      objects.

    * [new] adding a new class, AfdalInvokeNulCustom that perform a
      custom service invocation in an asynchronous way. This allows
      to invoke custom services that returns NulData values by only
      providing two methods: a method invocation init and a method
      invocation close.

    * [new] adding a new module to allow performing custom invocation
      for services which has a AfDalDecimalData as return value.
      Class added:
  
         - AfDalInvokeDecimalCustom

    * [fix] fixing and updating documentation for the
      AfDalInvokeNulCustom class, including a complete example on how
      to use it.

    * [fix] Fixing AfDalInvokeDecimalCustom to use its own resources
      to produce and manage the invocation. Added the threadnotify
      object, the result variable and an specific Process method.

    * [fix] Making NulData class to notify on its default constructor
      that it is an instance improperly used if it isn't modified
      before it reach the user space.

    * [fix] Making DataNode class to advice that the virtual methods
      Commit and Remove are being executed and that shouldn't
      happen. Now the user space application receives a notification
      about this issue.

  afdal-gtk-sharp:

    * adding a new class (AfDalInvokeRefresh) to enable asynchronous
      invocation into the Gtk# main loop for the new Refresh function
      added.

    * updated AfDalInvokeLogout class documentation.

    * [fix] applying general update to AfDal.Gtk# package to support
      null handlers to process replies. This enables to just issue an
      af-arch request without using a handler to perform the operation
      without paying attention to the reply.

  libafgs:

    * fixing a log to the console which wasn't accidentally dropping
      the database user and password being used by a particular
      server. Oopps!

    * fixing a bug at afgs_log_write function which was causing to
      SIGSEGV af-arch servers if they had not enough permissions to
      write or open log files.

    * [new] adding new function to destroy Af-Keys with only one
      parameter: afgs_afkeys_full_destroy.  Using
      vortex_connection_set_data_full function to automatically
      destroy previous af-key stored.

    * [fix] fixing search string generation due to new change
      introduced into coyote layer to escape characters from libafdal
      layer.

    * [fix] fixing a bug on service name recognition. It was accepting
      services for whose prefix was the same than the one being
      checked. Improved service name checking to use a comparison
      limited to the service name registered.

    * [new] splitted interface for afgs_command_execute_single_query
      into a second part that admits as a parameter a std arg
      value. API added:

         - afgs_command_execute_single_queryv

    * [new] added new function afgs_command_have_content to perform
      queries that seeks for know if there are values defined for a
      given SQL command.

    * [new] making af-arch to no longer depend on GDA
      library. Finally, Af-Arch project have gone into situation that
      must control how to connect to databases to ensure backend
      stability and memory usage.

    * [new] Adding DB handlers to perform the specific task while
      interfacing with database backend.

         - AfGsDBSingleHandler: interface definition for the create
           and close handlers, which creates and close a connection
           to the underlying database.

         - AfGsDBSingleQueryHandler: interface definition to perform
           single queries used by the single_query handler.

         - AfGsDBNonQueryHandler: interface definition to perform non
           query used by the non_query handler.

    * [new] Adding new opaque type: AfGsDBConnection which represent
      an abstract database connection to a database without exposing
      details to AfGs layer.

    * [new] Added specific implementation to support new database
      backend for postgresql installation. Internal API added:

          - __afgs_database_postgresql_close: implements a close
            connection operation on a postgresql database.

          - __afgs_database_postgresql_create: implements a create
            connection operation on a postgresql database.
  
          - __afgs_database_postgresql_single_query: implements a
            single query to the postgresql database.

          - __afgs_database_postgresql_non_query: implements a non
            query to the postgresql database.

    * [new] added a common database manager creation function, which
      initialize internal common values, and select a backend to
      use. Currently, the only backend implemented is
      postgresql. Internal API added:
 
          - __afgs_database_abstract_creation 

    * [fix] flagging afgs_database_init to be deprecated in favor to
      afgs_database_common_init.  Added documentation to explain how
      to initialize database backend using the new interface and to
      also explain that previous interface still works but it is
      deprecated.

    * [new] adding new API to implement abstract database single
      queries, non queries, close connections, create
      connections. API added:

         - afgs_database_execute_single_query: abstract single query
           implementation.

         - afgs_database_execute_non_query: abstract non query
           implementation.

    * [fix] flagging internal function afgs_command_get_dataset to be
      deprecated. Now this function is no longer needed because it
      was used to translate datamodels into datasets.

    * [fix] rewritten afgs_command_execute_* to use new database
      backend implementation rather than GDA.

    * [fix] flagging as deprecated source code inside
      afgs_command_get_table_field_types.  This is no longer needed
      (and I'm wondering which was the purpose of this function).

    * [fix] making afgs library to initialize vortex library backend
      to use as mime type for coyote profile: application/xml.

    * [fix] removing all references to gda from libafgs compilation.

    * [fix] making signal handling to not use exit rather than
      g_thread_exit.

    * [fix] making afgs_main_server_run to unref the config file
      received from the application server space.

    * [new] renamed internals function __afgs_command_get_connection
      and __afgs_command_release_connection to the following function
      and make them public:
   
        - afgs_command_connection_pool_get
        - afgs_command_connection_pool_release

      This new mechanism will allow to execute several sentences
      under the same context/connection. Added lot of documentation
      explaining how to use them.

    * [fix] rewritten afgs_command_execute_non_query/single_query to
      conform previous change.

    * [new] added new function to allow execute non query and single
      query either providing an std arg argument and providing the
      specific db connection to be used:
   
       - afgs_command_execute_non_queryv
       - afgs_command_execute_single_queryv
       - afgs_command_execute_non_query_with_conn
       - afgs_command_execute_single_query_with_conn

    * [new] adding new macros to manage transaction creation,
      roll backing and committing connection status. Added lot of
      documentation explaining how to use them. API added:
  
       - afgs_command_begin
       - afgs_command_commit
       - afgs_command_rollback

    * [fix] making afgs database module postgresql implementation to
      detect and fix boolean values generated by single query
      execution. Postgres returns 't' or 'f', as appropriate, while
      standard af-arch boolean values are TRUE and FALSE.

    * [new] adding a new function to perform have content operation
      providing the connection that was reserved.
   
         - afgs_command_have_content_with_con

    * [new] adding new API to make easy write non query and single
      query statements through afgs_command_execute_single_query and
      afgs_command_execute_non_query. API added:

         - SINGLE_QUERY
         - NON_QUERY

    * [new] adding new API to perform operation to get is a given SQL
      statement, that returns a boolean value, contains a positive
      boolean one. API added:

        - afgs_command_is_positive_content
        - afgs_command_is_positive_content_with_con

    * [new] adding new macros to perform common operations while
      producing transactional code at the server side to be more
      easy. API added:

        - AFGS_ROLLBACK_ERROR
        - AFGS_BEGIN_TRANSACTION
        - AFGS_COMMIT_TRANSACTION

    * [new] adding more support function to afgs command module. API
added:

        - NON_QUERY_WITH_CON, allows to perform a non query operation
          using a selected connection.

  aspl-clm:

    * fixing warning error on connection module due to some changes
      inside the afdal_password module.

    * adding a new command "set perm to users", which allows to set a
      permission pattern to a set of users.

    * making aspl-clm to not use readline directly. Insted use
      support_readline.  This will be used to support the issue of
      several threads asking for console data.

    * fixing a bug on implementing --quiet option which was causing
      vortex to behave in an estrange way. 

      Problem was caused by closing the std descriptor (0) and the
      allocating a new socket descriptor (with socket) which was using
      the get next available fd, in this case, 0.

      Now, for every print to the console makes remote peer to receive
      and unexpected message.  Now, aspl_clm uses a aspl_clm_print
      function which disables the stdout not closing the stdarg out
      but using a global variable.

    * making all aspl-clm source code to use the new aspl_clm_print
      function.

    * fixed wrong variable declaration after code statement in
      aspl_clm_getpass.c and support.c

    * reorder of included files in asplclm.h to avoid include
      winsock.h version 1.

    * import io.h and process.h in windows instead of unistd.h

    * set implicit definition for AFARCH_VERSION cmacro to be able to
      compile even if its value isnt passed

    * [fix] fixing patterns support for "list perm" command. Now "list
      perm *somepattern*" command works.

    * [fix] making aspl-clm to drop a note while using password
      command so the user gets information about the user being
      logged where the operation will be applied. Making connection
      module to report current user logged using
      connection_get_current_user.

    * [fix] making list perm command to not loose memory (async queue
      reference) when it is executed.


Acknowledgements

    If you have reach this point for the changelog you are our hero!!!

About Advanced Software Production Line 

    Af-Arch is being developed and maintained by Advanced Software
    Procution Line. 

    ASPL provides support and customer services to integrate GNU/Linux
    and Open Source technologies into organization procedures. 

    Related to Af-Arch, ASPL provides support to develop distributed
    system to solve application data integration solutions.

     
-- 
Francis Brosnan Blazquez <francis en aspl.es>
Advanced Software Production Line, S.L.




Más información sobre la lista de distribución ASPL-Fact-announce