Category: Java

Open Source Licensing and Community

Posted by on January 16, 2010

Open source licensing, community and contribution are important topics. This week there were a number of interesting blog posts and tweets on the subject which might be summarized by a tweet from Matt Asay (#mjasay)

@maslett moral of story? platforms flourish on permissive licensing. GPL is a capitalist’s best friend. Apache/EPL are a community’s

Related blogs (along with several others):

I agree, license and copyright are factors in creating and fostering communities but I don’t think it’s the most important set of factors. License and community, while related are very much separate issues. Open source tends to fetish license and thus it’s over-emphasized in conversations where it at best a contributing factor.

Apple, Google, Drupal, Linux, Microsoft and many, many other examples demonstrate just how little restrictive license and copyright of the core software matters to the size and contribution of the community. Permissive licenses can increase adoption as well as forks and closed derivative works, all of which cannot so simply be considered community.

Relevancy, utility, inclusion, opportunity, transparency, recognition and common vision / interests are what drive the size and output of community. It’s leadership in a project that sets the tone for the priority of these aspects. A small or under-performing community (proportionate to its potential) is more likely related to its leadership than its license.

Related:

An incomplete identification and factoring of some areas around open source that support the ideas in this post:

Boston area Alfresco user group meeting on November 17th to cover Alfresco Best Practices

Posted by on November 05, 2009

Join us in Waltham MA (Greater Boston area) and learn best practices for approaching and implementing projects with Alfresco ECM suite

  • Determining your business use case
  • Architectural best practices
  • Development best practices
  • Operational best practices

Our presentation was co-authored by Russ Danner of Rivet Logic, Jeff Potts of Optaros and Peter Monks of Alfresco

Where?
Rivet Logic Developer Forge, Boston
1050 Winter St
Waltham , MA
617.834.2781

When: 6:30 PM

Pizza, coffee and soda will be provided.

RSVP here to attend

JBoss Seam Component wiring options

Posted by on October 29, 2009

At Rivet Logic we do quite a bit of work with the JBoss Seam framework, specifically with our Content Management System integration we call Crafter rivet.

Seam can be used with the Spring bean factory framework, a popular “IoC” or Inversion of Control / Dependency injection framework. Spring enables developers to create instances of java objects known as beans and then to wire them to other java objects. Most people working in J2EE today are familiar with this so I won’t spend any time going in to further detail here. Seam also supports the ability to use java annotations to declare a class as a bean and to specify how it should be wired through what they call out-jection and injection. Check out the Seam website for more details on how the Seam bi-jection mechanics work.

One question that has come up for me many times on consulting engagements is: “which approach to use, Spring or Seam bi-jection?” My experience shows me that the answer is not one or the other. Both approaches have significant benefits and can be used together to create a stronger approach than either one can provide on its own.

Here are some very simple guidelines

When to use Spring beans:

Infrastructure components and services are great candidates for Spring beans

  • Such services are generally singletons within the system. Spring has excellent support for managing and wiring these objects
  • Such service classes are often packaged in separate more commonly used libraries. Hard coding a bean name and wiring within the class definition or strongly coupling to Seam is less desireable.
  • You want a very simple way to override the implementation at deployment time. Consider a scenario where you want to override a DAO. By managing the bean in Spring it is extremely easy to override the bean definition to use an alternate class and configuration in a given environment simply by placing an additional xml file in the classpath

When to use Seam annotations:

Domain specific components are good candidates for bi-jection.

  • They are often fine grained application specific components.
  • Explicitly stating how the component will be wired in the the class file has little impact on its re-usability because its scope is limited to the application at hand.
  • Such components really benefit from one of Seams strongest features in its bean framework: Conversation Scoping. This is the ability to define a life-cycle which is shorter than a session. By limiting the lifetime of a object to its true life-cycle it’s possible to free memory up for other needs within the system. On large, high troughput applications the benefits here cannot be overstated.

By using a combined approach you get the reusability and flexibility of Spring framework with the performance orientation of conversation scoping and ease of development associated with Seam annotations.

Alfresco sets course for 4.x at Alfresco Community Meet up in DC

Posted by on October 21, 2009

Yesterday about 100 people crowded the halls of the Kellogg Conference Center in Washington DC as another round of Alfresco community summits got underway.

Bill Robinson (Alfresco, VP Sales) reported that 1% of the total Alfresco community / ecosystem base has been attending these meetings. The customer to vendor mix seemed to be about 50 / 50. As a member of Rivet Logic I now help to tip the scales on the vendor side. As a customer of Alfresco in my past life in publishing I can tell you that these events are really important for customers. The opportunity to network with other customers is unparalleled. If you can’t make it out to Atlanta or LA for the upcoming events, mark your calendar for next year. You can’t afford to miss these.

John Newton, Alfresco co-founder and CTO gave the keynote address and laid out the strategic and technical vision for the upcoming versions of Alfresco. As usual he did not disappoint. Alfresco will continue to attempt to disrupt the current ECM market with evolving open source business model and technical strategy and innovation. Of particular note:

  • Alfresco will license the Webscript engine and Surf framework under an ASF (Apache Software Foundation) license. The repository and other core technology will remain under the GPL. Alfresco will retain ownership and continue to maintain these libraries.
  • Alfresco will continue with ongoing activities in partnership with SpringSource (now a division of VMware) to integrate the Webscript engine and Surf in to Spring MVC.
  • Some components of the platform, which are intended specifically for enterprise deployments, will only be available in the Enterprise edition of Alfresco.
  • CMIS, an emerging content management standard continues along its approval process within the OASIS standards body, albeit at a slower pace mostly due to red tape. CMIS is to content repositories as SQL is to the database. In the late 80’s and early 90’s the adoption of SQL standards helped the relational database market gain widespread traction. SQL enabled third party vendors and development platforms more easily and cost effectively develop value. John Newton, a veteran of the SQL revolution, strongly believes that CMIS will have a similar effect in the content management space. CMIS will be a core component of the Alfresco architecture and strategy.
  • Alfresco will be evolving its architecture to better support an ability to run in a cloud environment. Alfresco’s architecture has always contained key elements of cloud-ready software including its stateless service tier. Future enhancements will include functionality like repository sharding.
  • The DM and WCM repositories will be consolidated. The AVM technology under the WCM repository will be retired in favor of a DM / CMIS based store which supports a similar feature set including snapshots, sandboxes, and a simplified layering scheme. This activity will lead to a, much needed single object model and a single set of core services for library functions, permissions, auditing and so on.
  • Alfresco will focus on CMIS and WCM for 4.x.
    • Alfresco WCM focus will deepen its developer focus going forward with Spring and Eclipse integration.
    • Alfresco Runtime servers, currently based on AVM stores will be replaced with scalable CMIS runtimes.
    • Alfresco Share will continue to take on administrative functionality and should completely replace the Alfresco Explorer client by 4.x

I was able to get to the Records Management best practices break out session, which I found very informative. Strong RM capabilities and DOD 5015.2 certification have been a long time coming. Alfresco RM is implemented within Alfresco Share as a “Site type.” Users may be invited in to the RM space to become record managers and consumers. During the presentation we learned about current trends in RM and were treated to a demonstration of the RM application and the process of moving content through its lifecycle as a record from declaration to deposition.

Our CEO, Mike Vertal, outlined a large-scale records management solution that Rivet Logic has been working on with SAIC based on Alfresco, Liferay, and SAIC’s Teratext email archiving platform.

I gave a talk entitled Alfresco Best Practices, which I co-authored with Jeff Potts of Optaros and Peter Monks of Alfresco. The three of us are very excited to have had an opportunity to consolidate all of the practices, pointers and gotchas we’ve learned over the years. The presentation is aimed a variety of levels from Alfresco noobs to Alfresco experts and attempts to cover the lifecycle of a project from conception to deployment and operational aspects. It’s a lot of material to cover in 90 minutes. We invited listeners to tweet about their favorite best practices, practices they thought they could implement immediately and any areas we might have missed. The most active, productive tweeter in each section was awarded a much-coveted Alfresco Community Member t-shirt. We’ll be giving this talk in Atlanta, LA and at a number of the international meet ups – so bring your notepad and twitter account! For those who can’t make it to the events please watch and contribute online at: #alfrescobestpractices. All the material – including more detailed source material will be made available on line after the meet ups. We invite you to enhance and embellish the material. Also for those of you who run local community groups… this presentation is a great score. Download it and present it at your next meeting!

Alfresco Tech Talk Live: Leveraging Alfresco Share for Collaborative Enterprise Authoring

Posted by on June 04, 2009

Tomorrow (Friday June 5th, 2009) at 12pm EST I have the pleasure of presenting and leading a discussion for the bi-weekly Alfresco Tech Talk Live hosted by Dr. Yong Qu of Alfresco.

We’ll be exploring how Alfresco Share, with some basic modifications, can be leveraged to create a collaborative authoring and management environment for your enterprise content. Join us tomorrow for a demonstration and open discussion as we explore this interesting subject.

To attend, please visit http://alfresco.acrobat.com/live and enter the meeting room as a Guest.

Alfresco Community Meeting in NYC 2009

Posted by on May 11, 2009

Last week I attended the Alfresco community meetup in New York City. The turn out was impressive. Nancy Garrity (Alfresco Community Manager) told me that the event was completely “sold-out” and that there was not enough room for everyone that wanted to come. I was sorry to hear that we were not able have everyone there that wanted to be there but it’s really great that there is so much interest in Alfresco.

The session got underway with Ian Howells, Alfresco’s Chief Marketing Officer, who reviewed the trends in favor of open source ECM, not the least of which is the accelerating demand driven by the global recession.

Michael “Uzi” Uzquiano, Product Manager for Alfresco WCM and Alfresco Network, then laid out a roadmap for Alfresco WCM, Surf and Alfresco Network. Some key highlights were:

• Repository harmonization. Alfresco provides two distinct content stores: the Web Content Management (WCM) repository, and the Document Management (DM) repository. Alfresco is bringing these two stores together at the API level and then consolidating many of the core capabilities.

• Clustering for the WCM repository (not just DM) is under development.

• New Forms Service: Alfresco WCM has long had a capability for defining forms. A user can install an XSD in the Data Dictionary. The XSD is then translated in to a Web form that provides a friendly user interface for reading, modifying, and storing XML. The DM repo does not have such a feature. Instead, within DM property sheets map to the underlying content model. Many users have requested both capabilities be available uniformly for both DM and WCM. Alfresco is responding to these requests with the new service. The new Forms Service will have a much more powerful persistence capability. I asked to find out if customers who already have XSD form definitions in play would need to change to a different format. I was told that these customers should be safe.

• Spring Webflow integration with Surf: Spring Webflow is the project in the Spring Portfolio that focuses on providing the infrastructure for building and running rich, Java-based web applications.

Uzi laid out a timeline for future Alfresco releases:

1. v3.2 Labs targeted for June

2. v3.2 Enterprise targeted for September 2009

3. v3.3 in early 2010

4. v4.0 later in 2010

In addition to Uzi’s presentation, a number of other presentations and demos were also given. I particularly liked the customer case study given by the Warren country Correction Center. They process a large volume of inmates in and out of the facility. Each time an inmate is processed in or out of the correction center a large volume of paper work is generated which must be stored for long periods of time. Warren country is now well on their way to eliminating the need to store large volumes of content in physical file cabinets. They have implemented an Alfresco based solution for archival and retrieval of inmate data. Electronic storage of the inmate information allows the correction center to quickly search and retrieve important information on inmate background, health, behavior and other important documents for both operational and legal functions.

Other demonstrations included
• Scanning best practices and an Alfresco-integrated Kofax demonstration.
• A walkthrough of Alfresco Share
• Digital tampering protection through an integration with Surety’s Absolute Proof.
• IMAP demonstration that allows your email bin and folders directly with Alfresco.
• A demonstration of a Flex UI for Alfresco.

I gave a presentation entitled “Leveraging Alfresco Share for Enterprise Content”. At Rivet Logic, we get a lot of requests for solutions to help authors manage deep, inter-related content types that need to ultimately be published to numerous channels, including the Web. In addition to the publishing requirements, enterprise class assets usually benefit from an authoring environment that includes social and collaborative capabilities like those found in Alfresco Share. To address this, we demonstrated a number of best practices and design patterns for managing enterprise content with an authoring environment plugged in to Alfresco Share combined with an instant Web preview capability. Based on the feedback, the approach seemed well received. Like many of our customers, members of the Alfresco community are quite interested in collaborative authoring environments for enterprise class content.

It was great to meet with everyone who was able to attend. These types of events are vital for the community. It’s a perfect time to give Alfresco feedback and for the customers and community to meet one another.

Liferay: Just another portal? No way.

Posted by on February 24, 2009

“Liferay Enterprise Portal.”  Sure, Liferay packs all the features that make it a strong “Portal.”  In partnership with Sun, Liferay has a large and experienced team behind their portal capabilities including their implementation of the latest JSR-286 portlet specification / industry standard.

The JSR-286, for its part expands the existing portlet specification in meaningful ways:

  • Portlet filters
  • Portlet Event support
  • Public Render Parameters
  • Resource serving

With the strength of its support for the portlet specification one might be tempted to think of Liferay as “just another portal.”  That classification would be misguided. 

Liferay is a platform and a framework for developing collaborative and social applications and services.  Portal is just the mechanism for aggregating and distributing these capabilities.

At the heart of Liferay is a service oriented architecture. Liferay ships with a host of out-of-the-box services for creating collaborative applications.  To cite a few (but not all) examples:

  • Profile Service
  • Search Services
  • Group Services
  • Calendar Service
  • Friend Services
  • Activity Services
  • Forum Services
  • Blog Services
  • Rating Services
  • Tagging Services

If the out of the box services do not provide the functionality coverage you’re application requires or you need to create your own domain specific or composite services; Liferay provides a capability called Service Builder.  Service builder makes it very easy to create services.  With the modification of a simple XML file and the execution of a code generation script you can quickly create all the basic plumbing for your services.  If you need persistence, all the Hibernate work is created for you.  If your service needs to be remoted through interfaces like SOAP, all that plumbing can be generated for that as well.  The only code you need to write is the code that is custom to your service.  All the machinery is quickly taken care of by Liferay; the framework.

Liferay makes use of Hibernate to handle data persistence.  Service builder does all the work of configuring and coding against Hibernate for you making this somewhat transparent to you.  There is real world value here. You deal directly with your model not low level JDBC code.  You can configure read / write separation (a special thanks to a community contribution for this. – community matters) and your application is immediately enabled for several mainstream / popular relational databases.

In addition to a rich services framework, Liferay also enables application developers with powerful eventing and lifecycle capabilities called Hooks.  Applications can register to receive and act upon portal and portlet start up and shutdown events, user activities, persistence level CRUD (create, read, update, delete) events, CMS activities and many other out of the box events.  It’s also possible for applications to register and fire their own events for consumption by sibling applications.

To support your presentation tier Liferay has developed a host of tag libraries that work in concert with standard tag libraries.  This makes it very easy to create standards based, lightweight presentations on top of your application and services code.  In addition to server side libraries, Liferay is designed to work extremely well with JQuery, a leading JavaScript / AJAX library for rich application UIs.  The Liferay team even hired a JQuery committer in order to drive home the integration and to help emphasize the importance of strong user experience and quality of UI within the platform.

Is Liferay a Portal?  Yes of course it is.  Liferay has a strong implementation of the industry standards and is the most popular open source JSR-286 portal in the space today. However Liferay is much, much more.  If you need to build a collaborative or social application: Liferay takes care of all the boilerplate coding and provides the fundamental capabilities out-of-the-box allowing you to focus your time, attention and money on your business problem. 

Keep it ‘Lite’ (Part I) : Layer your platform for development agility, performance and lower development costs

Posted by on October 24, 2008

This is Part I of a series that I will be doing on factoring your software architecture for development agility, software performance, and total cost of ownership (TCO).

When object oriented programming first arrived on the scene (25 years ago!), it delivered important concepts: encapsulation, polymorphism, and inheritance. These concepts were designed to help the developer factor code. Proper factoring reduces complexity, redundancy and cohesion. One of the most powerful factoring techniques in programming is grouping for reuse.  Functions, Objects, and Aspects are all code groupings that organize an area of concern for reuse.

Code reuse and other factoring techniques tend toward greater simplicity and development agility. These characteristics have an important and positive impact on cost and revenue. There is no doubt that software development can be an expensive undertaking and at the end of the day it’s always about the economics.

As we have observed, programming languages have been evolving to help manage complexity and make software development more efficient and effective.  As computing power continues to improve, platforms are also evolving to improve development agility.  For example JAVA introduced the JVM and the concept of “write once run anywhere.”  It’s clear that the JAVA platform (as opposed to the JAVA language) provides clear agility over languages compiled to specific machine architectures because it removes the dependence on specific machine architectures by introducing an abstraction; the JVM. It has greatly simplified building, packaging and the distribution of software.

Today scripting languages are mainstream.  Scripting languages are generally loosely typed and are interpreted rather than compiled. There are debates between what might be termed the “systems level programming languages” and “scripting languages.”  Some in the traditional camp cite that scripting languages lack rigor, and claim that it won’t perform when compared to their compiled counterparts.  Those in the scripting community point to “extra work for little value” and complex deployment environments as the other side of the coin.  The communities around PHP, Ruby, Python, PERL, Groovy and others boast impressive development agility characteristics over JAVA, C++, etc.

It’s unlikely that there is anything inherent in the languages available today that drastically change the agility characteristics of development in those languages.  Most of the mainstream languages have similar concepts and differ in terms of syntax.  While some expressions may be quicker in one language over another, it’s unlikely that any of the mainstream language’s syntax will produce agility characteristics that are orders of magnitude above and beyond the others. That is to say, it is not the “PHP” in “PHP” or the “Ruby” in “Ruby on Rails” that makes them faster to develop in. It’s platform and architecture that accounts for the difference.  PHP, Ruby and many other examples are interpreted rather than compiled and this means that when a change must be made to a program there is no need for a recompile and no need for a restart.  Just change the code and (in the case of the web) hit refresh.  In the same way JAVA cleaved an entire effort out of the development process (building for individual architectures), scripting languages have cleaved a massive time sync off the hands of developers by making it easy to modify code “on-the-fly.”   I believe that scripting and compiled languages are not at odds but rather they are complimentary.

The strong typing, static analysis and offline assembly of byte code makes perfect sense for framework or systems oriented code.  This code is not likely to change much in the course of an implementation but is executed frequently. Framework code often defines the performance profiles of a system.  You always want to optimize when possible.  Where there is no absolute requirement for interpretation and no strong value proposition it should be avoided.  That is to say favor compilation over interpretation where interpretation does not deliver significant value.  Don’t make the machine do the same work twice when it can be avoided.

Application level code (as opposed to framework code) changes often.  Developers benefit from the ability to easily write and run code without having to restart servers and perform compilations and deployments.  Application code has a lifecycle and release cycle that is much different from infrastructural / framework code.  This becomes more and more apparent as the framework matures and changes less and less often.  They are two different types of code with two different lifecycles.  Businesses don’t want to spend more time on framework than is necessary.  The value is in the applications and this is where agility matters most.

The optimal approach doesn’t have to be one or the other (although in some cases it is.)  Each platform plays best to a different set of concerns.  In software, a common approach for tackling separation of concerns is called layering.  It is possible to layer a system by using a traditional, compiler based language and platform (such as JAVA) for infrastructure needs while leveraging scripting languages and template technologies (such as PHP, Ruby, Groovy and so on) for the application layer.  By doing so, you combine the success characteristics of both platforms: compensating for weaknesses while playing to strengths. To understand the power and success of this approach, one needs to look no further than Excel; a truly killer application.  Excel is a framework.  You bring the application to it when you build your spreadsheet.  Excel’s (a compiled, c++ based application) power is opened full bore with the VBA scripting environment.

We also see this approach taking hold in the web space with packages like Bean shell, groovy, JRuby, Quercus PHP and so on.  At a recent community conference Alfresco, an open source enterprise content management platform demonstrated SURF, a java based framework that enables developers to code applications in server side Javascript.  Alfresco used the SURF platform to create its new Share application (a Share Point alternative.)  They are moving away from developing in pure JAVA because it just doesn’t provide the agility they need to compete at “internet speed”. Instead, they will continue to build their core repository and framework in JAVA but applications will be built based on SURFs support for Javascript and templates.  It’s powerful and fast as a development platform.  The productivity Alfresco has demonstrated in the last year is truly impressive and a testament to layering the two types of development platforms.  Use the right tool for the job and it will get it done better and faster every time.

I’d like to point out one more important outcome of layering your development platform. In doing so you can greatly reduce the learning curve that one must overcome before one can develop for the system.  A relative few people know how to program in JAVA.  However a great many more people have at least some experience programming in Javascript and even more have experience with PHP.  Why?  That’s simple. Javascript is common on web pages. PHP is offered by almost every ISP on the planet and it has a huge online community from which one can find code examples.  When you layer your system you get all the technical benefits of JAVA on the back end with all the benefits of easy to develop code on the front end (the application) in a way that is open to a very wide range of developers; for example: The core framework written in JAVA and the application consuming that frame-work written in PHP (Quercus PHP is an Open Source, JAVA based implementation of PHP5).

PHP developers tend to be much more available and affordable than JAVA programmers. It’s simple economics.