paulcwarren: image


One of my readers left a comment saying that my previous post left him high and dry when it came to creating the client project for testing his service.

So I put this very quick post together to describe it for him and hopefully for others too.

First this to note here is that there are lots of ways to create a DFS Client spanning both Java or .Net.  This is just one way using Documentum Composer.

So where did the previous post end up.  Well we had created a Documentum Project and within that created a DFS service, exported it as a service archive and deployed it onto a suitable application server. 

So what next?

Create yourself another Documentum Project (File->New->Other->Documentum Project).

Next create yourself a lib folder and in it import (Import->File System) your services remote jar.  This will have been exported at the same time as your service archive.  If you called your service archive samples for example then you would look for samples-remote.jar.

Once imported add it to your java build path (<project>->Properties->Java Build Path->Libraries->Add JARs…  Navigate to your remote jar within your client project and select it.  You should end up with the equivalent of this:-

image

You also want to make sure you have the right DFS client class path configured.  So whilst you are on this dialog.  Select the “DFS Services Library” build path entry and click Edit…  Select an appropriate library type for your scenario.  I’ve chosen “DFS Remote Client Library with UCF”:-

image

Click Finish.

Finally you need to write some code to call your service.  There are lots of contexts that your code could execute within; a Main class, a java application, an eclipse application, lots of others too.  I’m a big fan of test-driven development so I like to create Junit tests as these can be automated later and become part of the applications test suite.   Let’s create one of these (File->New->Other->Java->Junit->Junit Test Case):-

image

Give your Junit test a Package and a Name and make sure you’ve chosen to create a constructor stub.  Don’t worry about the super class warning – just click Finish and you should see this dialog:-

image

Obviously we do want to add Junit 3 library to the project’s class path so choose to perform that action.  Click Ok. 

Composer should do that for you and open your newly created Junit test case in the java editor.  We now need to add our service orchestration code.   Add a method called test with the following signature shown:-

image

And then add your orchestration code to that method.  If your not sure how to get started with this then a great place to start here is the client code that ships with the DFS SDK.  Cut and paste in a sample remote client and re-purpose it for your needs by changing the service related calls to use your service.  I’m actually using the DFS Hello World sample for this article.  As you are adding code, especially if you cut and paste a sample, you’ll end up with a bunch of problem markers:-

image

Because we already configured the project with a DFS class path you can hover over the problem marker in the sidebar and use the quick fix to add the necessary DFS imports.

A good tip here is to note that the moduleName and contextRoot (in the code sample above) must match the equivalent settings that you configured for your services project and that are also specified in the Export Service Archive dialog:-

image

That is pretty much it.  Make sure your services are deployed and that the server is running and the wsdl for each service is available.

To run the Junit test right-click on it in the project explorer and select Run As->Junit Test.  This will execute your test case using the Junit test framework and display the results.

If you want to debug the code then set a break point in the code and select Debug As->Junit Test instead.

Alternative

Now it is important to note that DFS supports two modes of invocation; remote – as we outlined above.  But it also supports local invocation too. 

This provides us with an alternative way to test our service code with less fixture than the remote alternative; i.e. without having to deploy it to a server.  

First we also need to add some of the services’ resources to the services project’s class path so that the DFS runtime can find them.  The Ear is configured in such a way that these same resources are available on the class path when the Ear is deployed on an app server.  We are just mimicking this configuration. 

So right-click on your services project and select Properties ->Java Build Path->Libraries.  Click Add Class Folder.  Navigate down your services project.  Expand the Web Services folder and the bin folder.  And check the gen-rsc folder.  Click Ok.   You should see this folder added t0 the build path:-

image

That’s the services project configured.

Now create another Documentum client project.

This time round make sure you add your service project to the Java Build Path (<client project>/Properties->Java Build Path->Projects):-

image

As before edit the type of DFS Library Path but select “DFS Local Library”.

There is no need to add the remote jar as we will pick up the service classes directly from the project.

As before add the Junit Test Case.  If you get any compilation errors then quick fix them.  Note, that when you add your services code you must call getLocalService instead of getRemoteService AND you don’t need to register the service context with the ContextFactory ahead of time.  So your service invocation code simply becomes:-

ContextFactory contextFactory = ContextFactory.getInstance();
IServiceContext context = contextFactory.newContext();

ServiceFactory serviceFactory = new ServiceFactory();  
IHelloWorldService service = serviceFactory.getLocalService(
               IHelloWorldService.class, context);

And that’s it.  You are ready to go.  Right-click on the Junit class in the project explorer and select Run As (or Debug As)->Junit Test.

Conclusions

So we’ve walked through creating a remote DFS Consumer and looked at an alternative for creating a local DFS consumers that leverages DFS’s local invocation facility.

As always I await your feedback.  In the meantime…

Happy Composing!

Posted at July 03, 2009 04:51 PM by Paul Warren with tags Documentum Foundation Services, composer, dfs, documentum, documentum composer, emc

Jonas Yuan: Full Integration of Liferay 5.3, Alfresco 3.1 E, LDAP, SSO, and OpenX 2.6

The upgrade of the solution - Full Integration of Liferay 5.3, Alfresco 3.1 E, LDAP, SSO, and OpenX 2.6 – is ready.

liferay-5.3-alfresco-3.1-sso-ldap

What are the new features?

The new features include Liferay 5.3 (at revision 33596), Alfresco 3.1 E and OpenX.

  • It integrates FCKEditor 2.6.4 – in detail, you may refer to the book: Liferay portal 5.2 Systems Development.
  • It makes content-rich flashes (e.g., SWF, Video, Game, Slideshow, Video Queue, Video List, Play-list) available for Journal Articles (web content); 
  • The alfresco portlets include Alfresco Client, My Spaces, Document List, My Tasks, My Web Files, and My Web Forms.
  • The ads portlets include ad viewer and manage ads.

Where should I find real demo?

General information
http://liferay.cignex.com/

Alfresco 3.1 E, LDAP ADS and SSO CAS
http://liferay.cignex.com:8090/alfresco

Liferay Portal (5.3 with FCKEditor 2.6.4), Alfresco Portlet (3.1 E), LDAP ADS and SSO CAS
http://liferay.cignex.com:8080/c/portal/login

How can I use these features in my own servers?

Alfresco, LDAP and SSO CAS full integration.

1. First please download an example Alfresco 3.1, LDAP (ADS) and SSO CAS.
Download (save link as ...)
alfresco.war
2. Then create database (this is configurable) MySQL
create database alfresco31;
grant all on alfresco.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;
grant all on alfresco.* to 'alfresco'@'localhost.localdomain' identified by 'alfresco' with grant option;

Deploy war in your AS: tomcat/webapp

Note that, you may need to set "dir.root" as "dir.root=/opt/sso/alfresco31e/alf_data" in custom-repository.

3. Start your AS
Go to http://localhost:8080/alfresco

4. In CAS login page, login
possible users in LDAP server (docs.cignex.com) (configurable)
jonas/jonas
jane/jane
...
After login in CAS, you should be in Alfresco MyAlfresco page with your login name. No need re-login in Alfresco.

A solution of SSO plus LDAP for Liferay Portal 5.3 and Alfresco Portlet 3.1 E with full RESTFul Integration

1. First please download an example Liferay Portal 5.3, Alfresco Portlet 3.1 E, LDAP (ADS) and SSO CAS.

liferay-5.3-tomcat-6.0.20.zip

Download from (save link as ...)

http://liferay.cignex.com

unzip it in your local machine.

2. Then create database (this is configurable) MySQL

for Liferay Portal 5.3
create database lportal;
grant all on liferay53.* to 'liferay'@'localhost' identified by 'liferay' with grant option;
grant all on liferay53.* to 'liferay'@'localhost.localdomain' identified by 'liferay' with grant option;

for Alfresco Portlet
create database alfresco31;
grant all on alfresco31.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;
grant all on alfresco31.* to 'alfresco'@'localhost.localdomain' identified by 'alfresco' with grant option;

3. Start your AS from unzipped file
tomcat/bin/startup.bat or sh startup.sh

Note that, you may need to reset "dir.root" as "dir.root=/opt/sso/liferay53/alf_data" in custom-repository.

Go to http://localhost:8080/c/portal/login

press sign in

You may need to configure LDAP:
ldap://docs.cignex.com:10389
ou=users,ou=system
uid=admin,ou=system

and configure SSO
https://docs.cignex.com/cas-web/login
https://docs.cignex.com/cas-web/logout
https://docs.cignex.com/cas-web/proxyValidate

Note that:

you need to set "How do users authenticate?" "by Screen Name" under "Authentication->general";
you need to set "Authentication Search Filter" "(cn=@screen_name@)" under "Authentication->LDAP";

4. In CAS login page (https://docs.cignex.com/cas-web), login

possible users in LDAP server (docs.cignex.com) (configurable)
jonas/jonas
jane/jane

...

After login in CAS, you should be in Liferay Portal with your login name. No need relogin in Liferay Portal.

Add Alfresco Ext Client. You should be in Alfresco Portlet with your login name. No need relogin in Alfresco Portlet.

 

A solution for OpenX (2.6.3) and Liferay (5.3.0 or above) full RESTful integration

Login as
jonas/jonas
 
1) Examples:

View: http://docs.cignex.com/ad_services/services?action=download&uid=5

Search: http://docs.cignex.com/ad_services/services?action=search

Report: http://docs.cignex.com/ad_services/services?action=report

2) Usage of ad-portlet plugin

