Primeira aplicação (Avalanche - framework de aplicações para Java)

Primeira aplicação (Avalanche - framework de aplicações para Java)


"Avalanche - framework de aplicativos para Java" - implementação da tecnologia apagando as diferenças entre
chamadas de código local e remota. Tolerância a falhas, escalabilidade,
modificabilidade, disponibilidade contínua vem com ótimos bônus.


Todas as linguagens de programação sugerem começar a escrever um programa de saída simples.
Olá mensagens do mundo. Este exemplo não é adequado para demonstrar a funcionalidade
recursos do "Avalanche - framework de aplicativos para Java", já que chamar esse exemplo é sempre
retorna a mesma string e não permite identificar a fonte que retornou esse
resultado.


Para o primeiro aplicativo, você precisa implementar duas classes (função e aplicativo), uma
interface (adaptador de função) e uma página JSP para exibir o resultado. Projetado por
o aplicativo será executado no Tomcat.


Implementação de Classe de Função - DemoFunction


Não há nada de especial na classe de implementação da função, é uma classe Java regular. Como
classe de função qualquer classe pode ser usada. Deixe a classe de demonstração da função
retorna as seguintes informações do sistema operacional: PID do processo e nome do servidor;
versão do sistema operacional; nome do sistema operacional.


Código de classe 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
AvalancheRemote.
RMI Java,
:


  • ( — DemoFunction)
    ( — DemoAdapter)
  • ( — DemoAdapter)
    (, DemoFunction), ,
    .

, .


— 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 :


  • <interface>,
  • <connector>, .

RMI


RMI


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

:


  • localhost
  • 23000 RMI Remote Server
  • rmi-connector

<connector>


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

:


  • rmi-connector
  • 23000 RMI Remote Server
  • <publish> info-function , info-function info

HTTP


HTTP


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

:


  • localhost
  • 8080 HTTP Server
  • demo
  • connector AvalancheServlet
  • http-connector

<connector>


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

:


  • http-connector
  • <publish> info-function , info-function info

! 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

Source: https://habr.com/ru/post/pt477350/


All Articles