Querying Complex Schemas in Nuxeo With NXQL
From the start, as we think it's important for a real content management platform, Nuxeo has had the ability to send requests to the document repository using a SQL-like language that we call NXQL. This allows you to do things like:
SELECT * FROM Document WHERE dc:title = 'Some Report'
or:
SELECT * FROM Document WHERE dc:modified > DATE '2011-08-01'
or more complex:
SELECT * FROM Note WHERE dc:modified > TIMESTAMP '2011-08-01 12:43:38' AND ecm:fulltext = 'merger OR ipo' AND dc:lastContribtor IN ('bob', 'john') AND (m:priority BETWEEN 1 AND 5 OR m:level > 1000)
Of course you can mix all standard operators, add parentheses, OR, etc. More details about NXQL are available at http://doc.nuxeo.com/x/uItH.
But one limitation of NXQL used to be that, although Nuxeo can store and retrieve "deep" complex properties in its documents, there was no immediate way to use them in queries written in … Read more
Apache Chemistry Goes TLP
Just a few days ago Apache Chemistry became a top-level project (TLP) of the Apache Software Foundation (ASF). As a reminder, Chemistry provides client libraries implementing the CMIS spec in Java, Python, PHP and .NET, and a server-oriented library for Java. Learn more about this on the Chemistry page.
Before becoming a TLP, Chemistry was just an incubating project, guided in its growth by the Incubator, like all Apache projects when they begin life in the ASF. So what does the move to a TLP signify? Briefly:
- the project's scope is now clearly established,
- the community around it has been deemed large enough to sustain the project,
- a Project Management Committee (PMC) has been formed to make internal decisions,
- the PMC and other committers have become acquainted with the Apache Way of doing things,
- successful releases of the software have been done.
Now that Chemistry is a TLP, it means a … Read more
Nuxeo and Java EE
A question we often get is "Is Nuxeo Java EE compliant? Does it run in my preferred application server?".
Nuxeo has actually very little adherence to the Java EE spec. We use technologies like JPA, JSF or Servlets that are included in Java EE 6, but they predate it, so most containers already include them, and if not they can be used as simple libraries that are wildly available. We don't require EJBs, and we don't require JMS (although they can be used).
The only things we need really from Java EE that are usually not available outside of it are JTA (transaction management) and JCA (connector architecture with pooling and transactional support). And because we want Nuxeo to be able to run in non-Java EE containers, we have developed an optional module (called nuxeo-runtime-jtajca) providing the JTA and JCA infrastructure when needed. This module is based on code from the Apache Geronimo project.
The result is … Read more
Why Nuxeo Dropped JCR
There have been questions about JCR vs CMIS recently (Is JCR Dead?), and I thought I'd expand a bit on why we at Nuxeo decided to drop support for JCR.
Nuxeo used JCR in the past with great success; we've been on the JSR-170 and JSR-283 Expert Group and it is a very nice spec. Several versions of our Nuxeo EP framework used Jackrabbit as a content store.
However for some time we've decided to not rely on it solely, and for more than two years, since Nuxeo 5.1.6, we've had an alternative storage engine, the Nuxeo Visible Content Store (VCS) (http://doc.nuxeo.com/display/NXDOC/VCS+Architecture). Since Nuxeo 5.4 VCS is the only content store, and it's optimized for all the things we require of it.
The reason why we wanted an alternative storage, and why we now rely exclusively on it instead of maintaining costly compatibility with a second storage … Read more
CMIS and Chemistry at ApacheCon 2010
ApacheCon 2010 starts next week in Atlanta, and if you want to know more about the CMIS standard from OASIS, Apache Chemistry, and OpenCMIS then you should come! On Wednesday, Nov 3 (at 2pm) I'll be presenting a talk on these topics. Here's the abstract:
Get your content under control with CMIS and Apache Chemistry
The CMIS standard provides an answer to most issues met by typical content-centric applications by offering a common model and a set of services for ECM interoperability. In this session we'll first provide an introduction to the CMIS services and bindings, then we'll offer a view of the landscape of the different ECM providers and clients implementing CMIS, and we'll finish with practical examples of the uses of OpenCMIS, the Apache Chemistry (Java) library, designed to help you easily write CMIS applications.
I hope to meet you there!… Read more
Apache Chemistry meeting wrap up
Last week a meeting took place in Munich between the main developers behind the two Java Chemistry projects (Chemistry and OpenCMIS). I can say that the meeting was a success and that the two codebases are now in the process of actively being merged!
People from Open Text (our host for this week), SAP, Alfresco and Nuxeo were present. There were lively discussions about many technical points, but following the Apache rules of conduct for such meetings all points were summarized each day to the mailing-list for larger visibility and input by the whole community (see the archives here). The remaining work to do for this merge will be logged in the Apache JIRA issue tracker, again to provide visibility.
Once the current code base is stabilized, which we hope will take no more than one or two weeks, we want to make a first 0.1-incubating release, in … Read more
Nuxeo CMIS Update
Thanks to lots of progress in Apache Chemistry, to which Nuxeo is contributing, and through updated Nuxeo Chemistry bindings, the support for CMIS in Nuxeo is getting quite good.
For more practical info on using CMIS in Nuxeo, including download links, see http://doc.nuxeo.org/xwiki/bin/view/Main/CMIS.
Note that our demo server at http://cmis.demo.nuxeo.org/ has been updated as well.
Below are most of the new features available since the last release.
Better search
Fulltext search with CONTAINS() has been implemented so that you can do queries like:
SELECT cmis:name FROM cmis:document WHERE CONTAINS(‘foobar’)
(The full scope of the fulltext search syntax, with ORing of words and negation, is not there yet.)
You can now also use the IN_TREE() and IN_FOLDER() predicates.
The SQL keywords are now case-insensitive as the spec requires, and complex boolean functions have been fixed.
More CRUD
A number of fundamental features form the CMIS domain model are now complete: object … Read more
Advanced CMIS
The upcoming CMIS standard is approaching its final 1.0 version, and I thought I would take the time to present some of its most advanced features.
Basics
I will not detail here the basics of the CMIS domain model, but I will mention quickly for completeness:
- CMIS stores folders, documents and relationship (collectively called objects),
- each object has a unique id,
- objects have "object types" detailing the properties they're allowed to have,
- properties have the usual basic "property types" (strings, numbers, dates, lists, etc.),
- you can create, retrieve, update and delete objects (CRUD),
- documents may have an associated content stream (an attachment),
- you can search documents using a SQL-based language,
- clients talk to CMIS servers using AtomPub or SOAP.
Below I will detail the more advanced features of CMIS.
Unfiling, Multi-filing
While most people are used to storing documents inside a navigation tree, where the intermediate tree nodes are folders, there … Read more
CMIS Meeting, Day Two
(The first part of this series described the first day of the meeting.)
On the second day of the CMIS face-to-face meeting we again spent some quality time reading the spec nearly line by line, making sure everything is coherent, and discussing a few important points that people felt were important for their use cases.
Below I’ll outline some important changes made to the spec on the first and second day of this meeting. There’s more of course, you may want to follow everything in the CMIS JIRA.
The XML and XHTML property types are gone. No vendor was in support of them, and it was actually quite hard to standardize on exactly what kind of XML would be stored in such a property (well-formed? fragment? etc.). We kept the HTML property type, as many repositories still want to distinguish between “basic text” and “rich text”, especially for … Read more
CMIS Meeting, Day One
Yesterday was the first day of the CMIS Technical Committee face-to-face meeting. This time we’re grateful to Oracle for hosting us in their offices in Boulder, Colorado.
Here are a few highlights of what transpired during this first day.
First, CMIS is really taking hold inside the big companies in this TC. Most of them plan to make available, privately to other TC members, some test versions of the CMIS servers they are working on, to ensure interoperability as early as possible. Of course these face-to-face meetings are also designed as “plugfests”, where we set up test servers and let other’s clients connect to them, but it’s important to have it continue beyond these three days of meetings. It’s unfortunate that these servers can’t be public, but it’s a fact of life inside big companies that you can’t publicly speak about or show what you’re working on.
Of course in … Read more