You can also download the WAR (ad-portlet plugin with source code) at

http://liferay.cignex.com/ad_server/ad-portlet-5.3.0.1.war

In database (e.g., MySQL), you need to create a database 'bookpub'.

create database bookpub;
grant all on bookpub.* to
'lportal'@'localhost' identified by 'lportal' with grant option;
grant all on bookpub.* to
'lportal'@'localhost.localdomain' identified by 'lportal' with grant option;

3) Customization
You can use source code to customize the user experience. At the same time, you can configure database name and user as well.

Note that, Manage Ads (using jQuery) has a bug in IE. The JavaScript for adding an Ad does not work well in IE. But it is working fine in FireFox. 

 

Good luck!

Posted at July 03, 2009 02:49 PM by Liferay Blogs

Ronald Sarayudej: People Who Use Liferay: The Edmonton Capitals

The Edmonton Capitals

Region: Canada

The Edmonton Capitals are a professional baseball team based in Edmonton, Alberta. Known originally as the Edmonton Cracker-Cats, they began play in the Northern League in 2005 before switching to the Golden Baseball League in 2008.

 

Posted at July 02, 2009 05:50 PM by Liferay Blogs

Ronald Sarayudej: People Who Use Liferay: NCS

NCS

Region: Singapore

NCS is a leading vendor-independent IT and communications engineering solutions provider with some 7,000 staff in the Asia Pacific and Middle East regions. They offer the region’s largest pool of Certified IT Project Managers (CITPM) to offer quality services to our clients, and is ranked first in Professional Services in Singapore (2007) by Gartner Dataquest.

 

