You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@karaf.apache.org by Andreas Pieber <an...@gmail.com> on 2011/05/03 04:37:51 UTC
Re: svn commit: r1098814 - in /karaf/trunk: assemblies/features/standard/src/main/feature/
shell/http/ shell/http/src/ shell/http/src/main/ shell/http/src/main/java/
shell/http/src/main/java/org/ shell/http/src/main/java/org/apache/ shell/http/src/ma
Except for a missing unit test and some minor issues (comments inline)
this looks great Achim! Thank you :)
Kind regards,
Andreas
On Tue, May 3, 2011 at 12:16 AM, <an...@apache.org> wrote:
> Author: anierbeck
> Date: Mon May 2 22:16:24 2011
> New Revision: 1098814
>
> URL: http://svn.apache.org/viewvc?rev=1098814&view=rev
> Log:
> [KARAF-572] - Command to show all registered servlets and their contexts
>
> Added:
> karaf/trunk/shell/http/
> karaf/trunk/shell/http/pom.xml (with props)
> karaf/trunk/shell/http/src/
> karaf/trunk/shell/http/src/main/
> karaf/trunk/shell/http/src/main/java/
> karaf/trunk/shell/http/src/main/java/org/
> karaf/trunk/shell/http/src/main/java/org/apache/
> karaf/trunk/shell/http/src/main/java/org/apache/karaf/
> karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/
> karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/
> karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java (with props)
> karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java (with props)
> karaf/trunk/shell/http/src/main/resources/
> karaf/trunk/shell/http/src/main/resources/OSGI-INF/
> karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/
> karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml (with props)
> Modified:
> karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml
>
> Modified: karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml
> URL: http://svn.apache.org/viewvc/karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml?rev=1098814&r1=1098813&r2=1098814&view=diff
> ==============================================================================
> --- karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml (original)
> +++ karaf/trunk/assemblies/features/standard/src/main/feature/feature.xml Mon May 2 22:16:24 2011
> @@ -108,6 +108,7 @@
> <bundle>mvn:org.ops4j.pax.web/pax-web-spi/${pax.web.version}</bundle>
> <bundle>mvn:org.ops4j.pax.web/pax-web-runtime/${pax.web.version}</bundle>
> <bundle>mvn:org.ops4j.pax.web/pax-web-jetty/${pax.web.version}</bundle>
> + <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.http/${project.version}</bundle>
> </feature>
> <feature name="http-whiteboard" version="${project.version}" resolver="(obr)" start-level='30'>
> <feature>http</feature>
>
> Added: karaf/trunk/shell/http/pom.xml
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/http/pom.xml?rev=1098814&view=auto
> ==============================================================================
> --- karaf/trunk/shell/http/pom.xml (added)
> +++ karaf/trunk/shell/http/pom.xml Mon May 2 22:16:24 2011
> @@ -0,0 +1,91 @@
Missing ASF Header
> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> + <modelVersion>4.0.0</modelVersion>
> + <parent>
> + <artifactId>shell</artifactId>
> + <groupId>org.apache.karaf.shell</groupId>
> + <version>3.0.0-SNAPSHOT</version>
> + </parent>
> + <groupId>org.apache.karaf.shell</groupId>
> + <artifactId>org.apache.karaf.shell.http</artifactId>
> + <packaging>bundle</packaging>
> + <name>Apache Karaf :: Shell :: Http Commands</name>
> + <version>3.0.0-SNAPSHOT</version>
> + <description>This bundle provides Karaf shell commands to list details of the http service.</description>
> +
> + <properties>
> + <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
> + </properties>
> +
> + <dependencies>
> + <dependency>
> + <groupId>org.apache.karaf.shell</groupId>
> + <artifactId>org.apache.karaf.shell.console</artifactId>
Not sure but shouldn't we set this one to provided too?
> + </dependency>
> +
> + <dependency>
> + <groupId>org.osgi</groupId>
> + <artifactId>org.osgi.core</artifactId>
> + <scope>provided</scope>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.felix</groupId>
> + <artifactId>org.apache.felix.utils</artifactId>
> + <scope>provided</scope>
> + </dependency>
> + <dependency>
> + <groupId>org.ops4j.pax.web</groupId>
> + <artifactId>pax-web-spi</artifactId>
> + </dependency>
Isn't this one provided too?
> + <dependency>
> + <groupId>javax.servlet</groupId>
> + <artifactId>servlet-api</artifactId>
> + <version>2.5</version>
AFAIK we've decided to use versions only in root pom
> + <scope>provided</scope>
> + </dependency>
> + </dependencies>
> +
> + <build>
> + <resources>
> + <resource>
> + <directory>${project.basedir}/src/main/resources</directory>
> + <includes>
> + <include>**/*</include>
> + </includes>
> + </resource>
> + <resource>
> + <directory>${project.basedir}/src/main/resources</directory>
> + <filtering>true</filtering>
> + <includes>
> + <include>**/*.info</include>
> + </includes>
> + </resource>
> + </resources>
> + <plugins>
> + <plugin>
> + <groupId>org.apache.felix</groupId>
> + <artifactId>maven-bundle-plugin</artifactId>
> + <configuration>
> + <instructions>
> + <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
> + <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
> + <Import-Package>
> + !${project.artifactId}*,
> + org.apache.felix.service.command,
> + org.apache.felix.gogo.commands,
> + org.apache.karaf.shell.console,
> + *
> + </Import-Package>
> + <Private-Package>
> + org.apache.felix.utils.version,
> + org.apache.felix.utils.manifest,
> + !*
> + </Private-Package>
> + <_versionpolicy>${bnd.version.policy}</_versionpolicy>
> + </instructions>
> + </configuration>
> + </plugin>
> + </plugins>
> + </build>
> +
> +</project>
> \ No newline at end of file
>
> Propchange: karaf/trunk/shell/http/pom.xml
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
> Added: karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java?rev=1098814&view=auto
> ==============================================================================
> --- karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java (added)
> +++ karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java Mon May 2 22:16:24 2011
> @@ -0,0 +1,47 @@
> +/* Copyright 2011 Achim.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> + * implied.
> + *
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.karaf.shell.http;
> +
> +import java.util.Collection;
> +import java.util.HashMap;
> +import java.util.Map;
> +
> +import org.ops4j.pax.web.service.spi.ServletEvent;
> +import org.ops4j.pax.web.service.spi.ServletListener;
> +import org.osgi.framework.Bundle;
> +
> +/**
> + * @author Achim
I think we have an SCM instead of the @Author Tag?! :)
> + *
> + */
> +public class ServletEventHandler implements ServletListener {
> +
> + Map<Bundle, ServletEvent> servletEvents = new HashMap<Bundle, ServletEvent>();
> +
> + public void servletEvent(ServletEvent event) {
> + servletEvents.put(event.getBundle(), event);
> + }
> +
> + /**
> + * @return the servletEvents
> + */
> + public Collection<ServletEvent> getServletEvents() {
> + return servletEvents.values();
> + }
> +
> +}
>
> Propchange: karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletEventHandler.java
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
> Added: karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java?rev=1098814&view=auto
> ==============================================================================
> --- karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java (added)
> +++ karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java Mon May 2 22:16:24 2011
> @@ -0,0 +1,107 @@
> +/* Copyright 2011 Achim.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> + * implied.
> + *
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.karaf.shell.http;
> +
> +import java.util.Arrays;
> +
> +import javax.servlet.Servlet;
> +
> +import org.apache.felix.gogo.commands.Command;
> +import org.apache.karaf.shell.console.OsgiCommandSupport;
> +import org.ops4j.pax.web.service.spi.ServletEvent;
> +import org.ops4j.pax.web.service.spi.WebEvent;
> +
> +
> +@Command(scope = "web", name = "list", description = "Lists details for war bundles.")
> +public class ServletListCommand extends OsgiCommandSupport {
> +
> + private ServletEventHandler eventHandler;
> +
> + @Override
> + protected Object doExecute() throws Exception {
> +
> + String headers = " ID Servlet Servlet-Name State Alias Url ";
> + System.out.println(headers);
> + for (ServletEvent event : eventHandler.getServletEvents()) {
> + Servlet servlet = event.getServlet();
> + String servletClassName = "";
> + if (servlet != null) {
> + servletClassName = servlet.getClass().getName();
> + servletClassName = servletClassName.substring(servletClassName.lastIndexOf(".")+1, servletClassName.length());
> + while (servletClassName.length() < 28) {
> + servletClassName += " ";
> + }
> + } else {
> + servletClassName = " ";
> + }
> + String servletName = event.getServletName() != null ? event.getServletName() : " ";
> + if (servletName.contains(".")) {
> + servletName = servletName.substring(servletName.lastIndexOf(".")+1, servletName.length());
> + }
> +
> + while (servletName.length() < 23) {
> + servletName += " ";
> + }
should we concat the name if it's longer than 23 chars?
> +
> + String alias = event.getAlias() != null ? event.getAlias() : " ";
> + while (alias.length() < 16 ) {
> + alias += " ";
> + }
again should we concat alias if it's longer than 16 chars? BTW, maybe
using a util method for this "fill" part? Looks quite similar and I'm
sure we require this in more places
> + String[] urls = (String[]) (event.getUrlParameter() != null ? event.getUrlParameter() : new String[] {""});
> + String line = "[" + event.getBundle().getBundleId() + "] [" + servletClassName + "] [" + servletName +"] ["
> + + getStateString(event.getType())+ "] [" + alias + "] [" + Arrays.toString(urls) + "]";
> + System.out.println(line);
> + }
> + return null;
> + }
> +
> + public String getStateString(int type)
> + {
> + switch(type) {
> + case WebEvent.DEPLOYING:
> + return "Deploying ";
> + case WebEvent.DEPLOYED:
> + return "Deployed ";
> + case WebEvent.UNDEPLOYING:
> + return "Undeploying";
> + case WebEvent.UNDEPLOYED:
> + return "Undeployed ";
> + case WebEvent.FAILED:
> + return "Failed ";
> + case WebEvent.WAITING:
> + return "Waiting ";
> + default:
> + return "Failed ";
> + }
> + }
> +
> + /**
> + * @return the eventHandler
> + */
> + public ServletEventHandler getEventHandler() {
> + return eventHandler;
> + }
> +
> + /**
> + * @param eventHandler the eventHandler to set
> + */
> + public void setEventHandler(ServletEventHandler eventHandler) {
> + this.eventHandler = eventHandler;
> + }
> +
> +}
>
> Propchange: karaf/trunk/shell/http/src/main/java/org/apache/karaf/shell/http/ServletListCommand.java
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
> Added: karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml?rev=1098814&view=auto
> ==============================================================================
> --- karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml (added)
> +++ karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml Mon May 2 22:16:24 2011
> @@ -0,0 +1,36 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> +
> + Licensed to the Apache Software Foundation (ASF) under one or more
> + contributor license agreements. See the NOTICE file distributed with
> + this work for additional information regarding copyright ownership.
> + The ASF licenses this file to You under the Apache License, Version 2.0
> + (the "License"); you may not use this file except in compliance with
> + the License. You may obtain a copy of the License at
> +
> + http://www.apache.org/licenses/LICENSE-2.0
> +
> + Unless required by applicable law or agreed to in writing, software
> + distributed under the License is distributed on an "AS IS" BASIS,
> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + See the License for the specific language governing permissions and
> + limitations under the License.
> +
> +-->
> +<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
> +
> + <bean id="eaHandler" class="org.apache.karaf.shell.http.ServletEventHandler" />
> +
> + <service id="servletListener"
> + interface="org.ops4j.pax.web.service.spi.ServletListener"
> + ref="eaHandler" />
> +
> + <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
> + <command name="http/list-servlet">
> + <action class="org.apache.karaf.shell.http.ServletListCommand">
> + <property name="eventHandler" ref="eaHandler" />
> + </action>
> + </command>
> + </command-bundle>
> +
> +</blueprint>
> \ No newline at end of file
>
> Propchange: karaf/trunk/shell/http/src/main/resources/OSGI-INF/blueprint/shell-http.xml
> ------------------------------------------------------------------------------
> svn:mime-type = text/plain
>
>
>