4.8.0
Release Date: May 25, 2010
D3 - Distributed Data Delivery [new]
EBX.Platform now offers the possibility to replicate Master Data from an EBX.Platform instance to several others. Rather than relying on one central hub, which can easily become a single point of failure, Orchestra Networks customers are able to deploy EBX.Platform in a distributed architecture to meet two key requirements:
-
Data as a Service in SOA: D3 allows any SOA infrastructure (Enterprise Service Bus) to consume real-time Data Services.
-
Geographical Federation: D3 allows to distribute data to worldwide users and applications, by synchronizing a central repository with local instances.
Technically, D3 is based on a transactional synchronization technology, using SOAP on HTTP/HTTPS and can be deployed on existing infrastructure, without any proprietary protocols or database replication systems.
For more information, see the reference documentation .
User Interface
Multi-level Filters in Hierarchies
A filter can now be defined at each level of a custom hierarchy.
Pruned Tree in Hierarchies
A pruned mode is now available in EBX.Manager: if pruned mode is enabled, the nodes that do not have any descendant in the target table are not displayed. This is particularly useful for searching items.
The pruned mode can be specified in a custom hierarchy. It is also always enabled in the context of a quick search.
Nodes Documentation
The documentation on nodes, formerly displayed below nodes by a click on the documentation "I" button, is now displayed in a documentation pane . Moreover, the documentation is also henceforth available for "under terminal node" (that is nodes of a bean).
The documentation pane is a floating element in the Manager displayed near the label. It appears when the mouse hovers over the label more than one second. The pane displays the label and the description specified in the underlying schema but also the element's type, its constraints, an optional error message and the button of the assistant (in developer mode).
For a specific UI Component (
UIBeanEditor
), the developer is able to customize the text of the pane. To add a customized documentation, the method
UIResponseContext.addUILabel(UIFormLabelSpec)
must be invoked.
CSV Encoding
The user is now able to specify the encoding of the CSV file to be imported or exported.
Data Model
More Intuitive Data Model Assistant
The user interface of the Data Model Assistant has been improved so as to be more intuitive:
-
The glossary has been simplified and unified.
-
The actions in the menus of the data structure page have been completed and reordered.
-
The "Publish Model" service (previously called "Generate Model") has been enhanced. The impacted instances are displayed with a navigation link.
-
Some technical information is displayed only in development mode - except for an administrator, for whom all information is always displayed.
-
When a Data Model is created, it is automatically activated (indeed, activation is required in order to publish a model).
Inter-branch and Inter-instance Links
Inter-branch Foreign Keys
It is now possible to define a foreign key targeting a table defined in a specific branch (
osd:tableRef
with
branch
element defined).
For more information, see foreign key constraint .
Filters on Inter-instance Foreign Keys
It is now possible to define a filter over an inter-instance foreign key (
osd:tableRef
with
container
element defined).
For more information, see foreign key constraint .
Inter-instance Selection Links
It is now possible to define a selection link targeting a table in a specific container (
osd:select
with
container
element defined).
For more information, see selection link .
Indexes
Indexing has been enhanced so as to support the declaration of an index on a sequence of columns. Indexing speeds up table access for requests matching these fields.
For more information, see tables .
Some indexes are automatically built from the model:
-
primary key fields;
-
any node defining a foreign key constraint (
osd:tableRef); -
nodes defined as being unique by the
xs:uniqueconstraint; -
any auto incremented node (
osd:autoIncrement).
Services Display
Property
orderInMenu
on service declaration has been added to specify the position of the service. This position is used for ordering services at display in EBX.Manager.
For more information, see ServiceContext .
Workflow
More Intuitive Workflow Definition
The user interface of the Workflow Definition module has been enhanced so as to be more intuitive:
-
The glossary has been simplified and unified.
-
The user task definition interface has been improved: instead of a long form, tabs are proposed; documentation is displayed when the mouse hovers the fields.
-
When a Workflow Definition is created, it is automatically activated (indeed, activation is required in order to publish a workflow).
Interaction retrieving
Built-in services have been improved in order to handle the interaction retrieving:
-
Creation service: when the service is called ("Open Work Item" button) whereas the interaction is already complete (record has been created), the created record is displayed in update or read-only mode (depending on the user rights). This way, it is no possible to create several records.
-
Duplication service: when the service is called whereas the interaction is already complete, the duplicated record is displayed in update or read-only mode (depending on the user rights). This way, it is no possible to duplicate several records.
For specific services, an internal parameters map is now available. Thanks to this map, it is possible to save and read values in order to have information about service progress. This way, the developper can handle special cases of interaction retrieving.
API
XPath on Aggregated List
XPath predicates can now be built upon aggregated list fields.
CSV Imports and Exports
The new method setEncoding allows to specify an encoding other than "UTF-8".
The new method setForceEnclosingFields specifies that the fields will always be enclosed by the text delimiter even if the fields do not contain any particular character.
Mapping to Java
Documentation
A new dedicated chapter, Mapping to Java , has been added to the documentation so as to group and explain the various provided features and contracts that the developer has to follow.
Mutable objects
Before this version, the contract to access Master Data represented in Java as "mutable objects" warned the developer that he should never directly modify these objects (dates, lists or beans), otherwise he could get unpredictable behavior. This limitation is henceforth removed: for more information, see section How to access Master Data from Java? .
Management of dates
As specified in the section
Mapping of Datatypes
, the Java
Date
object representing either a
xs:date
or a
xs:time
is henceforth immediately normalized when a random Java
Date
is set.
Stricter checks
These two evolutions are based on an internal new mechanism, called "value internalization" (see also performance section below). Another benefit of this mechanism, is that stricter checks are performed when a value is set.
Internal parameters of an interaction
The new method getInternalParameters allows to get the map of internal parameters.
The new method setInternalParameters allows to update the map of internal parameters.
Performance and Memory Usage
Memory Usage
Loading strategy
For each branch or version, it is now possible to specify the loading strategy of its resources. In addition to the previously existing "Load and unload on demand" mode, a "Forced load" mode can be set so that the resources are preloaded and cannot be cleared from memory unless the branch or version is closed. For more information see the Loading strategy section.
Additionally, in the default "soft" mode, branches and versions management has been improved so as to completely unload them off the memory if they are not used and/or memory is required.
Object pooling
Object pooling is henceforth internally ensured for several model patterns (for example
xs:enumeration
and
osd:tableRef
). Depending on the model and data, this can drastically reduce the memory required for fully loading tables (a gain of 90% of free space has been observed in some configurations).
Value internalization
Another new mechanism, "value internalization", is also performed transparently: this allows a cheaper representation of several data types. However this also involves an allocation cost when the Master Data is read, especially for large aggregated lists or "fat beans". For more information, see section How to access Master Data from Java? .
Indexes
The structure of indexes has been simplified so that occupy less space. It is to be noted however that new indexes (see section above), while enhancing performance, imply a memory cost. It is therefore recommended to evaluate the memory figure required by existing repositories on this new version.
Monitoring
In order to monitor the memory usage and object pooling, a new
log category
has been added:
monitoring
category produces a log in CSV format.
Performance of Validation
The validation of foreign key constraints has been optimized, using indexes, to reduce the cost and the duration of the initial and successive validations. Thus the validation state of a foreign key constraint is no more set as obsolete as soon as there is an insertion or a deletion in a referenced table. Indeed, when an insertion or a deletion occurs in a target table, depending foreign key constraint are immediately revalidated.
Performance of hierarchies
Several enhancements have been made in the internal engine of hierarchies, so that algorithms are more efficient and allocate less objects.
Manager in constrained mode for large tables.
When displaying tables which contain more than 1 million of records, the manager will automatically switch to a constrained mode, for non-administrator users; then:
-
the table may only be sorted according to columns which correspond to an index;
-
filtering and searching are disabled.
Miscellaneous
Inherited Attributes
Inherited Attributes are not in a Beta version anymore.
Monitoring
Logging has new categories :
-
ebx.log4j.category.log.monitoringis available to display raw data from the cache monitoring, -
ebx.log4j.category.log.requestis available to display the optimization strategy for every table request issued, -
ebx.log4j.category.log.dataServicesis available to log Data Services access. -
ebx.log4j.category.log.d3is available to log D3 events.
Workflow logging has also been completed.
Backward Compatibility
Backward compatibility
Adaptation
is now an interface, when it formerly was an abstract class. This causes binary incompatibility between the 4.8.0 ebx.jar library and all existing client code making use of this class. As a consequence, in order to avoid Java error
IncompatibleClassChangeError
, existing client code has to be recompiled against the new 4.8.0 ebx.jar library, and redeployed together with the new EBX binaries;
Adaptation instance activation
Now, when a new adaptation instance is created, it is activated by default. As a consequence, all constraints will be checked by default during validation (including
minOccurs
constraint).
Removed deprecated methods
The following, already deprecated, methods have been removed:
compareTo
and
getValues
in class
PrimaryKey
;
doCreateOcculting(PrimaryKey, AdaptationTable)
,
doCreateOverwriting(PrimaryKey, HrNode, AdaptationTable)
, in class
ProcedureContext
.
Removed property
The property
ebx.repository.preload
has been removed from
ebx.properties
file. It is replaced by a "Loading strategy" that can be specified for each branch. For more information see the
Loading strategy
section.
History of exports
Built-in XML and CSV Exports are henceforth no longer logged into history. If the service is used from EBX.Manager, it is considered that this information is useless in history (the exported is uploaded by the end user, it is similar to a simple read-only operation). For programmatic exports that directly use the class
ExportSpec
, it is considered the developer's responsibility to implement the log, if needed.
CSV and XML export
The control of permissions is stronger. Now, the access rights are checked when exporting. Indeed the method
checkAccessRule
in class
ExportSpec
is set to true instead of false.
Forgotten invocations of setValue do not work anymore
Before this version, the contract to access Master Data represented in Java as "mutable objects" warned the developer that he should never directly modify these objects (dates, lists or beans), however such a wrong usage of the API could not be detected and, under some conditions, it was apparently working. The typical scenario is the following: the mutable object obtained by means of the method
ValueContext.getValue
is directly modified (contract's violation), and the method
ValueContextForUpdate.setValue
is not invoked. It is henceforth mandatory to invoke the method
ValueContextForUpdate.setValue
for the modification to be taken into account.
.For more information, see section How to access Master Data from Java? .
Bug Fixes
Core Cache
-
[269] XPath predicate can be case-insensitive.
Some XPath predicates are case-insensitive.
-
[1558] Malformed predicate expressions are not correctly caught.
Malformed predicate expressions are not correctly caught.
-
[1650] Uniqueness not correctly checked if primary key is of type xs:date.
A table primary key is of type xs:date and two new records with primary key D1 and D2 are created programmatically. The merge process does not detect the uniqueness of both records. This happens when D1 is the same day as D2 but is different in the time of the day. This leads to having the same primary key twice in the table after the merge.
-
[1967] Granting all privileges is ineffective in the context of a CSV import.
The method
ProcedureContext.setAllPrivileges(true)is ineffective in the context of a CSV import. -
[2135] XPath syntax: whitespace between the token and its brace.
If there is a space between the logical 'not' token and its opening brace, the expression is not correctly evaluated (and there is no parsing error).
If there is a space between a function name and its opening brace, the error message is not clear ("MalformedXPathPredicateException: Malformed atomic expression: No token in expression:...").
Data Model & DMA
-
[2203] In Data Model Assistant, the foreign key setup does not display sorted choices.
When defining a foreign key (
osd:tableRef), the list of target tables is provided unsorted in a drop-down list. Additionally, the component does not provide the functionalities of the default AJAX selection component (search, paging, etc.). -
[2363] In Data Model Assistant, a problem can occur if "target branch" has been closed.
In Data Model Assistant, when a "target branch" has been specified in "schema configuration" and when this branch has been closed and purged, then there is no validation error. When the user tries to generate the schema, a java.lang.NullPointerException is thrown.
Import Export
-
[229] Error when importing an empty CSV file.
The CSV import service reports an error when we select the XPath header option and try to import an empty file (without any header).
-
[238] CSV export/import: file encoding limitations.
Here are two limitations related to the encoding of CSV files:
In CSV Import, there is an error if the CSV file to be imported is not encoded in "UTF-8". The error is
sun.io.MalformedInputException. It can be fixed by re-encoding the file into UTF-8 before uploading it, but EBX.Platform should allow to specify the encoding.In CSV Export, the line separator used in the generated files is a CR/LF. So the exported files are not portable to some environments, such as Unix. EBX.Platform should allow to specify another line separator.
User Interface
-
[2163] Unexpected error reported when displaying the table.
A NullPointerException can occur when the table is displayed in a slow user-interface.
-
[2344] A confusing message is displayed if too large an integer is submitted.
On a field of 'xs:int' or 'xs:integer' type, if the user fills an integer too long for the Integer Java Object, the error message displays "Input value '...' is not an integer". A more understandable message should be displayed.
Workflow
-
[2353] The built-in service "create a new record", in a user task, allows to create several records.
For a user task invoking the service "create a new record", the user opens the work item, fills in the fields, submits changes so as to create the new record, but does not accept nor reject the task (for example he just closes the user task window). Then he is able to open the work item again and to create another record... Hence the number of newly created records is not limited to a single one. Instead, when the user clicks again on the "Open Work Item" button he should be directed to the record he has previously created so as to be able to complete or review the data until he accepts (or rejects).