Posts Tagged ‘release’

eXo JCR 1.14.0-CR1 is out

Thursday, March 31st, 2011

The core Java Content Repository functionality that we leverage in both GateIn and eXo Platform 3 is eXo JCR (developed in JBoss.org, the JBoss open source forge). We have made many improvements and introduced new features in our upcoming version of eXo JCR (eXo JCR 1.14.0-CR1). The following post provides a technical deep-dive into some of these changes.

New Features

JBoss Infinispan

The most significant of the new features found in eXo JCR 1.14 is the ability to rely on Infinispan as the underlying cache; this provides a more scalable clustering solution. For now, we only used and tested Infinispan (also known as ISPN) as an alternative to JBoss Cache (also known as JBC, which you can still use if you prefer). In other words, Infinispan is only used as a simple replicated cache, which is still interesting in terms of memory footprint and concurrency.

According to our first internal tests, ISPN seems to consume less memory than JBC; more importantly, ISPN clearly reduces the contention compared to JBC. With JBC, you can face contention issues especially when you use any eviction algorithm other than expiration, since any read access to a JBC Node will add an eviction event to the LinkedBlockingQueue instance of the whole region. In ISPN, they had the brilliant idea to implement their own version of ConcurrentHashMap, which they call BoundedConcurrentHashMap, to manage the eviction within each segment. This means that we now have one LinkedBlockingQueue instance per segment, so you can reduce the contention generated by the eviction algorithm by simply increasing the concurrency level.

Another significant improvement ISPN offers is the remove method. In our internal tests we realized that in some use cases, it could be over 800 times faster to remove a cache entry in ISPN compared to JBC. This is mainly due to the notion of Node trees in JBC that is not found in ISPN. Actually, when you remove a node in JBC, it needs to remove all its descendants – which consumes a lot of time and CPU when you have a lot of children nodes.

Next we will try to improve our ISPN integration, to fully benefit on the distributed cache capabilities offered by ISPN. In real-life scenarios, it is difficult to ask a customer to deploy their application on hundreds of instances of a given application server, since the required licenses and support would be cost-prohibitive (not to mention a nightmare for the administrator). On the other hand, it sounds more acceptable if the customer only needs to deploy their application on 3-8 app server instances; these would be used as frontal servers, while hundreds of ISPN cache instances could be deployed in standalone mode to act as the cache server. This would allow ISPN to be used as a cache server, although in our context this is not possible out of the box (due to a lack of JTA support when ISPN is used as cache server – more details here).

Java Security

As you may know, our new eXo Cloud IDE is a free developer service for Java Platform as a Service (PaaS). This ability to easily create and deploy REST components on the fly is very interesting in terms of productivity. However, it needs to be over-protected to ensure that no malicious users affect the integrity of your environment. So we made the entire eXo JCR stack rely on Java Security, meaning that when the SecurityManager is installed, access to sensitive methods is impossible unless the full call stack has enough rights.

Apache Tika

eXo JCR already has a plugin-based framework that enables the extraction of both the meta-data and the full text content of the most common document types, such as Text, XML, HTML, PDF, MS Office and Open Office documents. But we wanted to support many more types of documents, so we decided to implement a plugin for Tika. This is actually an open door to many new document types, including images, audio and video.

Other Interesting New Features…

  • If you dedicate a listener for a specific event broadcast by the ListenerService, you can elect to receive the event asynchronously by adding the annotation @Asynchronous (from the package org.exoplatform.services.listener) to the class declaration level of your listener.
  • eXo JCR can be deployed on Jetty.
  • H2 DB is now supported.

Improvements

JCR Re-Indexing

With full text search engines such as Lucene, it is helpful to rebuild them regularly to preserve consistency, get rid of potentially corrupted indexes, and ensure optimal performance. We decided to speed up the re-indexing mechanism by making it multi-threaded, and by relying more on features specific to RDBMS, such as SQL paging. The results are quite interesting: according to the total amount of core and the db type used, the indexing of millions of JCR nodes could be 4 to 6 times faster.

Lucene Indexing in Clustered Environments

