sample hp oo web application…sample hp oo web application hp oo 10.x central’s rich api enables...

15
HP OO 10 OnBoarding Kit – Community Assitstance Team Sample HP OO Web Application HP OO 10.x Central’s rich API enables easy integration of the different parts of HP OO Central into custom web applications. This guide looks at some common integration use cases that use the APIs and it includes JSP code examples. Our goal is that this guide, together with the official API Guide, will enable you to quickly incorporate HP OO into your own web applications. Overview This guide provides a review and demonstration of the following features and related APIs: Getting the list of flows a user can run Getting detailed information about a flow, such as description, path, and inputs Running a flow Checking a flow run status List historic flow runs This guide comes with a basic web application, which illustrates the use of the different API calls—we did not focus on UX. The example web application presents a login form. The credentials in the form are used to connect to HP OO. Note If your goal is simply to be able to run a specific flow (known in advance) from your UI and get the result, you can achieve this easily. Simply copy the link to the flow from Central, and put it in an iframe tag in your HTML page without additional coding. It should look similar to the following example: <iframe width="1200" height=300 src="https://myCentral:8443/oo/trigger.html#03e33ce2- f459-4bfe-8b98-08b4b4c4a8ce"></iframe> More details are available in the HP OO Central User Guide. HP Operations Orchestration HP Operations Orchestration (HP OO) is a next generation IT Process Automation solution that is designed from the ground up to increase automation adoption whether in a traditional data center or hybrid cloud environment. OO 10 Community Onboarding Kit This tutorial is part of the onboarding kit created for the OO community in order to make it even faster to learn OO 10. It is both for new OO 10 users, but also for existing OO 9 users who want to know what’s new. The kit contains four persona based learning tracks for administrators, flow authors, end users, and integrators. Each track provides knowledge assets of the following types: Best Practices Videos Tutorials Quick Guides Presentations Links to Manuals

Upload: dotram

Post on 27-May-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

HP OO 10 OnBoarding Kit – Community Assitstance Team

Sample HP OO Web Application

HP OO 10.x Central’s rich API enables easy integration of the different parts of HP OO Central into custom web applications. This guide looks at some common integration use cases that use the APIs and it includes JSP code examples.

Our goal is that this guide, together with the official API Guide, will enable you to quickly incorporate HP OO into your own web applications.

Overview

This guide provides a review and demonstration of the following features and related APIs:

Getting the list of flows a user can run Getting detailed information about a flow, such as description,

path, and inputs Running a flow Checking a flow run status List historic flow runs

This guide comes with a basic web application, which illustrates the use of the different API calls—we did not focus on UX. The example web application presents a login form. The credentials in the form are used to connect to HP OO.

Note If your goal is simply to be able to run a specific flow (known in advance) from your UI and get the result, you can achieve this easily. Simply copy the link to the flow from Central, and put it in an iframe tag in your HTML page without additional coding. It should look similar to the following example:

<iframe width="1200" height=300 src="https://myCentral:8443/oo/trigger.html#03e33ce2-f459-4bfe-8b98-08b4b4c4a8ce"></iframe>

More details are available in the HP OO Central User Guide.

HP Operations Orchestration HP Operations Orchestration (HP OO) is a next generation IT Process Automation solution that is designed from the ground up to increase automation adoption whether in a traditional data center or hybrid cloud environment.

OO 10 Community Onboarding Kit This tutorial is part of the onboarding kit created for the OO community in order to make it even faster to learn OO 10.

It is both for new OO 10 users, but also for existing OO 9 users who want to know what’s new.

The kit contains four persona based learning tracks for administrators, flow authors, end users, and integrators. Each track provides knowledge assets of the following types:

Best Practices

Videos

Tutorials

Quick Guides

Presentations

Links to Manuals

Custom Web Application Integration

HP Operations Orchestration, January 2014

Logging In

The loginForm.jsp file contains an HTML form, which gets user name and password values, which are passed to the index.jsp screen:

The corresponding JSP code is as follows:

1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>

2. <html>

3. <head>

4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

5. <title>Sample OO Web Application</title>

6. </head>

7. <body>

8. Sample OO Web Application<br><br>

9. <strong>Login Details</strong>

10. <form action="index.jsp" method="post">

11. <table border=0>

