First application (Avalanche - application framework for Java)

First application (Avalanche - application framework for Java)



"Avalanche - application framework for Java" - implementation of technology erasing the differences between

local and remote code calls. Fault tolerance, scalability,

modifiability, continuous availability come bundled with nice bonuses.







All programming languages ​​suggest starting with writing a simple output program.

Hello world messages. This example is not suitable for demonstrating functional

features of "Avalanche - application framework for Java", since calling this example is always

returns the same string and does not allow to identify the source that returned this

result.







For the first application, you need to implement two classes (function and application), one

interface (function adapter) and one JSP page to display the result. Designed by

the application will run under Tomcat.







Function Class Implementation - DemoFunction



There is nothing special in the function implementation class; it is a regular Java class. As

function class any class can be used. Let the function demo class

returns the following information from the operating system: PID of the process and server name;

operating system version; name of the operating system.







Class Code DemoFunction.java







package ru.funsys.demo.avalanche;

import java.lang.management.ManagementFactory;
import java.util.Hashtable;

public class DemoFunction {

    /**
     *     .<br>
     * <br>
     *      <br>
     * <b>os.name</b> -  ,<br>
     * <b>os.version</b> -  <br>
     *  <b>PID@name</b> -      
     * 
     * @return     
     */
    public Hashtable<String, String> getInfo() {
        Hashtable<String, String> result = new Hashtable<String, String>();
        result.put("os.name", System.getProperty("os.name"));
        result.put("os.version", System.getProperty("os.version"));
        result.put("PID@name", ManagementFactory.getRuntimeMXBean().getName());
        return result;
    }

}
      
      





β€” DemoAdapter



Java, β€” ,

,

. DemoFunction







DemoAdapter.java







package ru.funsys.demo.avalanche;

import java.util.Hashtable;

import ru.funsys.avalanche.AvalancheRemote;

public interface DemoAdapter {

    public Hashtable<String, String> getInfo() throws AvalancheRemote;

}
      
      





, DemoAdapter

AvalancheException.

RMI Java,

:









, .







β€” DemoApplication



DemoApplication β€” getInfo() DemoFunction

DemoAdapter. DemoApplication

getInfo() TXT HTML.







DemoApplication.java







package ru.funsys.demo.avalanche;

import java.util.Enumeration;
import java.util.Hashtable;

import ru.funsys.avalanche.Application;
import ru.funsys.avalanche.AvalancheRemote;

public class DemoApplication extends Application {

    /**
     *      
     */
    private DemoAdapter info;

    /**
     *        
     *      HTML     .
     * 
     * @param html true,    HTML,  false
     * 
     * @return    HTML   
     */
    public String getInfo(boolean html) {
        StringBuilder builder = new StringBuilder();
        if (html) {
            builder.append("<table border=\"1\">");
            builder.append("<tr><th>key</th><th>value</th></tr>");
        }
        try {
            //   
            Hashtable<String, String> result = info.getInfo();

            for (Enumeration<String> enumeration = result.keys(); enumeration.hasMoreElements(); ) {
                String key = enumeration.nextElement();
                String value = result.get(key);
                if (html) {
                    builder.append("<tr><td>").append(key).append("</td><td>").append(value).append("</td></tr>");
                } else {
                    builder.append(key).append(": ").append(value).append("\r\n");
                }
            }
        } catch (AvalancheRemote e) {
            if (html) {
                builder.append("<tr><td>").append("error").append("</td><td>").append(e.getLocalizedMessage()).append("</td></tr>");
            } else {
                builder.append("error").append(": ").append(e.getLocalizedMessage()).append("\r\n");
            }
        }
        if (html) builder.append("</table>");
        return builder.toString();
    }

}
      
      





: ru.funsys.avalanche.Application.







info , , getAdapter(String name) ru.funsys.avalanche.Application. . .







JSP β€” first.jsp



JSP . DemoApplication getInfo c true.







<%@ page import="ru.funsys.demo.avalanche.DemoApplication"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> </title>
</head>
<body>
<h1> </h1>
<jsp:useBean id='DemoApp' scope='application' class='ru.funsys.demo.avalanche.DemoApplication'/>

<%= DemoApp.getInfo(true) %>
<br>

</body>
</html>
      
      





. .







web.xml



web.xml AvalancheServlet, log4j. AvalancheServlet avalanche-config.xml.







<?xml version="1.0" encoding="UTF-8"?>
<!--
web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" 
-->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

    <display-name>Demo Avalanche</display-name>
    <description>
            framework Avalanche
    </description>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <display-name>AvalancheServlet</display-name>
        <servlet-name>AvalancheServlet</servlet-name>
        <servlet-class>ru.funsys.servlet.http.AvalancheServlet</servlet-class>
        <init-param>
            <param-name>avalanche.config</param-name>
            <param-value>${catalina.base}/conf/avalanche-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>avalanche.log4j</param-name>
            <param-value>${catalina.base}/conf/avalanche-log4j.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

