[CONF] Apache Sling Who is using Sling ?
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
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 ?
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 ?
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/
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
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