12. <tr><td>Username:</td><td><input type="text" name="username" style="width:150px"></td></tr>

13. <tr><td>Password:</td><td><input type="password" name="password"

style="width:150px"></td></tr>

14. <tr><td colspan=2><input type="submit" value="Submit"></td></tr>

15. </table>

16. </form>

17. </body>

18. </html>

Custom Web Application Integration

HP Operations Orchestration, January 2014

Getting the List of Flows

We logged in as user1, who is entitled to run specific flows, as you can see in the following screenshot of the index.jsp file:

Before looking at the code behind the page, let’s make a few observations:

The printNextLevel function in line 76 is used to recursively retrieve all the tree items and displays only the relevant flows:

In Line 45, we enable authentication (this client supports Basic Authentication only). In line 46, the function uses a REST API call in order to retrieve a list of content items (flows, folders, operations).

Each item in the list (treeItemVOList) includes the following: ID: the item’s UUID Name: the item’s name Path: the full path to the item, including the item name isLeaf: an indication if the item is not a folder isRunnable: an indication if the item is a flow, runnable by the current user

In line 52, for each received result, it checks if the result is a folder. If the result is a folder, it calls recursively to itself in order to bring its child nodes. If it is a runnable flow, it prints it name out and creates a hyperlink to the flow details page.

When an unauthenticated user accesses the index.jsp, the code in line 71 redirects the user to loginForm.jsp. Line 79 redirects the user back to the loginForm.jsp in the case of authentication failure.

The entire code listing follows below:

1. <%@ page import="sample_portal.OOHttpClientTemplate" %>

2. <%@ page import="org.apache.http.HttpResponse" %>

3. <%@ page import="org.codehaus.jackson.map.ObjectMapper" %>

4. <%@ page import="java.util.List" %>

5. <%@ page import="org.codehaus.jackson.type.TypeReference" %>

6. <%@ page import="com.hp.oo.flowslibrary.client.domain.TreeItemVO" %>

7. <%@ page import="java.io.IOException" %>

8. <%@ page import="java.io.PrintStream" %>

9. <%@ page import="java.io.PrintWriter" %>

10. <%@ page import="java.net.URLEncoder" %>

Custom Web Application Integration

HP Operations Orchestration, January 2014

11. <%@ page import="com.hp.oo.flowinputs.client.domain.FlowInputVO" %>

12. <%@ page import="java.util.Set" %>

13. <%@ page import="java.util.Collections" %>

14. <%@ page import="java.util.Properties" %>

15. <%@ page import="java.io.FileInputStream" %>

16. <%@ page import="org.apache.http.auth.AuthenticationException" %>

17. <%--

18. Created by IntelliJ IDEA.

19. User: eskin

20. Date: 29/12/13

21. Time: 10:47

22. To change this template use File | Settings | File Templates.

23. --%>

24. <%@ page contentType="text/html;charset=UTF-8" language="java" %>

25. <%

26. Object username, password;

27. Properties properties = new Properties();

28. properties.load(OOHttpClientTemplate.class.getResourceAsStream("sample_portal.properties"));

29. username = request.getParameter("username");

30. password = request.getParameter("password");

31. if(username != null) {

32. session.setAttribute("username", username);

33. session.setAttribute("password", password);

34. }

35. else {

36. username = session.getAttribute("username");

37. password = session.getAttribute("password");

38. }

39. %>

40.

41. <%!

42. public void printNextLevel(String rootPath, javax.servlet.jsp.JspWriter out, String username,

String password) throws Exception {

43. ObjectMapper mapper = new ObjectMapper();

44. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

45. ooClient.setBasicAuthentication(true);

46. HttpResponse resp = ooClient.get(username, password, "/oo/rest/flows/tree/level?path=" +

URLEncoder.encode(rootPath));

47. if(resp.getStatusLine().getStatusCode() == 401) {

48. throw new AuthenticationException();

49. }

50. List<TreeItemVO> treeItemVOList = mapper.readValue(resp.getEntity().getContent(), new

TypeReference<List<TreeItemVO>>() {

Custom Web Application Integration

HP Operations Orchestration, January 2014

51. });

52. for(TreeItemVO vo : treeItemVOList) {

53. if(!vo.isLeaf()) {

54. printNextLevel(vo.getPath(), out, username, password);

55. }

56. else if(vo.isRunnable()) {

57. out.print("<li><a href=\"flowDetails.jsp?id=" + vo.getId() + "&name=" +

URLEncoder.encode(vo.getName()) + "\">" + vo.getName() + "</a></li>");

58. }

59. }

60. }