Posted at July 01, 2009 04:46 PM by Liferay Blogs

seth: Code moves forward. Content moves backward.

One of the primary functions of a web content management system is separating content from layout. Authors create semi-structured content in a display-neutral format and then the presentation templates transform that content to web pages for regular browsers, mobile browsers, RSS feeds, email, and print. As most readers of this blog know, this [...] Related posts:
  1. Finally, Drupal Gets Deployment Greg Dunla
  2. Great presentation on content modeling Deane Bark
  3. Book Review: Django 1.0 Template Development I just fin
Related posts brought to you by Yet Another Related Posts Plugin.

Posted at July 01, 2009 11:54 AM by Seth Gottlieb with tags architecture, selection

Freddy Mallet: Reviewing code quality of Apache Sling using Sonar

This is a cross-post of Freddy's analysis at the Sonar site. We use Sonar internally at Day to track and improve the quality of all our software. Also check out Nemo which is Sonar's platform for analysing various other FOSS projects.


A few weeks ago Michael Marth, who runs dev.day.com (Day’s developer portal), asked us if we could put together our impressions on the code quality of Apache Sling using Sonar. We thought it would be valuable to share the result of this exercise with the community.

Apache Sling in a few words

“Apache Sling is an innovative web framework that is intended to bring back the fun to web development. It uses all those nice cool and new technologies that make up a state-of-the-art framework. This is Apache Sling in five bullets:

  • REST based web framework

  • Content-driven, using a JCR content repository

  • Powered by OSGi

  • Scripting inside, multiple languages

  • Apache Open Source project

Some size indications of the project
  • 40 Maven modules

  • 70,707 lines of code

  • 731 Java classes

  • and 23,043 lines of Javadoc

The strengths in terms of quality
  • A project that you get and compile with no difficulty by running two commands:
    1. svn checkout https://svn.apache.org/repos/asf/sling/trunk/
    2. mvn clean install
    This sounds like an evidence but is not always the case :-)

  • Amongst 130,172 physical lines, only 0.9% are involved in a duplication

  • 46.4% of public API are commented with a Javadoc block

The weaknesses
  • Only 9% of the source code is covered by 338 unit tests

  • Average cyclomatic complexity by method (excluding getters and setters) is greater than 3 (3.2).
    That is kind of a warning saying “your methods are taking too much responsibilities and should be re-factored”. This warning is confirmed by others metrics : 394 methods have a complexity greater than 7 and 86 methods have more than 50 statements. What is true at method level gets also partially confirmed at class level as 60 classes have a Fan Out Complexity greater than 20 (The number of other classes referenced by a class)

Bad programming practices that should be improved
  • 198 times, method parameters are reassigned in the core of the method

  • 68 times, local variables are defined and hide class fields

  • 28 times, NullPointerException are thrown when an IllegalParameterException would be more suitable

Potential bugs that should be quickly analyzed
  • Correctness - An apparent infinite recursive loop : there is an apparent infinite recursive loop in org.apache.sling.scripting.jsp.jasper.runtime. JspContextWrapper.include(String, boolean)

  • Multithreaded correctness - Unsynchronized get method, synchronized set method : org.apache.sling.scripting.jsp.jasper.compiler. JspRuntimeContext.getJspReloadCount() is unsynchronized, org.apache.sling.scripting.jsp.jasper.compiler. JspRuntimeContext.setJspReloadCount(int) is synchronized

  • Multithreaded correctness - Method calls Thread.sleep() with a lock held : org.apache.sling.event.impl. JobEventHandler.runJobQueue(String, JobBlockingQueue) calls Thread.sleep() with a lock held

  • Malicious code vulnerability - Field is a mutable array : org.apache.sling.jcr.webdav.impl.servlets. SlingWebDavServlet.COLLECTION_TYPES_DEFAULT is a mutable array

This analysis was done with the intention of giving a synthetic overview of the current state of the project. Where should you start from if tomorrow you wake up with a single idea in mind : “Improving quality of the Apache Sling project !” ?

  • With respectively a cyclomatic complexity of 428, 385 and 343, classes Generator, Parser and XMLEndoginDetector should be first refactored. With no surprise, the Generator.java file has the greatest number of duplicated lines (154) and rules violations (109)

  • With its 43 cyclomatic complexity and no unit tests, the method ModifyAceServlet.handleOperation(..) is what we call “a crappy method” :-)

