Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion java/serverless_lab1/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,5 @@ fabric.properties

# Maven
log/
target/
target/
dependency-reduced-pom.xml
112 changes: 112 additions & 0 deletions java/serverless_lab1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
## Steps to finish Lab

### Step 1: Install IBMCloud CLI

### Step 2: Deploy the function to IBM Cloud
Run mvn package to create the fat jar
```
» mvn package [16:14:07]
[INFO] Scanning for projects...
[INFO]
[INFO] ---------< com.ibmdevelopersf.serverless_lab1:serverless_lab1 >---------
[INFO] Building serverless_lab1 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ serverless_lab1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ serverless_lab1 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ serverless_lab1 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ serverless_lab1 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ serverless_lab1 ---
[INFO] Surefire report directory: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.ibmdevelopersf.serverless_lab1.ServerlessLab1Test
Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
INFO: exiting ServerlessLab1
Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
INFO: exiting ServerlessLab1
Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
INFO: exiting ServerlessLab1
Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
INFO: exiting ServerlessLab1
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.082 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ serverless_lab1 ---
[INFO] Building jar: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar
[INFO]
[INFO] --- maven-shade-plugin:3.1.0:shade (default) @ serverless_lab1 ---
[INFO] Including com.google.code.gson:gson:jar:2.8.2 in the shaded jar.
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar with /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1-1.0-SNAPSHOT-shaded.jar
[INFO] Dependency-reduced POM written at: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/dependency-reduced-pom.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.398 s
[INFO] Finished at: 2019-11-26T16:14:15-08:00
[INFO] ------------------------------------------------------------------------

```

This creates `serverless_lab1.jar` file in `./target` folder.

### Step 3: deploy the function to IBM Cloud using the CLI
1. Ensure you are logged into IBM Cloud
```$java
» ibmcloud target [16:15:49]


API endpoint: https://cloud.ibm.com
Region: us-south
User: [email protected]
Account: Upkar Lidder's Account (a086ce7d00df4423ab024b123b587e76)
Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
CF API endpoint: https://api.us-south.cf.cloud.ibm.com (API version: 2.142.0)
Org: [email protected]
Space: dev

```

2. deploy the jar file to ibm cloud
```$xslt
» ibmcloud fn action update helloJava target/serverless_lab1.jar --kind java:8 --main com.ibmdevelopersf.serverless_lab1.ServerlessLab1
ok: updated action helloJava

```

3. invoke the function to ensure it works
```$xslt
» ibmcloud fn action invoke helloJava -r
{
"greeting": "Hello World!"
}

```

4. Let's try with a param now
```$xslt
» ibmcloud fn action invoke helloJava -r -p name "upkar lidder"
{
"greeting": "Hello upkar lidder"
}

```
70 changes: 24 additions & 46 deletions java/serverless_lab1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,66 +10,44 @@

<name>serverless_lab1</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<url>https://github.com/IBMDeveloperSF/serverless-labs</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<gson.version>2.8.2</gson.version>
</properties>

<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
<finalName>serverless_lab1</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.ibmdevelopersf.serverless_lab1;

import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

import java.util.logging.Logger;

public class ServerlessLab1 {

protected static final Logger logger = Logger.getLogger("ServerlessLab1");

public static JsonObject main(JsonObject args) {
JsonObject response = new JsonObject();
JsonPrimitive nameArg = args.getAsJsonPrimitive("name");
String result;
if (nameArg == null) {
result = "Hello World!";
} else {
result = "Hello " + nameArg.getAsString();
}
response.addProperty("greeting", result);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blumareks I do have quotes. I forgot to add in the comments :).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


logger.info("exiting ServerlessLab1");
return response;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.ibmdevelopersf.serverless_lab1;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertNotNull;
import static org.hamcrest.MatcherAssert.assertThat;

import com.google.gson.JsonObject;

import org.hamcrest.core.IsEqual;
import org.junit.Test;

/**
* Unit test for simple App.
*/
public class ServerlessLab1Test {

@Test
public void testMainFunctionDoesNotReturnNull() {
JsonObject args = new JsonObject();
JsonObject response = ServerlessLab1.main(args);
assertNotNull(response);
}


@Test
public void testMainFunctionReturnsJsonObject() {
JsonObject args = new JsonObject();
JsonObject response = ServerlessLab1.main(args);
assertThat(response, instanceOf(JsonObject.class));
}

@Test
public void testMainFunctionReturnsHelloWorld() {
JsonObject args = new JsonObject();
final String greeting = "Hello World!";
JsonObject response = ServerlessLab1.main(args);
assertThat(response.get("greeting"), is(notNullValue()));
assertThat(response.get("greeting").getAsString(), is(equalTo(greeting)));
}

@Test
public void testMainFunctionReturnsGreetingsWithName() {
JsonObject args = new JsonObject();
final String name = "Upkar Lidder";
args.addProperty("name", name);
JsonObject response = ServerlessLab1.main(args);
assertThat(response.get("greeting"), is(notNullValue()));
assertThat(response.get("greeting").getAsString(), is(equalTo("Hello "
+ name)));
}
}