61. %>

62. <html>

63. <head>

64. <title>Sample OO Web Application</title>

65. </head>

66. <body>

67. Welcome to Sample OO Web Application, <%=username%>!<br>

68. <b>Flows:</b><br>

69. <ul>

70. <%

71. if(username == null) {

72. response.sendRedirect("loginForm.jsp");

73. }

74. else {

75. try {

76. printNextLevel("Library", out, (String)username, (String)password);

77. }

78. catch(AuthenticationException ae) {

79. response.sendRedirect("loginForm.jsp");

80. }

81. }

82. %>

83. </ul>

84. <br><a href="runHistory.jsp">View run history</a>

85. </body>

86. </html> public void printNextLevel(String rootPath, javax.servlet.jsp.JspWriter out, String

username, String password) throws Exception {

87. ObjectMapper mapper = new ObjectMapper();

88. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

89. ooClient.setBasicAuthentication(true);

90. HttpResponse resp = ooClient.get(username, password, "/oo/rest/flows/tree/level?path=" +

URLEncoder.encode(rootPath));

Custom Web Application Integration

HP Operations Orchestration, January 2014

91. if(resp.getStatusLine().getStatusCode() == 401) {

92. throw new AuthenticationException();

93. }

94. List<TreeItemVO> treeItemVOList = mapper.readValue(resp.getEntity().getContent(), new

TypeReference<List<TreeItemVO>>() {

95. });

96. for(TreeItemVO vo : treeItemVOList) {

97. if(!vo.isLeaf()) {

98. printNextLevel(vo.getPath(), out, username, password);

99. }

100. else if(vo.isRunnable()) {

101. out.print("<li><a href=\"flowDetails.jsp?id=" + vo.getId() + "&name=" +

URLEncoder.encode(vo.getName()) + "\">" + vo.getName() + "</a></li>");

102. }

103. }

104. }

105. %>

106. <html>

107. <head>

108. <title>Sample OO Web Application</title>

109. </head>

110. <body>

111. Welcome to Sample OO Web Application, <%=username%>!<br>

112. <b>Flows:</b><br>

113. <ul>

114. <%

115. if(username == null) {

116. response.sendRedirect("loginForm.jsp");

117. }

118. else {

119. try {

120. printNextLevel("Library", out, (String)username, (String)password);

121. }

122. catch(AuthenticationException ae) {

123. response.sendRedirect("loginForm.jsp");

124. }

125. }

126. %>

127. </ul>

128. <br><a href="runHistory.jsp">View run history</a>

129. </body>

130. </html>

Custom Web Application Integration

HP Operations Orchestration, January 2014

Running a Flow

This section is divided into two tasks:

1. Getting the flow input details (demonstrated in the flowDetails.jsp file). 2. Running the flow (demonstrated in the runFlow.jsp file).

Task 1: Getting the flow input details The following HTML form is built by the flowDetails.jsp file:

The following overview explains the code behind the screen:

In line 24, the getFlowProperties function is called. The function (lines 93-100) uses the REST API to retrieve flow properties including path and description.

In line 30, a hidden input containing the flow UUID is created. In line 31, an input text field for the run name is created.

By default it is populated with the flow name. In line 37, we use the REST API to get the list of inputs for the specific flow. In lines 41-56, a loop goes through each input returned by the REST API, checks if it is a selection list or text, and

displays the suitable HTML form input. The next lines check if the input is mandatory, and if it is obfuscated. Clicking the Submit button (see Line 83) calls runFlow.jsp, which is explained in the next section.

1. <%@ page import="sample_portal.OOHttpClientTemplate" %>

2. <%@ page import="org.apache.http.HttpResponse" %>

3. <%@ page import="com.hp.oo.flowinputs.client.domain.FlowInputVO" %>

4. <%@ page import="java.util.List" %>

5. <%@ page import="org.codehaus.jackson.map.ObjectMapper" %>

6. <%@ page import="org.codehaus.jackson.type.TypeReference" %>

7. <%@ page import="java.io.IOException" %>