More information on the code quality of the project is available on Nemo.

Posted at July 01, 2009 12:00 AM by dev.day.com with tags sling, quality

Chrigel: Playing a website with JFugue

Ok, had to do this:



import org.jfugue.*

def munge(s) {
// (s.findAll { it ==~ /[A-Ga-g]/ } as Set).join(' ')
s.findAll { it ==~ /[A-Ga-g]/ }.join(' ')
}

String.metaClass.play = { new Player().play(new Pattern(munge(delegate.toString()))) }

"http://www.google.com".toURL().getText().play()



All credits go to transentia

Posted at June 30, 2009 08:08 PM by Christian Sprecher with tags silly, groovy, jfugue

Cecilia Lam: Liferay Seminar: Making Open Source Work For You in These Tough Economic Times

CIGNEX and APAR would like to invite you for a seminar on July 16, 2009, to get a better understanding of how Open Source tools like Liferay and Intalio can help you save costs while delivering outstanding performance in terms of scalability, flexibility and security. These tools can be used to migrate away from proprietary solutions like BEA Web Logic, IBM Portal, Oracle Portal, Microsoft Share Point, TIBCO and Oracle BPM helping you reduce Total Cost of Ownership by up to 95%. Learn how you can integrate Liferay with Intalio to give you a comprehensive alternative to a proprietary offering.

Location: Hilton Singapore, 581 Orchard Road, Singapore 238883

Register today.

Posted at June 30, 2009 06:00 PM by Liferay Blogs

Ronald Sarayudej: People Who Use Liferay: zaplive.tv

zaplive.tv

Region: Germany

zaplive.tv is a live streaming platform for your own WebTV-Channel. Offering an innovative streaming solution they provide a community for live-broadcasting for every registerd user. Just connect a camcorder to the computer and start the zaplive.tv-Studio. In just 3 minutes you´re ready to broadcast information, products or events into the internet.

 

Posted at June 30, 2009 05:38 PM by Liferay Blogs

seth: PDF or HTML?

Alex Manchester, from Step Two Designs has a very useful article on when to publish Intranet content in PDF format rather than HTML. I agree with Alex’s point that PDF is suboptimal for most content because of several limitations (most of them around the additional overhead in editing and reading the document) but still [...] Related posts:
  1. Wikis Not Word! Gaining adoption through psychological warfare Your compa
Related posts brought to you by Yet Another Related Posts Plugin.

Posted at June 30, 2009 11:04 AM by Seth Gottlieb with tags intranet

paulcwarren: paulcwarren


 

The Past

Using DAB the mode de jour was to develop against a Docbase; live, connected, whatever you want to call it.  You nominated a "System of Record" Docbase.  You then went about the business of defining all the artifacts; types, lifecycles, workflows, relations and so on and so forth, that collectively made up your Docapp (a DOCbase APPlication).

Your application(s) code would never execute against these particular artifacts, in this particular Docbase; because they really were just the definitions of resources that your application requires to be present in a production Docbase in order to run correctly. Meanwhile, the rest of your application artifacts; java classes, servlets & jsps, XML, etc, were all managed out of a source control system.

To prepare a content-rich application for distribution. Release engineering (releng) would checkout all the application artifacts, build and package them as an installer or as a war or an ear.  They would then also export the associated Docapp as a Docapp Archive and place with the application package.  These resources were then placed on a download site where customers could find them.

To install the application the customer would use the installer or deploy the war or ear. He would then use DAI to install the docapp archive into one or more production Docbases.

So, that is how it was.  The System of Record for your source artifacts was the Docbase itself.  But what was so wrong with that I hear some of your ask?  Well a few things as it happens:-

1. Having different Systems of Record is just plain wrong, and what made us so special anyway?
2. Versioning semantics for Docbase artifacts is not always the same as they are for source control, complicating development, histories, labelling and snapshoting
3. Releng needed to have and to know Docbases and to construct Docbases processes (not all of which were that automatable) which was hugely burdensome for them

With reference to the versioning semantics.  It is important for us all to recognize that the Docbase is just plain bad at development versioning.  For example, types in a Docbase cannot be versioned but code certainly depends on particular versions of types.  Now if we could have reliably versioned artifacts then we can support explicit versioned dependencies, even when the target environment does not support it. Explicit versioned dependencies allow us to bind code to specific versions of Docbase resources and have those dependencies validated.  The upsides of reliable versioning are hopefully evident.

The Present

Recognizing that content management would soon standardize through efforts like CMIS.  Recognizing that this would foster and entire industry of organizations building content-rich applications we knew we would have to address these shortcomings and move more mainstream.

So we built Composer and a system of linked XML-based artifacts and an install process that can transform these XML-based artifacts into Docbase objects, preserving the links by converting them to Docbase links; i.e. OIDs.

