[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