[CONF] Apache Sling Who is using Sling ?

2009-08-27 Thread confluence







 Who is using Sling ?
 Page edited by Bertrand Delacretaz

 minor tweaks
  
 minor tweaks
 
  
 
 Who is using Sling ?

Although Sling is a relatively young project, only recently graduated from the incubator, it already has a growing following of adopters. This page lists those adopters (or at least those that agree to be listed). 

Being on the community wiki, if you are using Sling and your not listed here, please add yourself with a brief description of your project and how you have adopted Sling.


Adopters

Sakai Project (http://www.sakaiproject.org )

The Sakai project is a project that was started in 2004 funded by a research grant from the Andrew Mellon Foundation. Its aim was to create an open source collaborative environment to support teaching and learning and research within Higher Education. The initial project members were Stanford University, University of Michigan, Indiana University and the Massachusetts Institute of Technology. These four were rapidly joined my many other institutions growing to over 160 Universities running Sakai in production today. The project funding has come to an end and sustainability has been achieved as a result of community contributions.

The University of Cambridge (UK) was one of the early adopters and rapidly became involved in shaping the core of Sakai. In early 2008, shortly after Google made its OpenSocial announcement a decision was made to re-architect Sakai to be more user focused and socially aware, building on the collaborative experiences seen in networks like Ning and Facebook. After a period of evaluation Sakai chose Sling as its core technology partly because it had the solid backing of the Apache Foundation, but also because it was based on OSGi for componentised development, solid REST semantics and a solid JCR production backend in Apache Jackrabbit.

This adoption has had a huge impact on the Sakai code base. Although the core development is not complete, Sakai's line count has dropped from about 1.8M lines of code to about 200K as Sling has replaced many of modules that satisfied the Enterprise Content Management use cases. As a result, the code quality, scalability and performance have all risen whilst the memory footprint of production JVM's has halved. Perhaps the most startling impact has been the new ease with which UX designers and UI developers are able to work with the framework, where previously the Java web environment had precluded a UX/UI driven rapid development cycle.

Sakai 3 based on Sling will be going into production at the University of Cambridge by December 2009, with a number of other early adopters. For more information see an early screencast or look at the project site (frontend, backend) or live demo 

License: ECL2/Apache2


 
 
   
Change Notification Preferences
   

   View Online
   |
   View Change
  |
   Add Comment









[CONF] Apache Sling Website Apache Sling

2009-08-27 Thread confluence







 Apache Sling
 Page edited by Bertrand Delacretaz

 Link to who is using sling
  
 Link to who is using sling
 
  
 
 Apache Sling - Bringing Back the Fun

Apache Sling is an innovative web framework that is intended to bring back the fun to web development.

Discussions about Sling happen on our mailing lists, see the Project Information page for more info.

Apache Sling in five bullets points


	REST based web framework
	Content-driven, using a JCR content repository
	Powered by OSGi
	Scripting inside, multiple languages
	Apache Open Source project



Apache Sling in a hundred words

Apache Sling is a web framework that uses a Java Content Repository, such as Apache Jackrabbit, to store and manage content.

Sling applications use either scripts or Java servlets, selected based on simple name conventions, to process HTTP requests in a RESTful way.

The embedded Apache Felix OSGi framework and console provide a dynamic runtime environment, where code and content bundles can be loaded, unloaded and reconfigured at runtime.

As the first web framework dedicated to JSR-170 Java Content Repositories, Sling makes it very simple to implement simple applications, while providing an enterprise-level framework for more complex applications.

News


	Apache Sling OSGi LogService Implementation, Version 2.0.6, is released (August 5, 2009)
	Ian Boston added as a member of the PMC (July 25, 2009)
	Ian Boston added as a committer (July 9, 2009)



	all news...



History

Sling started as an internal project at Day Software, and entered the Apache Incubator in September 2007. As of June, 17th, 2009 Apache Sling is a top level project of the Apache Software Foundation.

The name "Sling" has been proposed by Roy Fielding who explained it like this:


[The name is] Biblical in nature.  The story of David: the weapon he uses to slay the giant Goliath is a sling.  Hence, our David's [David Nuescheler, CTO of Day Software] favorite weapon.

It is also the simplest device for delivering content very fast.


Who uses Sling?
See Who is using Sling on our public wiki.

Getting started
If you prefer doing rather than reading, please proceed to Discover Sling in 15 minutes or read through the recommended links in the Getting Started section, where you can quickly get started on your own instance of Sling.

Excuse our mess while we redesignSling has undergone an important redesign in the last few months, and we're not done updating this website yet.

The status of each page is indicated by a note like this at the top of each page. 

Pages which do not have such a note should be considered not reviewed: the information that they contain might be out of sync with the current Sling codebase.

Contents


	Documentation - Here you will find the documentation on Sling
	Development  Documentation on how to develop web applications with Sling and what tools you have at your disposal
	Links
	Wiki
	FAQ
	Project Information




Use Cases for Sling


Wiki

Day built a Wiki system on Sling. Each Wiki page is a node (with optional child nodes) in the repository. As a page is requested, the respective node is accessed and through the applying Component is rendered.

Thanks to the JCR Mapping and the resolution of the Component from the mapped Content, the system does not care for what actual node is addressed as long as there is a Content mapping and a Component capable of handling the Content.

Thus in the tradition of REST, the attachement of a Wiki page, which happens to be in a node nested below the wiki page node is easily accessed using the URL of the wiki page attaching the relative path of the attachement  ode. The system resolves the URL to the attachement Content and just calls the attachement's Component to spool the attachement.



Digital Asset Management

Day has implemented a Digital Asset Management (DAM) Application based on Sling. Thanks to the flexibility of the Content/Component combo as well as the service registration/access functionality offered by OSGi, extending DAM for new content type is merely a matter of implementing one or two interfaces and registering the respective service(s).

Again, the managed assets may be easily spooled by directly accessing them.



Web Content Management

Last but not least, Sling offers itself very well to implementing a Web Content Management system. Thanks to the flexibility of rendering the output - remmber: the system does not care what to render, as long as the URL resolves to a Content object for which a Component exists, which is called to render the Content - providing support for Web Content authors (not PHP programmers but users out in the field) to build pages to their likings can easily be done.


References


Apache Jackrabbit

The main purpose of Sling is to develop a content-centric Web Application framework for Java Content Repository (JCR) based data stores. Sling is implemented - with the notable 

[CONF] Apache Sling Who is using Sling ?

2009-08-27 Thread confluence







 Who is using Sling ?
 Page edited by Bertrand Delacretaz

 point to existing customers list instead of duplicating
  
 point to existing customers list instead of duplicating
 
  
 
 Who is using Sling ?

Although Sling is a relatively young project, only recently graduated from the incubator, it already has a growing following of adopters. This page lists those adopters (or at least those that agree to be listed). 

Being on the community wiki, if you are using Sling and your not listed here, please add yourself with a brief description of your project and how you have adopted Sling.


Adopters

Sakai Project (http://www.sakaiproject.org )

The Sakai project is a project that was started in 2004 funded by a research grant from the Andrew Mellon Foundation. Its aim was to create an open source collaborative environment to support teaching and learning and research within Higher Education. The initial project members were Stanford University, University of Michigan, Indiana University and the Massachusetts Institute of Technology. These four were rapidly joined my many other institutions growing to over 160 Universities running Sakai in production today. The project funding has come to an end and sustainability has been achieved as a result of community contributions.

The University of Cambridge (UK) was one of the early adopters and rapidly became involved in shaping the core of Sakai. In early 2008, shortly after Google made its OpenSocial announcement a decision was made to re-architect Sakai to be more user focused and socially aware, building on the collaborative experiences seen in networks like Ning and Facebook. After a period of evaluation Sakai chose Sling as its core technology partly because it had the solid backing of the Apache Foundation, but also because it was based on OSGi for componentised development, solid REST semantics and a solid JCR production backend in Apache Jackrabbit.

This adoption has had a huge impact on the Sakai code base. Although the core development is not complete, Sakai's line count has dropped from about 1.8M lines of code to about 200K as Sling has replaced many of modules that satisfied the Enterprise Content Management use cases. As a result, the code quality, scalability and performance have all risen whilst the memory footprint of production JVM's has halved. Perhaps the most startling impact has been the new ease with which UX designers and UI developers are able to work with the framework, where previously the Java web environment had precluded a UX/UI driven rapid development cycle.

Sakai 3 based on Sling will be going into production at the University of Cambridge by December 2009, with a number of other early adopters. For more information see an early screencast or look at the project site (frontend, backend) or live demo 

License: ECL2/Apache2

Day (http://www.day.com)

Sling powers Day's entire CQ5 family of content management products (Web Content Management, Social Collaboration, Digital Asset Management), and is included in Day's CRX content repository, which is itself based on Jackrabbit.

Quite a few high profile mission critical websites are powered by CQ5 (or by previous CQ versions) - Day's 
customer list mentions a few.

CQ5 has been very well received by the press and by analysts, and Sling has played a major part in this success, by enabling the CQ5 development team to create robust and higly modularized software very efficiently.

License: Commercial product
 
 
   
Change Notification Preferences
   

   View Online
   |
   View Change
  |
   Add Comment









[CONF] Apache Sling Who is using Sling ?

2009-08-27 Thread confluence







 Who is using Sling ?
 Page edited by Alexander Klimetschek

 added note about contribution of sling by day software
  
 added note about contribution of sling by day software
 
  
 
 Who is using Sling ?

Although Sling is a relatively young project, only recently graduated from the incubator, it already has a growing following of adopters. This page lists those adopters (or at least those that agree to be listed). 

Being on the community wiki, if you are using Sling and your not listed here, please add yourself with a brief description of your project and how you have adopted Sling.


Adopters

Sakai Project (http://www.sakaiproject.org )

The Sakai project is a project that was started in 2004 funded by a research grant from the Andrew Mellon Foundation. Its aim was to create an open source collaborative environment to support teaching and learning and research within Higher Education. The initial project members were Stanford University, University of Michigan, Indiana University and the Massachusetts Institute of Technology. These four were rapidly joined my many other institutions growing to over 160 Universities running Sakai in production today. The project funding has come to an end and sustainability has been achieved as a result of community contributions.

The University of Cambridge (UK) was one of the early adopters and rapidly became involved in shaping the core of Sakai. In early 2008, shortly after Google made its OpenSocial announcement a decision was made to re-architect Sakai to be more user focused and socially aware, building on the collaborative experiences seen in networks like Ning and Facebook. After a period of evaluation Sakai chose Sling as its core technology partly because it had the solid backing of the Apache Foundation, but also because it was based on OSGi for componentised development, solid REST semantics and a solid JCR production backend in Apache Jackrabbit.

This adoption has had a huge impact on the Sakai code base. Although the core development is not complete, Sakai's line count has dropped from about 1.8M lines of code to about 200K as Sling has replaced many of modules that satisfied the Enterprise Content Management use cases. As a result, the code quality, scalability and performance have all risen whilst the memory footprint of production JVM's has halved. Perhaps the most startling impact has been the new ease with which UX designers and UI developers are able to work with the framework, where previously the Java web environment had precluded a UX/UI driven rapid development cycle.

Sakai 3 based on Sling will be going into production at the University of Cambridge by December 2009, with a number of other early adopters. For more information see an early screencast or look at the project site (frontend, backend) or live demo 

License: ECL2/Apache2

Day (http://www.day.com)

Sling started as an internal project at Day Software, and has been contributed to the Apache Incubator in September 2007. It can be considered an important part of Day's software stack, and was open-sourced to make the technical innovations contained therein available to the public.

Sling powers Day's entire CQ5 family of content management products (Web Content Management, Social Collaboration, Digital Asset Management), and is included in Day's CRX content repository, which is itself based on Jackrabbit.

Quite a few high profile mission critical websites are powered by CQ5 - Day's customer list mentions some of them. Day's website runs on CQ5/Sling as well.

CQ5 has been very well received by the press and by analysts, and Sling has played a major part in this success, by enabling the CQ5 development team to create robust and higly modularized software very efficiently.

License: Commercial product
 
 
   
Change Notification Preferences
   

   View Online
   |
   View Change
  |
   Add Comment









svn commit: r808453 - in /sling/trunk/installer/jcr/jcrinstall/src: main/java/org/apache/sling/jcr/jcrinstall/impl/ test/java/org/apache/sling/jcr/jcrinstall/impl/

2009-08-27 Thread bdelacretaz
Author: bdelacretaz
Date: Thu Aug 27 15:19:08 2009
New Revision: 808453

URL: http://svn.apache.org/viewvc?rev=808453view=rev
Log:
SLING-1078 - avoid unnecessary scans in JcrInstaller.run() loop

Added:

sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/RescanTimer.java
   (with props)

sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/RootFolderListener.java
  - copied, changed from r808152, 
sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolderCreationListener.java

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/ScanningLoopTest.java
   (with props)
Removed:

sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolderCreationListener.java
Modified:

sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/JcrInstaller.java

sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/WatchedFolder.java

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/ContentHelper.java

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/FindPathsToWatchTest.java

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MiscUtil.java

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/ResourceDetectionTest.java

Modified: 
sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/JcrInstaller.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/JcrInstaller.java?rev=808453r1=808452r2=808453view=diff
==
--- 
sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/JcrInstaller.java
 (original)
+++ 
sling/trunk/installer/jcr/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/impl/JcrInstaller.java
 Thu Aug 27 15:19:08 2009
@@ -61,6 +61,13 @@
public static final String URL_SCHEME = jcrinstall;
 
private final Logger log = LoggerFactory.getLogger(getClass());
+   
+   /** Counters, used for statistics and testing */
+   private final long [] counters = new long[COUNTERS_COUNT];
+   public static final int SCAN_FOLDERS_COUNTER = 0;
+public static final int UPDATE_FOLDERS_LIST_COUNTER = 1;
+public static final int RUN_LOOP_COUNTER = 2;
+public static final int COUNTERS_COUNT = 3;
 
 /**This class watches the repository for installable resources  
  * @scr.reference 
@@ -110,9 +117,6 @@
 /** Session shared by all WatchedFolder */
 private Session session;
 
-/** Count cycles of our run() method, used in testing */
-private int cyclesCount;
-
 /** Used to stop background thread when deactivated */
 private int deactivationCounter = 1;
 
@@ -125,8 +129,11 @@
 private final Collection NodeConverter converters = new 
ArrayListNodeConverter();
 
 /** Detect newly created folders that we must watch */
-private final ListWatchedFolderCreationListener listeners = new 
LinkedListWatchedFolderCreationListener();
+private final ListRootFolderListener listeners = new 
LinkedListRootFolderListener();
 
+/** Timer used to call updateFoldersList() */
+private final RescanTimer updateFoldersListTimer = new RescanTimer();
+
 protected void activate(ComponentContext context) throws Exception {

log.info(activate());
@@ -170,7 +177,7 @@
// Setup folder filtering and watching
 folderNameFilter = new FolderNameFilter(roots, folderNameRegexp, 
runMode);
 for (String path : roots) {
-listeners.add(new WatchedFolderCreationListener(session, 
folderNameFilter, path));
+listeners.add(new RootFolderListener(session, folderNameFilter, 
path, updateFoldersListTimer));
 }
 
// Find paths to watch and create WatchedFolders to manage them
@@ -204,7 +211,7 @@
 watchedFolders = null;
 converters.clear();
 if(session != null) {
-for(WatchedFolderCreationListener wfc : listeners) {
+for(RootFolderListener wfc : listeners) {
 wfc.cleanup(session);
 }
 session.logout();
@@ -259,7 +266,7 @@
 }
 final int depth = path.split(/).length;
 if(depth  maxWatchedFolderDepth) {
-log.debug(Not recursing into {} due to maxWatchedFolderDepth={}, 
path, maxWatchedFolderDepth);
+log.info(Not recursing into {} due to maxWatchedFolderDepth={}, 
path, maxWatchedFolderDepth);
 return;
 } else {
 final 

svn commit: r808547 - in /sling/trunk/installer: jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/ osgi/installer/src/main/java/org/apache/sling/osgi/installer/ osgi/installer/src/mai

2009-08-27 Thread bdelacretaz
Author: bdelacretaz
Date: Thu Aug 27 17:30:34 2009
New Revision: 808547

URL: http://svn.apache.org/viewvc?rev=808547view=rev
Log:
SLING-1078 - OsgiInstaller ignores invalid and non-bundle jars

Added:

sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/InvalidBundlesTest.java
   (with props)
sling/trunk/installer/osgi/it/src/test/resources/
sling/trunk/installer/osgi/it/src/test/resources/invalid-jar.jar
Modified:

sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java

sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java

sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java

sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java

sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java

sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java

sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java
sling/trunk/installer/osgi/it/pom.xml

Modified: 
sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java?rev=808547r1=808546r2=808547view=diff
==
--- 
sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java
 (original)
+++ 
sling/trunk/installer/jcr/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/impl/MockOsgiInstaller.java
 Thu Aug 27 17:30:34 2009
@@ -47,7 +47,7 @@
 /** Keep track of registered URLS */
 private final SetString urls = new HashSetString();
 
-public void addResource(InstallableResource d) throws IOException {
+public void addResource(InstallableResource d) {
urls.add(d.getUrl());
 recordCall(add, d);
 }
@@ -56,7 +56,7 @@
 return counters;
 }
 
-public void registerResources(CollectionInstallableResource data, String 
urlScheme) throws IOException {
+public void registerResources(CollectionInstallableResource data, String 
urlScheme) {
 // Sort the data to allow comparing the recorded calls reliably
 final ListInstallableResource sorted = new 
LinkedListInstallableResource();
 sorted.addAll(data);
@@ -67,7 +67,7 @@
 }
 }
 
-public void removeResource(InstallableResource d) throws IOException {
+public void removeResource(InstallableResource d) {
if(!d.isEmpty()) {
throw new IllegalArgumentException(InstallableResource must be 
empty for removeResource call);
}

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java?rev=808547r1=808546r2=808547view=diff
==
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/OsgiInstaller.java
 Thu Aug 27 17:30:34 2009
@@ -41,20 +41,23 @@
 *  previously registered/added resources, compares with the new
 *  list and removes resources that have disappeared.
 * 
+ *  Invalid resources are ignored.
+* 
 *  @param data the list of available resources
 *  @param urlScheme identifies the client. All URLs of the 
supplied data
 *  must use this scheme
 */
-   void registerResources(CollectionInstallableResource data, String 
urlScheme) throws IOException;
+   void registerResources(CollectionInstallableResource data, String 
urlScheme);

/** Inform the installer that a resource is available for installation.
 *  also called if the resource has been modified since it was 
registered.
+*  Invalid resources are ignored.
 */
-   void addResource(InstallableResource r) throws IOException;
+   void addResource(InstallableResource r);

/** Inform the installer that a resource is no longer available 
 *  @param r an empty InstallableResource, isEmpty() must return 
true */
-   void removeResource(InstallableResource r) throws IOException;
+   void removeResource(InstallableResource r);

/** Return counters used for