</web-app>
      
      





avalanche-config.xml









<?xml version="1.0" encoding="UTF-8"?>
<avalanche name="Demo Application">

    <function class="ru.funsys.demo.avalanche.DemoFunction" name="info-function" description="   " />

    <application class="ru.funsys.demo.avalanche.DemoApplication" name="DemoApp" >
        <adapter class="ru.funsys.demo.avalanche.DemoAdapter" name="info" uri="info-function" />
    </application>

</avalanche>
      
      





<function> <application>. <application> <adapter>, uri (. name <function>).







name <application>, DemoApp id DemoApplication JSP .







DemoFunction



, , REST, SOAP .







"Avalanche β€” application framework for Java" DemoFunction. .







avalanche-config.xml :









RMI



RMI







<interface name="rmi-interface" uri="rmi://localhost:23000/rmi-connector" />
      
      





:









<connector>







<connector class="RMIConnector" name="rmi-connector" port="23000" >
    <publish name="info" function="info-function" />
</connector>
      
      





:









HTTP



HTTP







<interface name="http-interface" uri="http://localhost:8080/demo/connector/http-connector" />
      
      





:









<connector>







<connector class="HTTPConnector" name="http-connector" >
    <publish name="info" function="info-function" />
</connector>
      
      





:









! HTTP , HTTP (Tomcat).







<multipart-config> AvalancheServlet <servlet-mapping> URI web.xml.







web.xml







<?xml version="1.0" encoding="UTF-8"?>
<!--
web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" 
-->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

    <display-name>Demo Avalanche</display-name>
    <description>
            framework Avalanche
    </description>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <display-name>AvalancheServlet</display-name>
        <servlet-name>AvalancheServlet</servlet-name>
        <servlet-class>ru.funsys.servlet.http.AvalancheServlet</servlet-class>
        <init-param>
            <param-name>avalanche.config</param-name>
            <param-value>${catalina.base}/conf/avalanche-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>avalanche.log4j</param-name>
            <param-value>${catalina.base}/conf/avalanche-log4j.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <!-- 50MB max -->
            <max-file-size>52428800</max-file-size>
            <max-request-size>52428800</max-request-size>
            <file-size-threshold>0</file-size-threshold>
        </multipart-config>
    </servlet>

    <servlet-mapping>
        <servlet-name>AvalancheServlet</servlet-name>
        <url-pattern>/connector/*</url-pattern>
    </servlet-mapping>

</web-app>
      
      





, <application> RMIApp HTTPApp. uri <adapter> -/- , .. rmi-interface/info http-interface/info.







avalanche-config.xml RMI HTTP







<?xml version="1.0" encoding="UTF-8"?>
<avalanche name="Demo Application">

    <interface name="rmi-interface" uri="rmi://localhost:23000/rmi-connector" />

    <interface name="http-interface" uri="http://localhost:8080/demo/connector/http-connector" />

    <function class="ru.funsys.demo.avalanche.DemoFunction" name="info-function" description="   " />

    <application class="ru.funsys.demo.avalanche.DemoApplication" name="DemoApp" >
        <adapter class="ru.funsys.demo.avalanche.DemoAdapter" name="info" uri="info-function" />
    </application>

    <application class="ru.funsys.demo.avalanche.DemoApplication" name="RMIApp" >
        <adapter class="ru.funsys.demo.avalanche.DemoAdapter" name="info" uri="rmi-interface/info" />
    </application>

    <application class="ru.funsys.demo.avalanche.DemoApplication" name="HTTPApp" >
        <adapter class="ru.funsys.demo.avalanche.DemoAdapter" name="info" uri="http-interface/info" />
    </application>

    <connector class="RMIConnector" name="rmi-connector" port="23000" >
        <publish name="info" function="info-function" />
    </connector>

    <connector class="HTTPConnector" name="http-connector" >
        <publish name="info" function="info-function" />
    </connector>

</avalanche>
      
      





JSP first.jsp RMI HTTP, id RMIApp HTTPApp .







rmi.jsp







<%@ page import="ru.funsys.demo.avalanche.DemoApplication"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>  - RMI</title>
</head>
<body>
<h1>  - RMI</h1>
<p>
  -  RMI
</p>
<jsp:useBean id='RMIApp' scope='application' class='ru.funsys.demo.avalanche.DemoApplication'/>

<%= RMIApp.getInfo(true) %>

</body>
</html>
      
      





http.jsp







<%@ page import="ru.funsys.demo.avalanche.DemoApplication"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>  - HTTP</title>
</head>
<body>
<h1>  - HTTP</h1>
<p>
  -  HTTP
</p>
<jsp:useBean id='HTTPApp' scope='application' class='ru.funsys.demo.avalanche.DemoApplication'/>

<%= HTTPApp.getInfo(true) %>

</body>
</html>
      
      





, localhost <interface> avalanche-config.xml, .







, .







, , GitHub








All Articles