8. <%@ page import="com.hp.oo.flowslibrary.client.domain.FlowPropertiesVO" %>

Custom Web Application Integration

HP Operations Orchestration, January 2014

9. <%--

10. Created by IntelliJ IDEA.

11. User: eskin

12. Date: 30/12/13

13. Time: 11:18

14. To change this template use File | Settings | File Templates.

15. --%>

16. <%@ page contentType="text/html;charset=UTF-8" language="java" %>

17. <html>

18. <head>

19. <title>Sample OO Web Application</title>

20. </head>

21. <body>

22. <strong>Flow:</strong> <%=request.getParameter("name")%><br><br>

23. <%

24. FlowPropertiesVO flowPropertiesVO = getFlowProperties((String) session.getAttribute("username"),

(String) session.getAttribute("password"), request.getParameter("id"));

25. %>

26. <strong>UUID:</strong><%=flowPropertiesVO.getId()%><br><br>

27. <strong>Description:</strong><br><textarea rows=4 cols=50

contenteditable="false"><%=flowPropertiesVO.getDescription()%></textarea><br><br>

28. <strong>Path:</strong><%=flowPropertiesVO.getPath()%>

29. <form action="runFlow.jsp">

30. <input type="hidden" name="flow_uuid" value="<%=request.getParameter("id")%>"/>

31. <strong>Run name:</strong> <input type="text" name="run_name"

value="<%=request.getParameter("name")%>"><br><br>

32. <strong>Inputs:</strong><br>

33. <table border="0">

34. <%

35. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

36. ooClient.setBasicAuthentication(true);

37. HttpResponse resp = ooClient.get((String)session.getAttribute("username"),

(String)session.getAttribute("password"), "/oo/rest/flows/" + request.getParameter("id") +

"/inputs");

38. List<FlowInputVO> flowInputVOList = new ObjectMapper().readValue(resp.getEntity().getContent(),

new TypeReference<List<FlowInputVO>>() {

39. });

40. if(!flowInputVOList.isEmpty()) {

41. for(FlowInputVO vo : flowInputVOList) {

42. %> <tr><td><%=vo.getName()%>:</td>

43. <%

44. if(vo.getType().equals("SelectionList") && !vo.getSources().isEmpty()) {

45. %>

46. <td><select name="<%=vo.getName()%>" <% if(vo.isMultiValue()) { %> multiple <% } %>>

Custom Web Application Integration

HP Operations Orchestration, January 2014

47. <%

48. for(String option : vo.getSources()) {

49. %>

50. <option value="<%=option%>"><%=option%></option>

51. <%

52. }

53. %>

54. </select>

55. <%

56. }

57. else if (vo.isEncrypted()){

58. %>

59. <td><input type="password" name="<%=vo.getName()%>"/>

60. <%

61. }

62. else {

63. %>

64. <td><input type="text" name="<%=vo.getName()%>"/>

65. <%

66. }

67.

68. if(vo.isMandatory()) {

69. %>

70. *

71. <%

72. }

73. %>

74. </td></tr>

75. <%

76. } //end inputs loop

77. } else {

78. %>

79. <tr><td colspan="2">This flow has no inputs</td></tr>

80. <%

81. }

82. %> <tr><td colspan="2">

83. <input type="submit" value="Run"/></td>

84. </tr>

85. </table>

86. </form>

87. </body>

88. </html>

Custom Web Application Integration

HP Operations Orchestration, January 2014

89. <%!

90. private FlowPropertiesVO getFlowProperties(String username, String password, String uuid) throws

Exception {

91. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

92. ooClient.setBasicAuthentication(true);

93. HttpResponse resp = ooClient.get(username, password, "/oo/rest/flows/" + uuid);

94. FlowPropertiesVO flowPropertiesVO = new

ObjectMapper().readValue(resp.getEntity().getContent(), new TypeReference<FlowPropertiesVO>(){

95. });

96. return flowPropertiesVO; //To change body of created methods use File | Settings | File

Templates.

97. }

98. %>

Task 2: Running the Flow Let’s review the code behind the following screenshot of the runFlow.jsp page:

Before listing the entire code, we make the following observations:

In Line 25, a REST call runs the flow with the inputs provided in flowDetails.jsp In line 27, the response status is checked.

– If the status is “created”, a success message is displayed with the run id, retrieved from the response of the REST