In the previous version of eXo JCR, we stored the Lucene indexes in a shared file system, so it was possible to add a node to the cluster dynamically (meaning the new node could access the Lucene indexes directly, so they could be started and made available quickly). The problem with this approach was that the performances in read and write accesses were affected, and that using a shared file system could have side effects. In addition, only the main cluster node (a.k.a. coordinator in JGroups terminology) could see the latest changes. This is because, for performance reasons, they are only persisted after a certain amount of time, while the rest of the cluster could only see the persisted changes.

To improve this, we took a new approach. Each node can see all changes in near-real time, and has its own version of Lucene indexes. This improves performance and means we no longer rely on a shared file system. This change is possible because we were able to improve the index recovery. Now, when a new node is launched that doesn’t have its own version of Lucene Indexes, you can either decide to rebuild them from a configuration (if the DB is not too big, knowing the re-indexing has been improved too) or get it from the coordinator. The latter method allows you to get a new node up and running in a reasonable amount of time, and fully benefit from having the Lucene indexes locally.

The next step will be to implement a non-blocking index recovery in order to have the new cluster node ready to use even faster.

Backup/Restore

The backup/restore feature has been completely reviewed to better fulfill the requirement of an enterprise; it is now faster, more reliable and much easier to use.

Other Interesting Improvements

  • An application with a lot of workspaces requires a lot of JBC instances (3 per workspace: JCR Cache, JCR Indexing and JCR Lock). To reduce the total amount of JBC instances, you can configure your JCR to make your cache instances shareable – meaning you only need 3 JBC instances, and they can be used by all your workspaces. With this configuration, your JCR will create a dedicated JBC region per workspace instead of launching a new JBC instance.
  • The way missing values are cached is optimized for applications that require frequent testing of the existence of specific nodes or properties. If the searched-for node or property does not exist, the information indicating that the data is missing in the DB is stored in the cache, instead of accessing the database at each call. Because future re-tests will find this information in the cache instead of having to query the DB, your application will be faster and more scalable.
  • All cluster nodes can now be launched in parallel, even when the JCR has never been initialized. This was a limitation in the previous version, since the JCR had to be initialized first.

Download

You can download eXo JCR 1.14.0-CR1 from here and get the documentation from jboss.org here.

You can test it with jetty or tomcat; for both be sure to read the file exo-readme.txt to know how to test it with the default configuration, JBoss Cache or Infinispan. In a nutshell, you simply need to launch it from eXo batches with a new parameter: jbc for JBoss Cache and ispn for Infinispan.

The best ways to quickly test it are:

  • The WebDav access available here
  • The FTP access available from port 2121

For both, use the account root with the password exo.

Enjoy,
Nicolas

Understanding eXo Versioning Scheme

Wednesday, January 19th, 2011

Each software package that eXo releases is flagged with a release number. This identifier follows a nomenclature elaborated to match our software release process. This post will help you to decipher these quite obscure numbers and hopefully better understand how we release our software.

This numbering system applies to our enterprise product offering, eXo Platform (as well as our previous offering, called eXo All-In-One). It also applies to our community project packages, eXo WCM, eXo Collaboration, eXo Knowledge and eXo Social, and even to our lower level software libraries.

Release numbers are composed of several version digits and an optional qualifier, following this pattern X.Y.Z[.P][-Q].

Let’s start with a full (fictive) example:

The major version digit represents the main generation of the software. We increment this version number for each major change in the product architecture.

The minor version digit is incremented when we augment the software with a new set of new features.

The maintenance version digit is incremented when we want to release batches of bugfixes and improvements. The first maintenance version number is always 0.

The patch version digit is optional and hopefully rarely seen. We issue a patch release when an annoying issue, such as a security one, can’t wait for the next release.

