Repository: ambari Updated Branches: refs/heads/trunk 1c46571f9 -> 6d737ddc6
AMBARI-10767 - Views : create Spring app example (tbeerbower) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6d737ddc Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6d737ddc Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6d737ddc Branch: refs/heads/trunk Commit: 6d737ddc6daa9cae302fe79c4063cf1a0a975d6f Parents: 1c46571 Author: tbeerbower <tbeerbo...@hortonworks.com> Authored: Mon Apr 27 14:18:56 2015 -0400 Committer: tbeerbower <tbeerbo...@hortonworks.com> Committed: Mon Apr 27 14:19:08 2015 -0400 ---------------------------------------------------------------------- .../examples/hello-spring-view/docs/index.md | 154 +++++++++++++++++++ ambari-views/examples/hello-spring-view/pom.xml | 130 ++++++++++++++++ .../ambari/view/hello/HelloController.java | 50 ++++++ .../src/main/resources/view.xml | 24 +++ .../src/main/webapp/WEB-INF/Hello-servlet.xml | 33 ++++ .../src/main/webapp/WEB-INF/jsp/hello.jsp | 26 ++++ .../src/main/webapp/WEB-INF/web.xml | 37 +++++ ambari-views/examples/pom.xml | 1 + 8 files changed, 455 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/docs/index.md ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/docs/index.md b/ambari-views/examples/hello-spring-view/docs/index.md new file mode 100644 index 0000000..b621db2 --- /dev/null +++ b/ambari-views/examples/hello-spring-view/docs/index.md @@ -0,0 +1,154 @@ +<!--- +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](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. +--> + +Hello Spring View Example +======== +Description +----- +The Hello Spring view is a very simple view example that uses Spring MVC. Like the HelloWorld view example, it demonstrates the basics of how to write and deploy a view in Ambari but also shows a simple web application using the Spring MVC framework. The Hello Spring view displays a Hello message that is customized based on the currently logged in user. + +Package +----- + +All views are packaged as a view archive. The view archive contains the configuration file and various optional components of the view. + +#####view.xml + +The view.xml file is the only required file for a view archive. The view.xml is the configuration that describes the view and view instances for Ambari. + + <view> + <name>HELLO_SPRING</name> + <label>The Hello Spring View</label> + <version>1.0.0</version> + <instance> + <name>INSTANCE</name> + </instance> + </view> + +The configuration in this case defines a view named HELLO_SPRING that has a single instance. + + +#####HelloController.java + +The HelloController class is the controller for the Spring MVC app. + +Notice that we can access the view context through the servlet context. + + // get the view context from the servlet context + ViewContext viewContext = (ViewContext) request.getSession().getServletContext().getAttribute(ViewContext.CONTEXT_ATTRIBUTE); + + // get the current user name from the view context + String userName = viewContext.getUsername(); + + +For this app, the controller saves a customized greeting to a model attribute. + + // add the greeting message attribute + model.addAttribute("greeting", "Hello " + (userName == null ? "unknown user" : userName) + "!"); + + + +#####WEB-INF/web.xml +The web.xml is the deployment descriptor used to deploy the view as a web app. The Java EE standards apply for the descriptor. We can see that for this example a single servlet is mapped to the root context path. The class for the servlet is the Spring DispatcherServlet. + + <servlet> + <servlet-name>Hello</servlet-name> + <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> + <load-on-startup>0</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>Hello</servlet-name> + <url-pattern>/</url-pattern> + </servlet-mapping> + </web-app> + +#####WEB-INF/hello-spring.xml + +This hello-spring.xml file contains the bean configuration. + + <context:component-scan base-package="org.apache.ambari.view.hello" /> + + <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> + <property name="prefix" value="/WEB-INF/jsp/" /> + <property name="suffix" value=".jsp" /> + </bean> + +In the above servlet.xml file, we have defined a tag <context:component-scan> . This will direct Spring to load all the components from the org.apache.ambari.view.hello package. + +Note that in the HelloController class we return the bean name "hello" which will resolve to the view /WEB-INF/jsp/hello.jsp. + + +#####WEB-INF/jsp/hello.jsp + +The Spring MVC app view for this example will display the customized greeting message saved in the HelloController class. + + <%@ page contentType="text/html; charset=UTF-8" %> + <html> + <head> + <title>Hello</title> + </head> + <body> + <h2>${greeting}</h2> + </body> + </html> + +Build +----- + +The view can be built as a maven project. + + cd ambari-views/examples/hello-spring-view + mvn clean package + +The build will produce the view archive. + + ambari-views/examples/hello-spring-view/target/hello-spring-view-x.x.x.war + + +Deploy +----- +To deploy a view we simply place the view archive in the views folder of the ambari-server machine. By default the views folder is located at ... + + /var/lib/ambari-server/resources/views + +To deploy the Hello Spring view simply copy the hello-spring-view jar to the ambari-server views folder and restart the ambari server. + +Use +----- + +After deploying a view you should see it as a view resource in the Ambari REST API. If we request all views, we should see the HELLO_SPRING view. + + http://<server>:8080/api/v1/views + + { + "href" : "http://<server>:8080/api/v1/views", + "items" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/views/HELLO_SPRING", + "ViewInfo" : { + "view_name" : "HELLO_SPRING" + } + },... + ] + } + + +We can access access the view at ... + + http://c6401.ambari.apache.org:8080/views/HELLO_SPRING/1.0.0/INSTANCE/ + +This should display a greeting customized to for the logged in user. + + http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/pom.xml b/ambari-views/examples/hello-spring-view/pom.xml new file mode 100644 index 0000000..833e25c --- /dev/null +++ b/ambari-views/examples/hello-spring-view/pom.xml @@ -0,0 +1,130 @@ +<!-- + 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. +--> +<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/maven-v4_0_0.xsd"> + <parent> + <groupId>org.apache.ambari</groupId> + <artifactId>ambari-view-examples</artifactId> + <version>2.0.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <artifactId>hello-spring-view</artifactId> + <packaging>war</packaging> + <name>Ambari Hello Spring View</name> + <version>2.0.0-SNAPSHOT</version> + <url>http://maven.apache.org</url> + <properties> + <ambari.dir>${project.parent.parent.parent.basedir}</ambari.dir> + </properties> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.8.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>3.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.ambari</groupId> + <artifactId>ambari-views</artifactId> + <version>[1.7.0.0,)</version> + </dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-server</artifactId> + <version>1.8</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-expression</artifactId> + <version>4.0.5.RELEASE</version> + </dependency> + + </dependencies> + + <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.12</version> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>rpm-maven-plugin</artifactId> + <version>2.0.1</version> + <executions> + <execution> + <phase>none</phase> + <goals> + <goal>rpm</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <configuration> + <webXml>src/main/webapp/WEB-INF/web.xml</webXml> + <packagingExcludes>WEB-INF/lib/ambari-views*.jar</packagingExcludes> + </configuration> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/src/main/java/org/apache/ambari/view/hello/HelloController.java ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/src/main/java/org/apache/ambari/view/hello/HelloController.java b/ambari-views/examples/hello-spring-view/src/main/java/org/apache/ambari/view/hello/HelloController.java new file mode 100644 index 0000000..665e7af --- /dev/null +++ b/ambari-views/examples/hello-spring-view/src/main/java/org/apache/ambari/view/hello/HelloController.java @@ -0,0 +1,50 @@ +/* + * 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. + */ + +package org.apache.ambari.view.hello; + +import org.apache.ambari.view.ViewContext; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.http.HttpServletRequest; + +/** + * Controller for the Hello Spring app view. + */ +@Controller +@RequestMapping(value = "/") +public class HelloController { + + @RequestMapping(method = RequestMethod.GET) + public String printHello(ModelMap model, HttpServletRequest request) { + + // get the view context from the servlet context + ViewContext viewContext = (ViewContext) request.getSession().getServletContext().getAttribute(ViewContext.CONTEXT_ATTRIBUTE); + + // get the current user name from the view context + String userName = viewContext.getUsername(); + + // add the greeting message attribute + model.addAttribute("greeting", "Hello " + (userName == null ? "unknown user" : userName) + "!"); + + return "hello"; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/src/main/resources/view.xml ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/src/main/resources/view.xml b/ambari-views/examples/hello-spring-view/src/main/resources/view.xml new file mode 100644 index 0000000..fcd84a6 --- /dev/null +++ b/ambari-views/examples/hello-spring-view/src/main/resources/view.xml @@ -0,0 +1,24 @@ +<!-- +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. Kerberos, LDAP, Custom. Binary/Htt +--> +<view> + <name>HELLO_SPRING</name> + <label>The Hello Spring View</label> + <version>1.0.0</version> + <instance> + <name>INSTANCE</name> + </instance> +</view> http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/Hello-servlet.xml ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/Hello-servlet.xml b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/Hello-servlet.xml new file mode 100644 index 0000000..6864b84 --- /dev/null +++ b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/Hello-servlet.xml @@ -0,0 +1,33 @@ +<!-- +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. Kerberos, LDAP, Custom. Binary/Htt +--> + +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + <context:component-scan base-package="org.apache.ambari.view.hello" /> + + <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> + <property name="prefix" value="/WEB-INF/jsp/" /> + <property name="suffix" value=".jsp" /> + </bean> +</beans> http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/jsp/hello.jsp ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/jsp/hello.jsp b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/jsp/hello.jsp new file mode 100644 index 0000000..ec7b424 --- /dev/null +++ b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/jsp/hello.jsp @@ -0,0 +1,26 @@ +<!-- +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. Kerberos, LDAP, Custom. Binary/Htt +--> + +<%@ page contentType="text/html; charset=UTF-8" %> +<html> + <head> + <title>Hello</title> + </head> + <body> + <h2>${greeting}</h2> + </body> +</html> http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/web.xml b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..c212207 --- /dev/null +++ b/ambari-views/examples/hello-spring-view/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> + +<!-- +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. Kerberos, LDAP, Custom. Binary/Htt +--> + +<web-app id="WebApp_ID" version="2.4" + xmlns="http://java.sun.com/xml/ns/j2ee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee + http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + + <display-name>Spring MVC Application</display-name> + + <servlet> + <servlet-name>Hello</servlet-name> + <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> + <load-on-startup>0</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>Hello</servlet-name> + <url-pattern>/</url-pattern> + </servlet-mapping> +</web-app> http://git-wip-us.apache.org/repos/asf/ambari/blob/6d737ddc/ambari-views/examples/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-views/examples/pom.xml b/ambari-views/examples/pom.xml index adb76b1..de55ded 100644 --- a/ambari-views/examples/pom.xml +++ b/ambari-views/examples/pom.xml @@ -31,6 +31,7 @@ <modules> <module>helloworld-view</module> <module>hello-servlet-view</module> + <module>hello-spring-view</module> <module>favorite-view</module> <module>phone-list-view</module> <module>calculator-view</module>