call, and two hyperlinks are displayed: 1. View run status. This URL is built by getRunStatusUrl in line 42 (see the next section for details). 2. View run history. This link is built in line 31 and redirects to runHistory.jsp with the corresponding run id.

– Else, an error message is displayed.

Full code listing:

1. <%@ page import="com.hp.oo.flowtriggering.client.domain.FlowTriggeringResultVo" %>

2. <%@ page import="org.apache.http.HttpResponse" %>

3. <%@ page import="org.apache.http.HttpStatus" %>

4. <%@ page import="org.codehaus.jackson.map.ObjectMapper" %>

5. <%@ page import="org.codehaus.jackson.type.TypeReference" %>

Custom Web Application Integration

HP Operations Orchestration, January 2014

6. <%@ page import="sample_portal.ExecuteFlowCallback" %>

7. <%@ page import="sample_portal.OOHttpClientTemplate" %>

8. <%@ page import="java.net.URLEncoder" %>

9. <%--

10. Created by IntelliJ IDEA.

11. User: eskin

12. Date: 30/12/13

13. Time: 14:11

14. To change this template use File | Settings | File Templates.

15. --%>

16. <%@ page contentType="text/html;charset=UTF-8" language="java" %>

17. <html>

18. <head>

19. <title>Sample OO Web Application</title>

20. </head>

21. <body>

22. <%

23. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

24. ooClient.setBasicAuthentication(true);

25. HttpResponse resp = ooClient.post((String)session.getAttribute("username"),

(String)session.getAttribute("password"), "/oo/rest/executions", new ExecuteFlowCallback(request));

26. FlowTriggeringResultVo flowTriggeringResultVo = new

ObjectMapper().readValue(resp.getEntity().getContent(), new

TypeReference<FlowTriggeringResultVo>(){});

27. if(resp.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) {

28. %>

29. Run <%=request.getParameter("run_name")%> launched.<br> Run ID:

<%=flowTriggeringResultVo.getExecutionId()%>

30. <br><a href='<%=getRunStatusUrl(ooClient, flowTriggeringResultVo.getExecutionId())%>'>View run

status</a>

31. <br><a href='runHistory.jsp?id=<%=flowTriggeringResultVo.getExecutionId()%>'>View run history</a>

32. <%

33. } else {

34. %>

35. Run <%=request.getParameter("run_name")%> was not launched

36. <%

37. }

38. %>

39. </body>

40. </html>

41. <%!

42. private String getRunStatusUrl(OOHttpClientTemplate ooClient, String runId ) {

43. StringBuilder strb = new StringBuilder();

44. strb.append(ooClient.getUrlProtocol()).append("://").append(ooClient.getHost()).append(":").

Custom Web Application Integration

HP Operations Orchestration, January 2014

45. append(ooClient.getPort()).append("/oo/drilldown.html#").append(runId);

46. return strb.toString(); //To change body of created methods use File | Settings | File

Templates.

47. }

48. %>

Checking Flow Status

This option utilizes the direct link to the drilldown.html of the Central web application, with the corresponding run id.

This HP OO screen can be used by any application that has the run id and can construct the link (for example, send the link by email).

Note: This page does not allow adding step input values.

Showing Run History

The run history screen presents all the runs that have been started by the user:

Custom Web Application Integration

HP Operations Orchestration, January 2014

Before listing the entire code, we make the following observations:

In line 48, the executions REST call is used to receive the latest 100 runs. In lines 62-75, each run that is triggered by the logged in user is inserted as a new row in an HTML table.

Full code listing:

1. <%@ page import="sample_portal.OOHttpClientTemplate" %>

2. <%@ page import="org.apache.http.HttpResponse" %>

3. <%@ page import="org.apache.commons.io.IOUtils" %>

4. <%@ page import="java.util.List" %>

5. <%@ page import="org.codehaus.jackson.map.ObjectMapper" %>

6. <%@ page import="org.codehaus.jackson.type.TypeReference" %>

7. <%@ page import="com.hp.oo.enginefacade.execution.ExecutionSummary" %>

8. <%@ page import="java.util.Properties" %>

9. <%--

10. Created by IntelliJ IDEA.

11. User: eskin

12. Date: 31/12/13

13. Time: 10:14

14. To change this template use File | Settings | File Templates.

15. --%>

