Add example

This commit is contained in:
Lee moon soo 2016-04-17 08:33:29 +01:00
parent 1f1a3b5c48
commit 01a1646861
8 changed files with 403 additions and 10 deletions

View file

@ -132,6 +132,13 @@ Available profiles are
-Pmapr51
```
#### -Pexamples (optional)
Bulid examples under zeppelin-examples directory
Here're some examples:
@ -162,6 +169,7 @@ mvn clean package -Dignite.version=1.1.0-incubating -DskipTests
mvn clean package -Pscalding -DskipTests
```
### Configure
If you wish to configure Zeppelin option (like port number), configure the following files:

View file

@ -706,6 +706,13 @@
</modules>
</profile>
<profile>
<id>examples</id>
<modules>
<module>zeppelin-examples</module>
</modules>
</profile>
<profile>
<id>build-distr</id>
<activation>

64
zeppelin-examples/pom.xml Normal file
View file

@ -0,0 +1,64 @@
<?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.
-->
<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>zeppelin</artifactId>
<groupId>org.apache.zeppelin</groupId>
<version>0.6.0-incubating-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<groupId>org.apache.zeppelin</groupId>
<artifactId>zeppelin-examples</artifactId>
<packaging>pom</packaging>
<version>0.6.0-incubating-SNAPSHOT</version>
<name>Zeppelin: Examples</name>
<description>Zeppelin examples</description>
<url>http://zeppelin.incubator.apache.org</url>
<modules>
<module>zeppelin-example-clock</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<id>enforce</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,170 @@
<?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.
-->
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>zeppelin-examples</artifactId>
<groupId>org.apache.zeppelin</groupId>
<version>0.6.0-incubating-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<groupId>org.apache.zeppelin</groupId>
<artifactId>zeppelin-example-clock</artifactId>
<packaging>jar</packaging>
<version>0.6.0-incubating-SNAPSHOT</version>
<name>Zeppelin: Example application - Clock</name>
<url>http://zeppelin.incubator.apache.org</url>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>zeppelin-interpreter</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>org.apache.zeppelin:zeppelin-interpreter</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<filesets>
<!-- fileset>
<directory>${project.basedir}/../../lib</directory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileset -->
<fileset>
<directory>${project.basedir}/../../helium</directory>
<includes>
<include>${project.artifactId}.json</include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
<!-- plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/../../lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>runtime</includeScope>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
<type>${project.packaging}</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/../../helium/</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}</directory>
<includes>
<include>${project.artifactId}.json</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,113 @@
/*
* 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.zeppelin.example.app.clock;
import org.apache.zeppelin.helium.Application;
import org.apache.zeppelin.helium.ApplicationContext;
import org.apache.zeppelin.helium.ApplicationException;
import org.apache.zeppelin.interpreter.dev.ZeppelinApplicationDevServer;
import org.apache.zeppelin.resource.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Basic example application.
* Get java.util.Date from resource pool and display it
*/
public class Clock extends Application {
private final Logger logger = LoggerFactory.getLogger(Clock.class);
Date date;
boolean shutdown = false;
private Thread updateThread;
public Clock(ApplicationContext context) {
super(context);
}
@Override
public void run(ResourceSet resources) throws ApplicationException {
// Get data from resource args
date = (Date) resources.get(0).get();
// print view template
try {
context().out.writeResource("example/app/clock/clock.html");
} catch (IOException e) {
throw new ApplicationException(e);
}
if (updateThread == null) {
start();
}
}
public void start() {
updateThread = new Thread() {
public void run() {
while (!shutdown) {
// format date
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// put formatted string to angular object.
context().getAngularObjectRegistry().add("date", df.format(date));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// nothing todo
}
date = new Date(date.getTime() + 1000);
}
}
};
updateThread.start();
}
@Override
public void unload() throws ApplicationException {
shutdown = true;
try {
updateThread.join();
} catch (InterruptedException e) {
// nothing to do
}
context().getAngularObjectRegistry().remove("date");
}
/**
* Development mode
*/
public static void main(String[] args) throws Exception {
LocalResourcePool pool = new LocalResourcePool("dev");
pool.put("date", new Date());
ZeppelinApplicationDevServer devServer = new ZeppelinApplicationDevServer(
Clock.class.getName(),
pool.getAll());
devServer.start();
devServer.join();
}
}

View file

@ -0,0 +1,14 @@
<!--
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.
-->
<h3>{{date}}</h3>

View file

@ -0,0 +1,9 @@
{
type : "APPLICATION",
name : "zeppelin.clock",
description : "Clock (example)",
artifact : "zeppelin-examples/zeppelin-example-clock/target/zeppelin-example-clock-0.6.0-incubating-SNAPSHOT.jar",
className : "org.apache.zeppelin.example.app.clock.Clock",
resources : [[":java.util.Date"]],
icon : '<i class="fa fa-clock-o"></i>'
}

View file

@ -81,18 +81,15 @@ public class DependencyResolver extends AbstractDependencyResolver {
return loadFromMvn(artifact, excludes);
} else {
LinkedList<File> libs = new LinkedList<File>();
libs.add(new File(artifact));
libs.add(new File(getPath(artifact)));
return libs;
}
}
public List<File> load(String artifact, Collection<String> excludes, String destPath)
throws RepositoryException, IOException {
List<File> libs = new LinkedList<File>();
if (StringUtils.isNotBlank(artifact)) {
libs = load(artifact, excludes);
private String getPath(String path) {
if (path.startsWith("/")) {
return path;
} else {
// find home dir
String home = System.getenv("ZEPPELIN_HOME");
if (home == null) {
@ -102,11 +99,22 @@ public class DependencyResolver extends AbstractDependencyResolver {
home = "..";
}
return home + "/" + path;
}
}
public List<File> load(String artifact, Collection<String> excludes, String destPath)
throws RepositoryException, IOException {
List<File> libs = new LinkedList<File>();
if (StringUtils.isNotBlank(artifact)) {
libs = load(artifact, excludes);
for (File srcFile : libs) {
File destFile = new File(home + "/" + destPath, srcFile.getName());
File destFile = new File(getPath(destPath), srcFile.getName());
if (!destFile.exists() || !FileUtils.contentEquals(srcFile, destFile)) {
FileUtils.copyFile(srcFile, destFile);
logger.info("copy {} to {}", srcFile.getAbsolutePath(), destPath);
logger.info("copy {} to {}", srcFile.getAbsolutePath(), getPath(destPath));
}
}
}