No longer is there a need for a "System of Record" Docbase.  Docbase artifacts can now be developed in the same eclipse IDE right alongside all your other application artifacts.  They can also be managed out of the same source control system, giving us reliable version semantics and greatly simplifying the releng process.

The Future

OK so we have ironed out that little wrinkle.  Docbase artifacts are now analogous to other source artifacts and therefore we are all now followers of the same development model.   In this respect we’ve become a bit more standard and hopefully removed a big barrier to entry for release engineering departments.  We believe this will help promote EMC|Documentum as the platform for developing content-rich applications.

So what’s next?

In a word "OSGi".

A phenomenon is sweeping the java community in the form of OSGi, a dynamic module system for Java. Most application servers are OSGi-based already.  And this phenomenon will undoubtedly impact the ECM community too. 

OSGi is mature.  It is over 10 years old and has grown out of embedded systems world.  So this is not new technology by any stretch.  It may just be new to some of us.  It is also standards-based. 

OSGi promotes a world of modules (bundles in their parlance) that can be dynamically inserted (or removed) into any live, running system with no interruptions in the services it provides.  Each bundle has versioned dependencies that the system will honour and enforce these.  And a system can support multiple versions of a module at any one time.

For all these reasons (and many others) I believe that OSGi is the perfect fundamental building block for next generation ECM solutions and solution frameworks.

It is also very important to recognize that in this future world of solutions and solution frameworks we may well also see direct, application hosted, manipulation of our XML systems of record.  As well as continuing to support the more traditional offline development model, both will co-exist quite happily side-by-side.  This direct manipulation will be supported by a family of web-based tooling built on the central core of the Composer tooling platform.

But this is still a little way in the future.  Because OSGi will effect how applications are delivered the most noticeable change you will see in the short-term will be to our friend the dar (Documentum Archive) which I believe is already set to become an OSGi bundle.  This will prepare the way for it to be just like every other piece of the solution.  Developed the same way, delivered the same way.  Depended upon, dependent upon others.  Really binding into the application as the vital constituent part that it really is. 

Conclusions

So what conclusions should you draw from this? 

Well if you are considering developing a content rich application (or larger) on Documentum then you need to be following Composer’s lead and adopting model-driven development.  Making XML models a central tenet of your development practices is the right thing to do.  Leverage Composer, the tooling platform, and in particular its EMF-based modelling and your not going to go too far wrong. 

Also getting more involved in Composer, the tooling platform, by extending it for your purposes by adding your own Docbase artifacts would be an excellent way to introduce yourself to the wonderful world of OSGi.

Happy Composing

Posted at June 30, 2009 09:35 AM by Paul Warren with tags composer, content management, documentum, documentum composer, ecm, emc, osgi, standards

Michael Marth: [LOTD] Content Structure in a CMS

Via Seth Gottlieb I have found this really good presentation on content modelling for content management systems by Deane Barker:

Cleve Gibbon's recent well-written series on content modelling is closely related to Deane's presentation. Make sure to have a look if you are interested in that area.

I really like Deane's presentation, at least when I look at it from the paradigm that proper content management needs a-priori content modelling. Lately, I have come to question this idea, but that shall be the topic of a different post.

Posted at June 30, 2009 12:00 AM by dev.day.com with tags lotd, contentmodels

Ronald Sarayudej: People Who Use Liferay: Eurecna

Eurecna

Region: Italy

Eurecna is an independent private company based in Venice and operating in four continents. Their reputation for excellence, innovation and adaptability is built on twenty years of large and challenging projects implemented in Italy, in Europe and in a range of transition and developing countries. Eurecna’s mission is to implement innovative solutions that generate value for their clients by leveraging the multidisciplinary knowledge of their international network.

 

Posted at June 29, 2009 04:49 PM by Liferay Blogs

Julien Brulland: eXo / JBoss in the news: a summary of the online activities

We have been very excited to see so many people interested in the last announcement about the partnership between eXo and JBoss. We thank you all for your interest and your positive comments regarding the future of eXo Platform and its solutions. Here is the summary of what you could read online:

From the JBoss Newsletter:

“A few weeks ago, Red Hat announced that the JBoss Community Portal project has formed a strategic partnership with eXo, producers of the eXo Portal. eXo will be contributing its portal project to a new joint open source project sponsored by the JBoss Community, and the new combined project will leverage the best elements and technologies from the existing JBoss Portal and eXo Portal projects. “With this unique collaboration, portal technology takes a strong step forward, and will accelerate the adoption of open source portals into the mainstream enterprise marketplace”, said project lead Thomas Heute. You can find out more on this strategic partnership in Thomas’s “JBoss Portal - eXo Portal FAQ” page.”

From JBoss RedHat:

Partnership Analysis and Blogs Reactions:

From Finance Oriented Medias:

Websites which displayed the partnership:

Some nice and funny tweets about the partnership:

chanezon : “http://bit.ly/n9W6F Exo-JBoss Portal, 2 companies, one partnership: congrats @exoplatform, Benjamin & @julienviet.”

essobedo : “Arrival of @aheritier at eXo and Announcement of the partnership with JBoss, it looks like a Christmas day for eXo!!”