16. <%@ page contentType="text/html;charset=UTF-8" language="java" %>

17. <%!

18. private String getTableCellData(Object data, ServletRequest request, ExecutionSummary

executionSummary) {

19. StringBuilder strb = new StringBuilder();

20. strb.append("<td");

21. if(executionSummary.getExecutionId().equals(request.getParameter("id"))) {

22. strb.append(" bgcolor=yellow");

23. }

24. strb.append(">");

25. if(data != null) {

26. strb.append(data.toString());

27. }

28. else {

29. strb.append("none");

30. }

31. strb.append("</td>");

32. return strb.toString();

33. }

34. %>

35. <html>

36. <head>

37. <title></title>

Custom Web Application Integration

HP Operations Orchestration, January 2014

38. </head>

39. <body>

40. <%

41. String username, password;

42. Properties properties = new Properties();

43. properties.load(OOHttpClientTemplate.class.getResourceAsStream("sample_portal.properties"));

44. username = (String)session.getAttribute("username");

45. password = (String)session.getAttribute("password");

46. OOHttpClientTemplate ooClient = new OOHttpClientTemplate();

47. ooClient.setBasicAuthentication(true);

48. HttpResponse resp = ooClient.get(username, password, "/oo/rest/executions?date=" +

System.currentTimeMillis() + "&pageNum=1&pageSize=100");

49. List<ExecutionSummary> executionSummaryList = new

ObjectMapper().readValue(resp.getEntity().getContent(), new

TypeReference<List<ExecutionSummary>>(){});

50. %>

51. <strong>Latest runs by user <%=username%>:<br><br></strong>

52. <table border=0>

53. <tr>

54. <th>ID</th>

55. <th>Name</th>

56. <th>Start Time</th>

57. <th>End Time</th>

58. <th>Status</th>

59. <th>Flow Path</th>

60. </tr>

61. <%

62. for(ExecutionSummary executionSummary : executionSummaryList) {

63. if(executionSummary.getTriggeredBy().equals(username)) {

64. %>

65. <tr>

66. <%=getTableCellData(executionSummary.getExecutionId(), request, executionSummary)%>

67. <%=getTableCellData(executionSummary.getExecutionName(), request, executionSummary)%>

68. <%=getTableCellData(executionSummary.getStartTime(), request, executionSummary)%>

69. <%=getTableCellData(executionSummary.getEndTime(), request, executionSummary)%>

70. <%=getTableCellData(executionSummary.getStatus(), request, executionSummary)%>

71. <%=getTableCellData(executionSummary.getFlowPath(), request, executionSummary)%>

72. </tr>

73. <%

74. }

75. }

76. %>

77. </table></body></html>

Custom Web Application Integration

HP Operations Orchestration, January 2014

Dependencies

This sample code needs the following jars:

1. From <OO installation folder>/central/lib:

commons-lang-2.6.jar commons-codec-1.6.jar commons-io-2.3.jar commons-logging-1.1.1.jar http-client-4.2.3.jar http-core-4.2.3.jar jackson-core-asl-1.9.7.jar jackson-mapper-asl-1.9.7.jar

2. From <OO installation folder>/central/tomcat/webapps/oo/WEB-INF/lib:

oo-engine-facade-102.185.jar oo-flow-inputs-api-102.221.jar oo-flows-library-api-102.221.jar oo-flow-triggering-api-102.221.jar

3. From the global maven repository:

http://repo1.maven.org/maven2/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar

Running the Example Web Application

1. Download Tomcat. 2. Copy the sample_oo_webapp.war file to the webapps folder. 3. In order to deploy the application, open a command line window and go to <Tomcat installation folder>\bin.

Run the following command: catalina.bat start 4. After the application is up, close it. 5. Edit the sample_portal.properties file (located in <tomcat folder>webapps\sample_portal\WEB-

INF\classes\sample_portal\) and set the following properties: central.host - FQDN of the Central Server central.port – the port the Central server is using for HTTP/HTTPS central.protocol – http or https

6. Start the application again (repeat step #3). 7. Open the following URL http://<the tomcat server you deployed the portal on>:<port>/sample_portal

(for example, http://localhost:8080/sample_portal)

If you have any questions, please post them on the HP OO community forums. We are always interested in your feedback: https://hpln.hp.com/node/21/og/forum/37