Finally, a qualifier may be appended to mark a special brew of the release, usually depicting a quality-level:

  • Alpha: alpha versions are made to mark milestones. Not all alpha versions are released publicly and they have usually very little QA. They are often developer releases. An alpha version is issued before the actual release, meaning that 1.0.0-Alpha01 will be a preview of a future 1.0.0-GA version.
  • Beta: beta versions are considered feature-complete, and have passed a minimal level of QA tests. Several betas may be issued as feedback is received from the developer community, and as the QA program progresses.
  • CR: CR stands for Candidate Release. As the name says, these versions are candidates for an upcoming release. A CR may have some outstanding known bugs, but nothing bad enough to block the release. Several CRs may be released until we are satisfied with the quality of the release.
  • GA: GA stands for General Availability. This qualifier is used to mark the software as ready for production. Usually, the first minor version is explicitly marked as GA (e.g 2.1.0-GA) but the qualifier is omitted for subsequent maintenance releases (maintenance releases are production-ready by nature).
  • CP: CP stands for Custom Patch. This is used for special versions that diverge from the usual release. Occasionally we are required to provide a release specifically for a certain use case scenario. For example, eXo WCM 2.0.1 needed a JCR 1.12.2-CP01 in order to be deployed specifically on JBoss Enterprise Portal Platform (JBoss EPP).

The list of qualifiers is not restricted to the above. Under special circumstances, we may use others. For example, since eXo products have a different lifecycle than the GateIn community project, we have our own maintenance branch where we forge bugfixes for our customers before contributing them back to the gatein trunk. For versions coming out of this eXo branch we will use -PLF qualifier.

Which version should you use?

At eXo, we don’t typically promote alpha releases outside of the company. They are technical milestones that are meaningful to our developers. For those eXo fans looking to satisfy their curiosity, we do make alpha releases available through our software factory.

With beta releases, we will sometimes promote them outside eXo — usually when innovative new features are introduced. Developers are encouraged to look at our betas and provide feedback. However, beta releases should never be put into production — they are unstable by nature and we cannot ensure they will not break your system. In addition, betas are not covered by our subscription support. Using a beta can be fine to build a demo, but not much more. We also recommend not starting a project on a beta version, with the expectation that eXo will release a GA by the time of your production target.

Use exclusively GAs and maintenance versions in production. Always upgrade to the latest maintenance version shortly after it is made available to you.

Finally, use CPs only if eXo advises it to you specifically. The CP versions are made on a case by case basis, generally if your production imperatives depend on it.

GateIn 3.0 Released

Tuesday, March 16th, 2010

GateIn 3.0 released - Try it now!

After months of collaboration between the eXo and JBoss Portal development communities, GateIn 3.0 is GA.  Download it or get more info about the project here.  Also, be sure to check out the official introduction to the project in the Red Hat & eXo webinar Thursday.

Congratulations to the entire team for all their hard work!

eXo Webinar on Febrary 24th – Extending Your Content-Based Applications with xCMIS

Monday, February 15th, 2010

Join eXo Platform for a free one-hour webinar on 24 February, 2010, when we will provide a quick overview of the CMIS spec, an intro to the features of xCMIS, and a step-by-step tutorial for creating gadgets that can make your newly-unlocked content even more useful.

The CMIS specification promises great benefits for application developers – your content applications no longer have to be tied to their respective content repositories. When building new applications, you can now access content in multiple repositories, without concern for the development platform and language dependencies of these separate content systems. eXo Platform is adding to these interoperability benefits with xCMIS, the new CMIS implementation from eXo Platform.

Go to the complete webinar overview and Register now!

JBoss World 2009, the best of eXo & JBoss Portals in one common project

Monday, August 31st, 2009

JBW_Blog

From August 31st to September 2nd, eXo will attend the annual JBoss World as a new partner of JBoss. The JBoss World event is the perfect place to share about new technologies, best practices and industry trends with experts. It also will be a nice occasion for us to meet companies that need new and innovative solutions and to show our ability to develop custom solutions for specific needs.

After three months in collaboration with JBoss, it is time for eXo to unveil the next generation of portal as well. eXo and JBoss teams joined their efforts and worked hard to present a portal gathering the best of two successful open source solutions: eXo and JBoss Portals. This new portal will set a new standard of quality in the industry and will offer new capabilities to customers. During the JBoss World, eXo will preview this new Open Source portal as well as how eXo complete stack will run on top of it.

To see this preview, to meet us and share about your expectations, your industry insights, or to talk about our solutions and the industry in general, come and meet us at booth 223. More than building knowledge, you will also spend a nice time ;)