Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
The DWP variant of the JSF2EJB3JPA2 relies on:
JPA2 for the entity layer
EJB3 for the service layer, with a dual implementation for Spring compatibility
JSF2/primefaces for the web layer
Bytecode enhancements with Lombok framework
Dozer for automatic conversion of data objects between layers
Bespoke framework classes supplied by the customer. The path to this framework must be setup in the “
bespokeFwkPackage
” workflow option.
Please note that the Lombok framework is not provided in this release. To install it:
Download the Lombok framework (http://projectlombok.org/download.html )
Copy the downloaded jar in the %BLUAGE_INSTALL_PATH%/BLUAGE/eclipse folder
Add this line at the end of the bluage.ini file :
-javaagent:lombok.jar
The specifics of this technical stack requires some custom modelling practices, which will be described below.
The entities and BOs are modelled as usual, with
<<PK_ENTITY>>
and<<PK_BUSINESS_OBJECT>>
stereotypes.Unlike the usual practice, the entities will be generated as JPA objects, and the BOs as normal java objects.
Despite being modelled in the entity layer, the BOs will be generated in the service layer.
In the generated code, dozer will be used to automatically convert from entity to BO, and conversely. Lists can be managed the same way. Generally speaking, there is no need to manipulate the entities directly in the model, but it is allowed.
In the entities, the id must be modelled with “id” name, “Long” type and
<<Identifier>>
stereotype. This is mandatory because the attribute is supplied by the framework in the generated code. The id will not be generated in the entity (it is inherited), but will be generated in the BO (used to retain the value throughout Dozer transfers).Version attribute is also supplied by the framework, thus stereotypes for version customizations are not supported.
For each entity, a service class called a DataManager will be created. Each entity named MyEntity will have its corresponding MyEntityDM.
Usually, this class will be generated under the hood for raw low level data manipulation. There should be HQL and CRUD operations in the service layer relying on BOS (as in usual Bluage models) that will automatically generate the corresponding raw method in the correct Data Manager.
The raw method in Data Manager will operate with entities.
The method in the service layer will convert the input and return parameters using Dozer.
Dispatching in the correct Data Manager is achieved with:
Return type for
<<find_by_id>>
operationsInput type for
<<create>>
,<<update>>
and<<delete>>
operations“bo”
tag for<<hql_operation>>
. Thus it is mandatory to supply this tag.
Two distinct projects are generated for the service layer: Common service module and Business service module.
There must be two
<<PK_SERVICE>>
packages in the model.One of them must additionally hold the
<<PK_COMMON_SERVICE>>
stereotype.The modelled services will generate an interface, an implementation with
@Named
annotation and the actual methods, and an EJB that extends the implementation.
There are three operations in the framework for data management:
public <T> T findByID(Class<T> entityClass, Long id)
public <T> T save(T entity)
public <T> void delete(T entity)
Note: there is no merge support in the framework.
<<find_by_id>>
stereotype maps to the first one,<<create>>
and<<update>>
to the second one, and<<delete>>
to the third one.<<XXX_all>>
stereotypes are not supported. Neither is<<find_by_properties>>
.<<find_by_id>>
generates a method with a call to the framework, and then a Dozer transfer. Unlike the usual assumption, the model operation must take aLong
as a parameter (rather than the BO). The class parameter will be added automatically in the generated code.<<create>>
and<<update>>
generate a method with a Dozer transfer of the parameter, a call to the framework, and then a Dozer transfer of the result. Unlike the usual assumption, the model operation must return the BO (rather than a Boolean).<<delete>>
generates a method with a Dozer transfer and a call to the framework. Unlike the usual assumption, the model operation must return void.
They are modelled as usual, except that the
“Bo”
tag is mandatory even if the return type is not a collection.They produce methods in the DM for raw entity access, and methods in the service with a Dozer transfer of the parameters (if needed), a call to the generated DM method, and a Dozer transfer of the result (if needed).
There is nothing unusual in these operations except what is described in next chapter. Bags and Bluage Common Utils can be used as usual. The Bluage Common Utils will be generated in the package defined in the “
utilsPackageName
” workflow option, in the CSM project.
Copy operations are modelled as usual and produce methods with calls to the Dozer transfer methods supplied in the framework.
New stereotypes are added for specific annotations:
<<@Audit>>
<<@Log>>
<<@RefreshPDSnapshot>>
<<@Secure>>
They can decorate operations or interfaces. If they decorate an interface, the annotation will be put on the EJB.
The
<<throwBusinessException>>
stereotype adds the corresponding throw clause an operation. The actual throw code must be added thanks to an opaque action.
The screenshot below is an excerpt from the client application describing the desired architecture.
As seen in this sample, direct use of entities in the process diagrams (instead of the BO/Dozer mechanics) is possible.
To achieve this in the model, some new concepts are introduced.
In this product, it is now allowed to manipulate entities in process diagrams.
Direct use of entity-based Data manager operations is enabled.
These operations (CRUD and HQL) must be modelled in the same way as described before, except that the entity must be used instead of the BO (in the signature AND in the
“bo”
tag of the<<hql_operation>>
).These operations must be modelled in a
<<PK_DATA_MANAGER>>
package added beside the related<<PK_ENTITY>>
and<<PK_BUSINESS_OBJECT>>
.The interface name is not relevant, the operations will be dispatched in the correct Data Manager according to the rule described above in 2)b).
Nonetheless, it is a good practice to match the expected Data Manager for readability and traceability sake.
The operations can then be used in process diagrams as desired.
The CRUD methods in DM will not be actually generated: their use in the process diagrams will lead to a direct call to the inherited framework methods described in 3)b). In case of a
<<find_by_id>>
call, the additionalClass
parameter will be automatically added during generation.Operations with
<<hql_operation>>
stereotype will be generated with raw entity access.
In the specific case where the same HQL operation must be used with raw entity access in some diagrams and with BO access and automatic Dozer in others, it is not desirable to design and setup the query twice. In addition, as the BO
<<hql_operation>>
generates its own raw DM method, it would lead to a duplicate method in the DM.Instead, a
<<wrapper>>
stereotype with“target”
tag is supplied.In this kind of situation, the raw entity operation must be fully modelled in the DM, and the service operation must have the same parameters, the
<<wrapper>>
stereotype, and the“target”
tag populated with the DM operation. It must not have the<<hql_operation>>
stereotype, and it may not have the same name.This stereotype is not supposed to be used often: there should not be many cases where you need the exact same
<<hql_operation>>
in raw entity mode and in BO mode.
The
<<copy>>
operations explained in 3)e) can also be used to transfer from entity to BO and from BO to entity.
With this set of new functionalities, a model can be designed to match the sample code above. A slight difference is that the calls to Transformer will be calls to the
<<copy>>
operations, which in turn call Transformer.If this
“registerCustomer”
method is designed with normal process diagrams using BOs, the resulting code may lead to address duplication instead of attaching a customer to an existing address, exactly as stated by the comment in the supplied code:
Please note that the correct behaviour might also have been obtained by relying on the JPA merge functionality, but the given framework does not supply it.
This product designs the controllers by relying on the use cases: several pages in the same use case will share the same controller. The controller name will be the use case name + “Epm”.
The controller will contain all the event calls in all the corresponding pages, and all the properties in all the corresponding pages.
An event can be common to several pages. In this case, it can be inserted in the use case instead of the view
A property in a page will be generated in the controller, so a property shared in several pages can simply be modelled in any of these pages and used across all.
The scope by default is the Conversation Scope. If a Request Scope is desired, the new
<<REQUEST_SCOPED>>
stereotype is available.In conversation scope, the conversation is started by using the
<<BEGIN_CONVERSATION>>
stereotype on the event. The conversation is ended by using the<<END_CONVERSATION>>
stereotype.
Three session management methods are supplied in the framework:
public void addSessionAttribute(String key, Object value)
public Object getSessionAttribute(String key)
public void removeSessionAttribute(String key)
These methods are supplied in the bluage profiles. They are located in the View control in the ui profile.
Manually updating the Output Pin type for the
getSessionAttribute
operation generates the appropriate cast in the code.
The pages are designed as usual in Rich UI modelling. Specific controls can be designed and used the normal way.
The operation wizard generates signatures consistent with the assumptions explained in 3)b)
In the KDM setup, each Project type named XXX must be accompanied by the Project Type named XXX-parent with option skipped=false. This parent will not be generated and must contain the maven setup for the actual parent project of the desired architecture (fields
“Project name”
,“Maven Group Id”
and“Maven Artifact Version”
).The actual Maven dependencies must be handled by these use supplied parents, as Maven management is out of scope of the product.
In the desired architecture, the BSM and EPM project belong to an enclosing project. This is achieved by using the
“Parent Project Type”
attribute on the project type.The generated project will be inside its enclosing project, but will also be imported as a top level project in the eclipse workspace, which will lead to this kind of workspace:
Here, the inner register-customer-bsm
and register-customer-epm
folders are physically the same as the top level projects with the same name.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
As the Data Layer is meant to be shared between the online programs and the batch programs, a flag was added in the workflow to generate the context management classes (for batches) in the Data Layer. This flag is available in this product, allowing a consistent generation between this product and the batch product.
The flag is a workflow option named
generateContextClasses
found in thecom.netfective.bluage.dwp.data
BSP.
An
ExceptionFactory
has been added to the dwp profile. It allows to add business exception throws and technical exception throws in process diagrams without custom opaque code.Try-catch constructions, on the other hand, must be written as opaque code.
We discourage the use of these, since validation code through exceptions is not a good idea. In these excerpts from the sample application:
The exception handling can easily be removed.
The validateCustomer method should return a Boolean.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
The
getDifferenceInDays()
method ofDataUtils
now returns the proper value when provided dates range spans daylight saving time.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
A set of improvements aiming at facilitating modernization of common cases of OCCURS definition and manipulation in COBOL are provided. Those evolutions target 1-dimension OCCURS of fixed size.
The Legacy Object Modernization wizard (aka TOM) will now modernize OCCURS fields as associations of the proper cardinality (when subfields are present), or typed Lists (for scalar types). Optionally those choices can be manually overridden to Blu Age array data types (
string[]
, etc.).Transmodeling generates appropriate BAGS access expressions for legacy expressions accessing the following mapped fields:
fields modernized as
List
s (by using BDM for instance),fields modernized as
Array
s of primitive types using TOM,fields modernized as Association with
0..*
cardinality and a “@collection.type
” stereotype set with a “list
” value,previously mapped synthetic attributes describing access to collections (see “Mapping” section below),
While transmodeling COBOL OCCURS specificities (ambiguous subscripts, non-zero-based indexes) are taken into account.
Note that this improvement is not supported while transmodelling in “NO BAGS” mode. Hence checking “Blu Age>Blu Age Reverse>Transmodelling>Generate BAGS in guard and opaque action
” in Preferences is mandatory to benefit from this feature.
As an addition to evolutions described above:
Classes can now be deleted in the Legacy Object Modernization tree. This is useful in the scenario where the fields of multiple legacy entities are moved in a single modernized one, hence leaving “empty” classes.
The transmodeling wizard now provides the user with the possibility to resolve “missing mappings” by pointing to synthetic getters and setters, either defined by hand or generated by the BDM tool. Once mapped, calls to those methods will automatically be generated by transmodeling.
By default this possibility is deactivated (only previous behavior, mapping to properties, is provided). To enable this feature, check the “Blu Age>Blu Age Reverse>Transmodelling>Enable mapping to operation
” Preference:
Then, while transmodelling, getter and setter operations can be picked for unmapped elements as follows:
Make sure the “Blu Age>Blu Age Reverse>UML Pickers>Only show service operations
” Preference is unchecked.
Validate all and finish transmodeling Wizard.
Transmodeling generates appropriate BAGS access expressions to synthetics getters and setters.
Here is an example of the resulting model and code:
Note that this improvement is only supported for indexed accesses for now.
As an addition to evolutions described above, it is now possible to pick <<bean>>
elements (hence residing in PK_SERVICE
).
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
The following COBOL construction are now properly parsed:
The NOT ON EXCEPTION and AT clauses in FIND statement.
The ON EXCEPTION clause in DELETE statement.
FUNCTION(DMERROR)
MYSELF(VALUE)
CHANGE ATTRIBUTE AREAS
The DOUBLE and BLANK features on PIC definition
The non-mandatory keyword IS in SIGN IS features on PIC definition
The RECORD feature on SEEK statement
The MOVE [A :B :C] form statement
The THRU features of RENAMES clause on data definition
The COBOL EVALUATE statement with ALSO feature is now properly transmodeled.
The nested IF Control Structures are now right after “CALL PROGRAM.” Statement.
With respect to the previous released evolution of the capability to map fields on synthetic getters and setters: the restriction of use on non-indexed access has been lifted. Thus, reading and writing access on fields can use these synthetic getters and setters as the shows the following screen shot.
A tool facilitating the modernization of SADS screens to RichUI UML modelization is provided. It takes as an input an SADS textual dump of screens and their associated structure description. To use this wizard, note that a knownledge base project must be created and the target UML model opened beforehand. Then:
To access the wizard, rename the dump in the Package Explorer so that it bears a “.TXT” extension, then right click on it and choose the “Modernize SADS Dump as RichUI” menu entry.
On the first wizard page, select one screen to extract:
On the next wizard page, an overview of the fields which will be extracted and their associated screen value object properties are provided:
Press Finish to generate a value object describing those fields and a RichUI modelization of this screen mapped to this value object:
Note that in order to gain access to the Bluage UI palette, the following contextual menu action must be performed on the generated activity diagram:
Refactor > Change Type > Custom Diagrams > Bluage UI
A stack using JSF2, EJB3.1, JPA2 and Hibernate as a provider is supplied.
Generated POMs and EAR configuration are upgraded to fit the Weblogic application server.
Some methods are not allowed to be final in the EJBs in the Weblogic server. A workflow option “enableEJBDynamicExtension” was supplied to remove the final mark. It must be set to true.
The workflow option “hibernateTransactionJtaPlatform” can be used to specify the transactions platform.
In order to deploy under Weblogic, this option must be set to “org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform”.
When this option is set, the “hibernateTransactionFactoryClass” workflow option must be unset.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Mapping on particular modernized entities was wrong and thus led to “TODO” opaque actions or invalid guard on conditions. This concerned level 01 or 77 with only level 88 entities. It was fixed.
Some wrong “Abstract::abs()” were generated in BAGS opaque action during transmodeling of a move statement from String to a signed type. In this case no conversion to absolute value is used anymore. If an incompatibility of type is detected, a warning is added to generated UML.
Some wrong @ReverseUtils.NoName() operation were generated when transmodeling Perform XXX THRU YYY statement. It was fixed.
SET XXXX (TITLE) TO YYY statement led to exception in transmodeling step. It was fixed.
Lack of linking on entities defined from file description and database led to “TODO” opaque actions. Linking on these entities was established and solved the problem.
Specific fragments of pom.xml configuration can now be directly injected into the generated project.
A workflow property specificPomPath has been added to the com.netfective.bluage.jsf2.myfaces.primefaces BSP, in order to specify the path to the text file to inject.
If the project is configured to use a Maven parent pom, the content of this file will be injected into the parent pom.xml. Otherwise, it will be injected into the pom.xml of all modules.
Only top-level configuration elements can be injected this way, which means elements available under the <project> element.
Fixes have been made in order to manage multiple datasource connections. For each secondary datasource, the <<URL_Connection>> stereotype must be applied to:
the package containing the entities stored in this datasource.
the interface containing the services associated with these entities.
The dbkey tag must then be filled with the JNDI name of the persistence unit handling the datasource.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Decomposition mechanism of BAGS expressions failed when index accesses concern item modeled with the “List” type and “Template Object” stereotype.
Transmodelling of
PERFORM VARYING
statement was wrong. TheWHILE
pattern, from the transmodelling, used a boolean condition, from theUNTIL
Cobol Clause, which has to be negated.The SCL/JCP Annotation Editor is available again.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Handle the ALTER statement.
Possibility to use the following keywords as data name.
SAVE
PRIOR
CLEAR
AUDITS
Handle the POINTER VALUE NULL in segment definition.
Handle the EXTERNAL keyword in File Description definition.
Handle the CHARACTERS and AFTER keywords in COPY REPLACING BY statement.
Generated warnings about Integer to String conversion in transtyping have been removed, since they are not relevant for the supported target languages.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page ;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Lombok annotations were changed in the generated code. Now annotations
@Getter
and@Setter
are used instead of the@Data
annotation.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Kepler (Eclipse 4.3);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page ;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
A Sonar analysis was taken into account. For the JSF2/EJB3 stack:
The Business Objects now have symmetric equals methods that use
getClass()
instead ofinstanceof
.Some
Serializable
markers were added.Some
equals(…)
andhashcode()
methods were written along with thecompareTo(…)
method.Exception management was improved.
isAssignableFrom
is used instead of comparing the class names when possible.Some utility methods were improved (
isDouble
andisInteger
).
In order to allow arbitrary annotations on the generated code, a new feature was added which allows to add raw text on model elements, through the use of
headerText
stereotype and tagged value.The tagged value may be multi-line and will be printed as-is in the generated code
Pay attention that with this feature, you must provide the Fully Qualified Name for your annotations.
Such tagged values will be taken into account on Business Objects, Entity attributes, BO process operations, Service interfaces and Service process operations.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Mars (Eclipse 4.5.1);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page ;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Following the migration of the base eclipse platform to Mars, integration was done with version 18.3 of Magicdraw.
Following the migration of the base eclipse platform to Mars, an integration with
Weblogic
application server can now be used in the environment.
Warning | |
---|---|
Due to technical limitations, a supplied patch must be used on the Blu Age product if it is to be used in a continuous integration environment (Blu Age launched by a command line). |
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Mars (Eclipse 4.5.1);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page ;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
When setting the
primefacesVersion
workflow option to5.X
, theTableDataModel
class is correctly generated for Primefaces 5.
Global Notes:
5.X products are parts of the “Blu Age II – Legacy to cloud” product family, built on Mars (Eclipse 4.5.1);
Product documentation is available at http://wikimod.bluage.com/mediawiki/index.php/Main_Page ;
Starting with version 5.0, a new license management has been introduced, requiring the use of a new License Server (shipped separately – see corresponding documentation for details);
5.X versions rely on the launch configurations mechanism introduced with the 4.X product series in replacement of the previous workflow mechanism. Migrating from the 3.X workflow to the 5.X launch configuration is described in a dedicated guide.
Bluage product is now integrated with Magicdraw 18.4. It benefits from several Magicdraw bug fixes, some of which are:
It is now possible to open a second magicdraw project and get the second containment tree.
The containment tree is now resizable.
There is no more a need to patch Bluage for continuous integration.