Tuesday, May 15, 2012

Setup WSO2 Deployment Synchronizer in WSO2 Application Server

This post describes how to setup Deployment Synchronizer for a WSO2 Application Server cluster. The process would be the quite the same for WSO2 Enterprise Service Bus (ESB) as well. Here, we are going to have two AS cluster nodes (master, and one slave) with a shared registry (WSO2 Governance Registry).

Deployment Synchronizer (DepSync) is a recent addition to WSO2 products. It provides the ability to sync the product cluster. We use it to keep the axis2 repository of our products (by default, it's product-home/repository/deployment/server/) in sync between all the cluster nodes. Since axis2 repository includes the user-uploaded service archives, modules, service metadata etc, it's important that all the cluster nodes have the same content. DepSync takes care of this.

Pre-requisites:
WSO2 Application Server 4.1.2+, and Goverance Registry.

  • First, follow the instructions in Application Server documentation on Clustering Configuration to setup a basic cluster environment.  Usually, you will need a shared registry for your production deployment. But for testing purposes of WSO2 Application Server, you may ignore this step. This is needed for DepSync in WSO2 ESB though.
  • Enable the "State Replication Configuration" for both nodes as shown here. That is  done by setting the enable attribute value of clustering element to true in axis2.xml file. axis.xml file can be found at AS-HOME/repository/conf/axis2.xml (Starting from AS 4.5.0 ( 4.1.2+) the axis2.xml is located at AS-HOME/repository/conf/axis2/axis2.xml)

<clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="true">

  • Now, you have a Master AS node, a Slave AS node, and a shared registry. The Master node will act as a Registry Read-Write (RW) Node, and the slave node will act as a Registry Read-only node.

There are two mechanisms for deployment synchronizing. One is a SVN-based mechanism, and the other is Registry-based mechanism.

SVN-based Deployment Synchronizer

SVN-based deployment synchronizer uses a Subversion repository to sync the contents in the sync directory (the axis2 repo directory, AppService-Home/repository/deployment/server,  by default). This includes several steps compared to registry-based depsync, but is efficient and high in performance.
What happens here is that when there are changes to the contents of axis2 repo directory, the Read-Writw nodes commits those to the Subversion repository. Then, this node sends a cluster message to all other (slave) nodes specifying the repo is updated. When these nodes receive the message, they updates there axis2 repo directory with what's in the svn repository.

  • Download and install SVNKit implementation as described in in this JIRA ESBJAVA-950.  Download the properly bundled svnkit bundle or just get the one available in the JIRA (svnClientBundle-1.0.0.jar). Make sure you have read the svnkit license. We do not ship svnkit by default because of licensing incompatibilities on re-distributions. This is an optional step, but it's highly recommended that you do this. If svnkit is not there, DepSync can use the SVN installed on your machine. But this default subversion implementation is not suitable for production. You need to copy this to repository/components/dropins/.

  • Now, you need to have a svn repository. You may use a existing svn repository, or create one locally. If you are in Linux, you can simply create a repository by following the command. 







svnadmin create /home/kasun/mylocalsvnrepo
For further information setting up svn repository, refer this link.

  • Now, you may use file:// protocol rather than setting up http:// url for the repo (by using a webserver like Apache) if the repo will be in local system. For example, you can do a manual checkout of the repository by using the command `svn checkout file:///home/kasun/mylocalsvnrepo/`

  • Next, we have to set the DepSync config in carbon.xml file located in AppService-Home/repository/conf/carbon.xml. Add the following xml content to carbon.xml of AppServer Master node. 
<DeploymentSynchronizer>
        <Enabled>true</Enabled>
        <AutoCommit>true</AutoCommit>
        <AutoCheckout>true</AutoCheckout>
        <RepositoryType>svn</RepositoryType> 
        <SvnUrl>file:///home/kasun/mylocalsvnrepo/</SvnUrl>         
        <!-- <SvnUrl>http://svnrepo.example.com/repos/</SvnUrl> -->            
        <SvnUser>kasun</SvnUser>
        <SvnPassword>password</SvnPassword>
        <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
    </DeploymentSynchronizer>

I setup a local svn repo, and didn't set any user-passwords. So, SvnUser and SvnPassword is not effective in this scenario.

Here's an explanation on the options.


  • Auto Commit - Allows to perform commit operations automatically.
  • Auto Checkout - When this option is selected, an additional option named "Use Eventing" will be enabled.
  • Use Eventing - Allows to trigger checkout actions on registry events. This is not needed most of the time.
  • Synchronization Period - Synchronizer will get initialized and start running periodically as specified in this parameter. Default is 10 seconds.
  • Now, add the following content to the AppServer slave node(s).
<DeploymentSynchronizer>
        <Enabled>true</Enabled>
        <AutoCommit>false</AutoCommit>
        <AutoCheckout>true</AutoCheckout>
        <RepositoryType>svn</RepositoryType>
        <SvnUrl>file:///home/kasun/mylocalsvnrepo/</SvnUrl>
        <!-- <SvnUrl>http://svnrepo.local.com/repos/</SvnUrl> -->                
        <SvnUser>kasun</SvnUser>
        <SvnPassword>password</SvnPassword>
        <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
    </DeploymentSynchronizer>


If you look closely, the only two differences between these two configs is that in slave nodes, we set AutoCommit to false, and AutoCheckout to true.

  • Now, deployment synchronizer is setup. Start greg, and the two AS nodes You'll see that when you do an operation like uploading a service to master node, the service archive get synced to slave nodes.

Registry-based DeploymentSynchronizer

Setting up a registry-based depsync is quite easy compared to svn-based depsync. There are two ways to enable this.Home/repository/conf
  1. Via carbon.xml configuration file
  2. Via DeploymentSynchronizer UI

Registry-based depsync via carbon.xml

  • If you have added any config at svn-based depsync, uncomment/remove those.
  • Add the following configuration to the AppServer Master node's carbon.xml file located in AppService-Home/repository/conf/carbon.xml.
<DeploymentSynchronizer>
        <Enabled>true</Enabled>
        <AutoCommit>true</AutoCommit>
        <AutoCheckout>false</AutoCheckout>
    </DeploymentSynchronizer>

  • For slave nodes, add the configuration above but with AutoCommit set to to false, and AutoCheckout set to true.


Registry-based depsync via UI

Start the master and slave instances of AS, and go to the management console from the browser.  If you configured the nodes for master and slave with port Offsets 1 and 2 respectively, the possible link would be https://localhost:9444/carbon/deployment-sync/index.jsp.


  • Log in to the master node, and go to Configure -> Deployment Synchronizer via left pane. 


  • Check "Auto Commit", and click on enable.


  • Now go the management console of the Slave node. (https://localhost:9445/carbon/deployment-sync/index.jsp)
  • There, check "Auto Checkout", and click on enable.



There's no need of doing any changes to greg instance.
Now, deployment synchronizer is setup. Start greg, and two AS nodes and see how it goes. You'll see that when you do an operation like uploading a service to master node, the service archive get synced to slave nodes.


Saturday, April 28, 2012

Officially a DocBook Mentor for Google Summer of Code 2012












I have got the opportunity to be a mentor for DocBook organization under Google Summer of Code 2012. I was a former participant of Google Summer of Code 2010, and 2011. In 2010 I worked with DocBook as a student with my mentor David Cramer where I developed the DocBook WebHelp output format. I always fascinated contributing to an Open-Source project, so it was a big achievement for me. I kept contributing to it which made me a part of the community, and a Committer for the project.

As many of you probably know, Google Summer of Code is an annual program administered by Google, in which Google sponsor students to complete a free and open-source software coding project. This is eighth iteration of GSoC. Most of the giants in Open-Source has been part of it including GNUGentooApacheKDEUbuntu, Mozilla with student participants from all over the world.

DocBook has secured five slots this time. We had enough resources to mentor five slots, on top of that there were five good proposals to mentor for. Fortunately, there wasn't any issue with de-duplication or from anything for that matter, so all five were selected into DocBook. This time, as usual, Richard, and Stefan Seefeld are the org admins. Stefan Seefeld, David, Jirka, Steve, and me are primary mentors for the five students while Stefan Hinz, and Peter Desjardins will be co-mentors for the two selected webhelp proposals.
Yes, two proposals were for WebHelp. That made this year's program more exciting. The two students were, Visitha, from University of Moratuwa, Sri Lanka (my Alma Mater), and Arun, from PES Institute of Technology Bangalore, India. There were overlap between them, so we had to sorted those out first before selecting both.

I found Visitha during the Google Summer of Code meetup at University of Moratwa we, past Sri Lankan gsocersorganized. Buddhi, who also attended that meetup has selected into DocBook. It's so glad to hear that people appreciating the effort we put there, and that it actually meant a lot for most.

I must mention Gihan Chanuka here. He contacted me on last January where he wanted to contribute to DocBook outside of GSoC. He has been asking various questions he had while trying out DocBook. Though he wasn't able to do that, he was a good candidate for GSoC. I am delighted that he also got selected into flying colors. Of course there is a long way to go from selecting to completion, but when it comes to GSoC, selection is a special milestone to pass.

Hoping to have a great time being a mentor this year!

Wednesday, April 11, 2012

Google Summer of Code meetup at University of Moratuwa


Google Open-Source blog has provided a coverage report for the Google Summer of Code meetup we held at University of Moratuwa on March 17th 2012  . The session has caught the eyes of Stephanie Taylor, and Carol Smith who are from The Google Open Source Programs Office, and showed interest to make it to a blog post.
It can be found at the following link. The content is provided below.
http://google-opensource.blogspot.com/2012/04/moratuwa-sri-lanka-google-summer-of.html

GSoC 2012 Logo. Image credits: Google Inc.

Special thanks goes to Dr. Chandana Gamage, Dr. Shehan Perera, and Ms. Vishaka Nanayakkara for providing your fullest support for the session. Thanks to all my friends including Nisansa, Pradeeban, Thilanka, Shelan, Subash, Suho, IsuruU, Nirmal who contributed to make this a success.
I heard the department is giving 10 marks for students in 3rd year who get selected into Google Summer of Code. That's great news since it will motivate the students a lot.

-----------------------------------------------------------------------------------------------------------------

We held our fifth Google Summer of Code meetup in the Moratuwa, Sri Lanka area on March 17th. We had enormous support from the Department of Computer Science & Engineering staff at theUniversity of Moratuwa to make it a full scale session covering many of the aspects of the program that are important to students. We had almost 150 students (a record high) in the morning introductory sessions and around 40 students during the afternoon sessions that were geared more toward second and third year university students.

Kathiravelu Pradeeban delivered an excellent 80 minute Google Summer of Code information presentation focusing on general open source fundamentals from how to communicate within open source communities to proper email/IRC etiquette to open source culture. He also discussed general information about Google Summer of Code such as important dates for the program, how to apply, guidelines on how to write project proposals, and some ideas to think about when deciding if a project is a good fit for you. In later sessions there was more of a focus on open source technologies with demos on how to effectively use these technologies for open source development work.


The students were very excited about the program, and asked many questions both publicly and to us individually after the session ended. We tried to clear up doubts students had about their own ability levels and encouraged them to participate by showing some of the great opportunities of working on a real-life project rather than the fake projects that they do at university most of the time. We also explained about the value of having connections all around the world and the spiritual happiness open source projects bring in general. Those of us that had participated as students with Google Summer of Code shared our experiences including one participant whose Google Summer of Code project caught the eye of a well known IT company who hired him.

Good luck to those students currently applying for Google Summer of Code!

By Kasun Gajasinghe, former Google Summer of Code student for DocBook Project and Gentoo Linux, 2012 DocBook Project mentor  

------------------------------------------------------------------------------------------------------------------

Saturday, March 17, 2012

DocBook WebHelp UI features by screenshots!

I wrote this blog post to show some of the UI features provided by DocBook WebHelp. So, following is a set of screenshots I took which which is how webhelp will look like in the next release. The next release would probably be versioned as 1.77.x. These are taken from revision r9240 on 2012-03-16. You may download the latest snapshot from DocBook snapshots site. You may download the latest release here.

A chunked output page docbook webhelp. It includes a header in top with a company logo, Contents, and Search panes at left side; the real contents in the right larger section; And some minor but useful features at top-right corner. The browser is Chromium/Google Chrome 16. Click on the screenshot for a larger view.

You may hide/unhide the left sidebar by clicking on  SIDEBAR at top-right corner in the page. Isn't that a easier way to read the contents? or do you prefer the default way? For larger monitors the effect is minimal!


A zoomed view the Contents pane in left. This shows the Table of Contents of the documentation, broken down by chapters/sections. You can configure the number of tree levels if you think it's necessary.

Plain search view. You can turn on/off the Search Highlighter provided. Try it yourself!


A typical search results section.  Read here to understand how the search result summaries appeared! And, we provide search scoring/rating mechanism for better searching.
A search with several words. WebHelp displays the results for the whole query, as well as for individual words which is nicely sectioned as shown above.



Sunday, February 5, 2012

Installing Gentoo from a LiveCD (SystemRescueCD)

This is a guide for you to install Gentoo Linux in a much easier way than using the Minimal Installation CD (install-x86-minimal-<release>.iso). By using this way, you can skip the first three parts and start with part 4 in the "Installing Gentoo" section of Gentoo Linux Handbook. (The link is for the x86 architecture. For other archs, refer here.) I'm going to aware on installing Gentoo by using SystemRescueCD live cd by this blog post.

Why I choose to use this method? Firstly, because I didn't know that it's this easy. The other one is I was stuck at setting up a WPA protected Wifi connection via command-line. Believe me when I tell you that configuring a WPA protected WiFi network via command-line is a nightmare. The net-setup only support WEP, and no WPA. You have to use wpa_supplicant for that. While I'm thanking for the hard work of wpa_supplicant developers, they really should think on automating this or at least writing a good documentation. After couple of hours of trying I got fed up. Someone from #gentoo IRC suggested me to use SystemRescueCD. With this you don't have to worry about setting up network connection. You can simply use the live cd's internet connection. NetworkManager takes care of all the needed details. You just need the SSID (The wifi network name), and the WPA password. Here,

SystemRescueCD is also a Gentoo based live cd, and provides enough graphical user interface to do the installation. It has XFCE Desktop Environment with shortcuts to the most needed apps (GParted, networkmanager, Terminal, Firefox etc.) in the bottom panel.


  • First, download it from http://www.sysresccd.org/Download
  • Now, burn it to a CD, or make a bootable USB-stick. The choice is upto you. In this case, I preferred CD because I believe that this will be useful in future too.
  • Do the needful, and boot from your SystemRescueCD. Choose the default (first) option when it asks on what kernel to boot. The interface looks almost like GRUB. See the screenshot.

  • Just wait until it provides the command prompt. What? No GUI? Yes, there is. Make sure you read the message just above the prompt as well. Now use one of the following commands to load the UI.
wizard
startx 
Both of these worked for me.
  •  Now, you will see the xfce desktop getting loaded. Now, setup the network connection via NetworkManager ui client. It's at the bottom-right side. For wireless connections, right-click on it -> 'edit connections' -> wireless tab -> press 'Add' -> Provide SSID (the network name), and set password if necessary. Save and close it. Click on NetworkManager. Click on your connection. You should be connected to the network now. \yay/  

  • Then, just load the Terminal, and you may proceed with part 4 in Gentoo handbook as I told you before. There are very few changes to the commands with this approach. Those are listed under Installation from non-Gentoo LiveCDs. I will brief those here too.
  • To make your life further easier - For part 4, "Preparing the Disks" you may just use GParted that comes with System Rescue CD. Which is in my opinion, highly reliable because if you made mistake with the commands, you may gonna get screwed.
  • At the end of it, make sure you install a desktop environment like GNOME or KDE too. Otherwise you will end up in a Gentoo command prompt anyway. The good news is you can always boot in to the system rescue cd, and continue the installation later on. I learned that I have to install a DE this way ;-). You wanna know how to do this "continuation" after a machine a reboot? Read on.

Changes to the commands

Following is just for the sake of future reference for me.

Mounting of /proc should be done at part 6, not part 4.

When you're ready to unpack the stage tarball in part 5you will need to use a different tar command to ensure that proper group IDs are enforced on the unpacked stage:


# tar --numeric-owner -xvjpf stage3-*.tar.bz2

Now, when you are asked to mount /proc system in part 6, issue the following command instead:

# mount -o bind /proc /mnt/gentoo/proc

Once you're ready to chroot into your unpacked stage in part 6, you will need to use a different chroot command sequence. This ensures that your environment variables are properly setup.

# chroot /mnt/gentoo /bin/env -i TERM=$TERM /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"

That's it. Other commands in the handbook should be the same. 
Following section describes you how to continue/resume a Gentoo installation in case you are in need of it. 


Resume/Continue a Gentoo Installation

Say, you've run started Gentoo installation, and run past part 6.  Up to this level, your changes will be persisted such that you can easily restart the installation. But in part 6, you chroot to the new environment, and do the changes there. Gentoo installation takes time. In case a power failure occurred after this step or you missed to do one step in the handbook that you remembered just after rebooting the system, or any other case you may need to get back to the installation where you stopped, and resume from there.

With Gentoo, it's far easier to do this. Do mind that this guide is tested only for installing Gentoo via a live cd only. I haven't tested other scenarios but your may give it a try.

Before starting the work from where you left, you need to do following things. Get to a terminal by booting the live cd. For SystemRescueCD case, use the xfce terminal.
Now, mount your root partition.

  # mount /dev/sda3 /mnt/gentoo

(You may need to mount /boot too. I didn't needed that because I didn't use a separate partition for /boot. # mount /dev/sda1 /mnt/gentoo/boot )

 # mount -o bind /proc /mnt/gentoo/proc
 # mount --rbind /dev /mnt/gentoo/dev

Following set commands are just the chroot procedure:

# chroot /mnt/gentoo /bin/env -i TERM=$TERM /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"

You are good to go now. Enjoy the ride!

==========================================

You may try the following if you are using Gentoo minimal cd. I haven't tested this, so I can't be sure that this works. Let me know in the comments how it goes?

 # mount /dev/sda3 /mnt/gentoo
 # mount /dev/sda1 /mnt/gentoo/boot

 # mount -t /proc none /mnt/gentoo/proc
 # mount --rbind /dev /mnt/gentoo/dev

Following is the chroot procedure:
 # chroot /mnt/gentoo /bin/bash
 # env-update
 # source /etc/profile
 # export PS1="(chroot) $PS1"

Much like to hear about your experience regarding this. Did my blog help you at least a little?

Friday, November 25, 2011

Siddhi: A Second Look at Complex Event Processing Architectures

The paper titled "Siddhi: A Second Look at Complex Event Processing Architectures" has been presented in Proceedings of the Gateway Computing Environments Workshop (GCE) at Supercomputing 2011 in Seattle, WA, USA. Siddhi was a final year project of '07 batch of University of Moratuwa by a group comprising of Suho, Isuru, Subash, and me. Dr. Srinath Perera, and Ms. Vishaka Nanayakkara supervised the project.


The abstract of the paper is as follows -

Today there are so much data being available from sources like sensors (RFIDs, Near Field Communication), web activities, transactions, social networks, etc. Making sense of this avalanche of data requires efficient and fast processing. Processing of high volume of events to derive higher-level information is a vital part of taking critical decisions, and Complex Event Processing (CEP) has become one of the most rapidly emerging fields in data processing. e-Science use-cases, business applications, financial trading applications, operational analytics applications and business activity monitoring applications are some use-cases that directly use CEP. This paper discusses different design decisions associated with CEP Engines, and proposes some approaches to improve CEP performance by using more stream processing style pipelines. Furthermore, the paper will discuss Siddhi, a CEP Engine that implements those suggestions. We present a performance study that exhibits that the resulting CEP Engine Siddhi has significantly improved performance.  Primary contributions of this paper are performing a critical analysis of the CEP Engine design and identifying suggestions for improvements, implementing those improvements through Siddhi, and demonstrating the soundness of those suggestions through empirical evidence.

Goals of this paper are to critically evaluate decisions taken at CEP design and to present Siddhi CEP Engine that incorporates several improvements uncovered at the discussions. To that end, next section will present a survey of CEP Engine design, and Section 3 will describe Siddhi. Thereafter Section 4 will present a performance comparison of Siddhi and Esper, where latter is an open source, established CEP Engine. The primary contributions of this paper are critical analysis of the CEP Engine design and identifying area for improvements, implementing those improvements, and demonstrating the soundness of those suggestions through empirical evidence. The paper describes how those improvements are achieved through a new CEP called Siddhi.


If you like to contribute to the project, join us http://siddhi.sourceforge.net/index.html

Thursday, October 20, 2011

Gentoo Maven Integration - Progress Report

Here's my progress report for the first phase of Gentoo Maven Integration project for 
finishing the work under Google Summer of Code and starting move in to 
a voluntary position. 

The goal of this project was to build maven and it's huge number of 
dependencies from source, and then facilitate the packagers for 
packaging maven-based Java packages. There are two eclasses which will 
facilitate bootstrapping maven along with building maven-based 
packages, and packaging Maven plugins. These eclasses address some 
fundamental issues of incompatibilities between Gentoo build system 
and Maven build system. 

There were two main goals for the project. One is building 
maven-from-source. It is now completed and has been thoroughly tested. 
There are around 40+ ebuilds that are direct dependencies of Maven 
which were packaged/bumped during the project period. General users of 
maven can have the full benefit from this package now. Please file 
bugs at https://bugs.gentoo.org/ if you find any. 

The second phase was a lengthy process and the scope wasn't fit for 
one and half months time. But with mentors' blessing, I've made a 
quite a big progress and was able to emerge a minimal package built 
via native Maven. 

Let me describe the surface details of the second phase. The idea was 
to facilitate the packagers to package maven-based packages. This has 
been a long-time blocker for Gentoo-Java (which extends to more than 
3-4 years). For this phase, we needed several requirements including 
dependency management issues and rewriting of pom.xml to match 
Gentoo's needs. One requirement in it was the need to have a mechanism 
to use the installed system jars instead of downloading the jars from 
maven repos. One another is that pom needs to respect the Gentoo SLOT 
system. Further, configuration details needed to be added to tell the 
JDK and JRE versions needed for building (ie need to add config bits 
to maven-compiler-plugin section in the pom). And, then it needs 
several maven plugins to build packages. There were enormous amount of 
plugins available that most of them need special attention separately. 
For the second phase, the hard part is over. And, as I said, I was 
able to emerge a minimal maven-based implementation. Maven isn't much 
cooperative when it comes to dependency management, but our solution 
worked well. 

Along with that, the first iteration of work is complete. I'm hoping 
to be the maintainer for Maven under Gentoo Java herd for the 
foreseeable future. And, I'm eagerly waiting to wear the Gentoo 
Developer hat one day. I'm interested in knowing the generic plan for 
recruiting developers who come via Summer of Code as well. 

There are few things to be done to bring the use of the Maven 
integration to it's full potential. These are more like plug-ins to 
the core base, and beautifying the process. I need to make new plans 
for these with help from Java herd. 

 * There's only five maven plugins has been packaged. Have a fresh 
look at maven-surefire-plugin. Needs to add all other plugins. 

 * Currently, when MAVEN_PARENTPOM_UNIQUE_ID is set to rewrite 
<parent> node of the pom, it rewrites all the poms in the project 
including sub-modules. The most probable usecase is that rewrite the 
parent element of the top-level/aggregator pom. The configuration bits 
needed are already there (-w option), but the implementation needs to 
be done. 

 * Merge the separate ebuilds of  maven-2.2.1 maven-2.2.1 release in 
to one. There are around 20+ ebuilds dedicated for this. These ebuilds 
probably won't be needed separately so it's ok to merge these 
together. Need to evaluate possibility of issues of having all these 
together. 

Here are some references if you are interested in getting deeper in 
Maven in Gentoo. Feel free to contact me if you like to extend your 
helping hand for the project. I'm at kasunbg +spamfree at gmail.com
 
 * The wiki 1 - Developer and User guide for Maven in Gentoo - 
https://overlays.gentoo.org/proj/java/wiki/Maven_Integration
 * The wiki 2 - Manpage for java-maven-2 eclass - 
http://overlays.gentoo.org/proj/java/wiki/Maven_Eclass_Manpage
 * Repository 1 - gsoc-maven-overlay - 
https://overlays.gentoo.org/svn/proj/java/gsoc-maven-overlay/
 * Repository 2 - Branch for Javatoolkit - 
http://overlays.gentoo.org/proj/java/browser/projects/javatoolkit/branches/kasun/
       * TracBrowser view - 
http://overlays.gentoo.org/proj/java/browser/gsoc-maven-overlay/