eXoPlatform : “JBoss + eXo = Open Source advantage” from Rich Sharples, Director of Product Management for JBoss : http://blog.softwhe …”

dbaeli : “So happy of #exo #jboss partnership, a big step forward. @benjmestrallet @julienviet (and co) you did a great work. Now let’s make it real.”

julienviet : “eXo / JBoss partnership fever reminds me France-Brésil 98!!!!!”

This partnership is the beginning of a great adventure for us and more will come soon, as all our product line will benefit from this major partnership. And why not, it might be the beginning of our american adventure as well !

Posted at June 29, 2009 11:52 AM by exo Platform Blog with tags business, enterprise2, exo, open source, partnership, portal, press

seth: Is this CMS worth the money?

During any CMS selection, it is fairly common to look at software products that span a wide range of prices — everywhere from free to several hundred of thousand dollars in up front licensing. Buyers invariably get confused as they consider vastly different pricing models and try to put those numbers in context of [...] Related posts:
  1. Evaluating open source and closed source software Gartner ha
  2. Is it open source? Does it matter? Uploaded w
  3. Interwoven’s FOSS FUD In a throw
Related posts brought to you by Yet Another Related Posts Plugin.

Posted at June 29, 2009 10:43 AM by Seth Gottlieb with tags open source, selection

Michael Marth: Jazoon 09 slides

The slides shown in my Jazoon talk are now online:

Posted at June 29, 2009 10:16 AM by Michael Marth

Michael Marth: Jazoon 09 Slides

In case you missed the Day talks at Jazoon conference please find the slides below:

Thomas Mueller: Testing Zen
View more documents from day.


Thomas Mueller: Java Persistence Frameworks
View more documents from day.


Michael Marth and Michael Dürig: Scalable Agile Web Development: REST meets JCR meets OSGI
View more presentations from mmarth.


Michael Dürig and Michael Marth: Building RESTful Web Applications with Scala for Sling
View more presentations from day.


Posted at June 29, 2009 12:00 AM by dev.day.com with tags sling, jcr, testing

Cedric Huesler: [ANN] Upcoming Cloud-Computing Events (July 7 and 9)

The introduction of the simplified clustering in CRX 1.4.1 (back in January 2009) kick-started the efforts to make CRX and CQ5 easily deployable into the Amazon cloud computing infrastructure.

A lot happend since then - most importantly - we got in touch with customers that have exactly the challenges we were looking to solve with cloud-based deployments. One of them being the ability to scale infrastructure for peak usage, without the cost of running all servers all the time. Of course, to set a good example, we run our own sites - such as www.day.com - on EC2.

Next week, we would like to give you an update of what we did so far and share the plans for the future.

On July 7th (Tuesday) we have a half day seminar in London. Sarah Burnett from Butler Group and myself will discuss the advantages and use cases to make best use of cloud computing infrastructure. This is a great event to get yourself familiar with the cloud computing topic and learn how you can apply that to your content management initiatives. Join the free seminar in London. Sign-up here.

On July 9th (Thursday) I'm going to broadcast my speech and discussions from London via a Webinar using WebEx. Feel free to sign-up to get the details to join the Webinar.

Personally, I believe the most exciting part of the cloud computing era are the new ways to solve challenges accepting the fact that almost unlimited computing resources are at your disposal (at a fairly decent price).

Posted at June 29, 2009 12:00 AM by dev.day.com with tags announcements, cloud, cq5

Ronald Sarayudej: People Who Use Liferay: Pantech

Pantech

Region: USA

Looking for fun, high-style, convenience, functionality and portability? Find it in a Pantech phone. It goes with you anywhere and everywhere. Pantech. For Life.

 

Posted at June 26, 2009 05:02 PM by Liferay Blogs

michid: michid


Yesterday I gave a presentation at Jazoon 09 about using Scala for scripting RESTful web applications with Apache Sling.

In the session I showed how to take advantage of Scala to create RESTful web applications with Apache Sling. I demonstrated how to uses its DSL capability and support for XML literals to create type safe web site templates. In contrast to conventional web site template mechanisms (e.g. JSP), this does not rely on a pre-processor but rather uses pure Scala code.

There are Session slides and support material available here. The support material contains a fully workable demo application. A Scala scripting bundle for Sling is also included.

Posted in Uncategorized Tagged: JCR, Scala, Sling

Posted at June 26, 2009 01:38 PM by Michael Dürig with tags Uncategorized, JCR, Scala, Sling

Ronald Sarayudej: People Who Use Liferay: Common Hope For Health

Common Hope For Health

Region: USA

Students and young professionals are engaged in global health like never before; together, they constitute the next generation of global health’s global leaders. Common Hope for Health (CHH) leverages this surging energy by bringing together young people—medical students, public health students, nonprofit professionals, social entrepreneurs, consultants—to form interdisciplinary teams that provide sound and innovative medical, technical, strategic, and financial assistance to grassroots health initiatives in low-resource settings.

 

Posted at June 25, 2009 05:09 PM by Liferay Blogs

fguillaume: The Promises of Modern Chemistry

By now, most of you should have heard about CMIS, the upcoming specification that promises interoperability between many systems for common content management tasks. The CMIS specification is being driven by an OASIS Technical Committee and is currently still a draft; it is expected to be finalized late 2009 or early 2010.

I won't detail here all that CMIS will bring, this has been covered extensively already and will be even more in the future... No, the purpose of this article is to present Chemistry.

Chemistry

Chemistry is a new Apache project for CMIS that started incubating recently ("incubation" is the term used in the Apache Software Foundation for young projects that still have to prove themselves). Chemistry's goal is to provide general purposes libraries for interaction using CMIS between a server and a client. These libraries are mainly written in Java, but some JavaScript code has been added as well, and we're open to more.

Chemistry provides a high level API so that a developer can manipulate objects like documents or folders and can call simple methods on them without having to deal with details of a specific low-level communication transport. In addition to that, Chemistry also provides a SPI (Service Provider Interface) for backend developers, making it quite easy to use Chemistry to store documents in a project-specific manner.

Underlying this, Chemistry has implementations for the CMIS transports. CMIS specifies two mandatory transport protocol bindings (one extending AtomPub, for a lightweight RESTful HTTP interface, and another using SOAP for a WebService-based interface), and Chemistry will support both — and probably more in the future.

The current Chemistry code base has an initial version of the API/SPI together with some actual implementations around the AtomPub protocol. Already Chemistry can talk to itself (AtomPub client talking to AtomPub server) and store data in-memory (which is very handy for unit tests). Outside of the Apache code base, Nuxeo has also coded a backend to provide access to Nuxeo 5.2 repositories using Chemistry. Generic CMIS AtomPub clients like CMIS Explorer are able to see a Nuxeo repository through Chemistry for instance.

Chemistry Modules

The following modules will be available in Chemistry:

  • The APIs: a low-level SPI between a client and a server that mirrors the CMIS specification closely (it is expected that the SPI will be used when either the client or the server implements one of the HTTP protocols defined in CMIS), and a high-level API that wraps the SPI to provide more object-oriented notions of connections, folders and documents, and that hides the nitty-gritty details of the protocols.
  • A set of common Java utilities around CMIS, for instance a parser to turn CMIS SQL into an AST (Abstract Syntax Tree) that can be reused by different backends, or a generic in-memory implementation of the SPI and API for unit testing.
  • Four implementations of the SPI for the protocols defined by CMIS: an AtomPub server and client, and a SOAP server and client.
  • A generic implementation of the API-to-SPI wrapping, so that a third-party implementation of just the SPI can be plugged into the rest of the Chemistry framework. (Some of the four basic protocol implementations may also provide the full API when this is more efficient than using the generic wrapping.)
  • An implementation of the APIs as a JCR backend.
  • A set of generic tests for CMIS servers and client, providing an unofficial TCK for CMIS.

In the future, it is expected that more implementations of the APIs will be available, for example we envision new transports:

  • A WebDAV-based transport.
  • An HTTP-based transport less RESTish and more friendly to browsers and JavaScript.

And new backends:

  • A backend storing documents on the filesystem, with or without metadata.
  • A backend storing documents in the Google AppEngine Datastore.
  • A backend storing documents using Microsoft Windows SharePoint Services.
The Pieces of the Puzzle

As you can see, these modules will allow for wide interoperability between systems. Here's a graphical representation of the building blocks:

The User Application speaks the API:

The API can be implemented in many ways. First, it could be a direct backend:

Or, more commonly, the API will be implemented as a client binding for a specific protocol, SOAP of AtomPub:

Each protocol speaks in its own way on the wire:

And this is connected to a server that speaks the protocol as well:

Finally, behind the server, a backend has to store the actual information somewhere:

Anyone is welcome to create new pieces, for instance new protocol bindings:

Or new storage backends:

Now let's see how the main pieces can be plugged together.

The simplest connection is between an application and a direct backend:

If the backend only wants to deal with the SPI, its implementation can reuse the API-to-SPI to provide a full API experience:

When talking through a wire protocol, we plug together a client and a server:

The end result is an application talking to a backend through a wire protocol:

Of course we can get creative and plug many more together:

Development

All of this is still a work in progress (even the spec!), but you should expect rapid changes in the available features in the coming months as the spec settles down, more code is written, more test cases are written, and more testing against third-party implementations is done.

If you're interested in helping, please join the list chemistry-dev@incubator.apache.org by sending an empty email to chemistry-dev-subscribe@incubator.apache.org.

Posted at June 25, 2009 01:20 PM by Nuxeo Blogs with tags ecm, java, nuxeo, nuxeo5

michid: michid


Well, I wasn’t aware of Ticket #1737 when I was trying to find a solution to the problem from my previous post. Thanks to Jorge Ortiz for pointing this out. However, I reviewed my approach to solving this and didn’t find sever limitations. Maybe someone else does…

When I initially stumbled on this, I remembered that existential types where introduced into Scala for coping with Java’s raw types. But there is an additional twist here, we need to tell the compiler that our MyIterator implementation actually ‘is an instance of a raw type’. So combining existential types with self types led me to the following solution:

class MyIterator extends Iterator2 {
  this: java.util.Iterator[_] =>
  def hasNext = true
  def remove = throw new Error
  def next = "infinity"
}

We can now safely use instances of MyIterator.

  def test1(it: MyIterator) = {
    println(it.next)
  }

  def test2(it: java.util.Iterator[_]) = {
    println(it.next)
  }

  val it = new MyIterator
  val v: String = it.next
  println(v)

  test1(it)
  test2(it)

The approach using existential types in combination with self types makes sure that values returned from the next method always are typed correctly.

Posted in Uncategorized Tagged: Puzzle, Scala

Posted at June 24, 2009 08:51 PM by Michael Dürig with tags Uncategorized, Puzzle, Scala

Ronald Sarayudej: People Who Use Liferay: Healthy Humans

Healthy Humans

Region: USA

Built on the proven Integrative Medicine clinical methods and developed by leading medical doctors, Healthy Humans is a uniquely personalized, hand-held approach to developing personalized Whole Health Plans.

 

Posted at June 24, 2009 04:31 PM by Liferay Blogs

Julien Brulland: eXo Platform at LinuxTag 2009

linuxtag-2009

eXo Platform will be at the LinuxTag 2009 event, which is the most important place for Linux and open source software in Europe. In 2009, the 15th LinuxTag presents news for professional users, decision makers, developers, beginners and the Linux community - from 24th until 27th June on the Fairground in Berlin.

It will be the perfect occasion to share about the last developments made on the eXo stack and more particularly on its portal, which development will be merged with the JBoss Portal project.

It is with pleasure and passion that eXo experts will answer your questions regarding eXo Platform activities as well as the Open Source market.

So, come to visit us! We are looking forward to discussing with you!

Posted at June 24, 2009 10:00 AM by exo Platform Blog with tags business, enterprise2, meet people

Michael Marth: Jazoon talk on "Scalable Agile Web Development"



On Thursday, I will give a talk at the Jazoon conference in Zurich. It will be about Apache Sling, the web framework for content-centric applications. The agenda is:

Scalable Agile Web Development: REST meets JCR meets OSGI

This session is a very hands-on lab that shows how a real web application is developed from scratch in a very agile fashion leveraging a heavy-weight enterprise ready back-end yet allowing for unprecedented agility in development in building rest-style web applications. Thinking of a classic j2ee stack this may sound like a contradiction.

Agility of development begins with the amount of tooling and setup we need to get started, so expect to see the entire walk-through from installation of the server software to the development of a complete application within the time constraints of the session.

Agenda:
(1) Web architecture, think outside the box.
(2) Meet: apache sling.
(3) Building a real-life webapp from scratch.

The full conference agenda is here. I shall also help Michael Dürig with his session on Scala and Sling.

Posted at June 24, 2009 07:11 AM by Michael Marth

Ronald Sarayudej: People Who Use Liferay: Mini United

Mini United

Region: Germany

The MINI United Community is the place to be for any MINI fan! MINI drivers from all over the world can set up profiles and show their MINI models, interact with each other, add comments to the MINI blog or even enter their own clubs and events on a map.

 

Posted at June 23, 2009 11:05 PM by Liferay Blogs

Ronald Sarayudej: People Who Use Liferay: Exadel

Exadel

Region: USA

As a next generation Web 2.0 Systems Solution Company, Exadel has become the leading provider of professional services for developing customized Web 2.0 applications, helping businesses large and small deploy rich Internet applications. The company delivers fast, scalable, and cost-effective solutions that leverage a globally distributed development model using Open Source technologies to reduce application lifecycle costs and improve overall productivity to gain competitive advantage for its customers.

 

Posted at June 23, 2009 04:29 PM by Liferay Blogs

seth: Great presentation on content modeling

Deane Barker, over at Gadgetopia, has posted slides from his presentation “Just put that in the zip code field”. He gave the talk at the Web Content 2009 conference in Chicago. Unfortunately, I was not able to attend the conference and missed seeing Deane present. However, knowing that I am as [...] Related posts:
  1. Code moves forward. Content moves backward. One of the
  2. Change.gov content under Creative Commons Attribution 3.0 License Change.gov
  3. CMS Selection Workshop Last week
Related posts brought to you by Yet Another Related Posts Plugin.

Posted at June 23, 2009 02:56 PM by Seth Gottlieb with tags architecture, conference, selection

fguillaume: Florent Guillaume on CMIS and Apache Chemistry

A few weeks ago I gave an interview to Irina Guseva of CMSWire. We touched the subjects of strategic value of CMIS, Apache Chemistry project history, partnerships, open source, future plans around CMIS, and more.

Chemistry has extremely ambitious plans. We believe that it can become the de facto bridge between most of the Java-based content-oriented products, allowing a very wide variety of back-ends and applications to be connected together. And actually Java is not the sole language that this project is targeting, as David Nuescheler is also working on a JavaScript library for CMIS. In the coming month you should see an exponential increase in the functionality that Chemistry provides...

You can read the full article at CMSWire.

Posted at June 23, 2009 01:29 PM by Nuxeo Blogs with tags ecm, java, nuxeo, nuxeo5