Première application (Avalanche - framework d'application pour Java)

Première application (Avalanche - framework d'application pour Java)


"Avalanche - framework d'application pour Java" - implémentation de la technologie effaçant les différences entre
appels par code local et distant. Tolérance aux pannes, évolutivité,
la modifiabilité, la disponibilité continue sont livrées avec de beaux bonus.


Tous les langages de programmation suggèrent de commencer par écrire un programme de sortie simple.
Bonjour les messages du monde. Cet exemple ne convient pas pour démontrer la fonctionnalité
fonctionnalités de "Avalanche - framework d'application pour Java", car appeler cet exemple est toujours
renvoie la même chaîne et ne permet pas d'identifier la source qui a renvoyé ce
résultat.


Pour la première application, vous devez implémenter deux classes (fonction et application), une
interface (adaptateur de fonction) et une page JSP pour afficher le résultat. Conçu par
l'application s'exécutera sous Tomcat.


Implémentation de classe de fonction - DemoFunction


Il n'y a rien de spécial dans la classe d'implémentation de fonction, c'est une classe Java régulière. En tant que
classe de fonction n'importe quelle classe peut être utilisée. Laissez la classe de démonstration de fonction
renvoie les informations suivantes du système d'exploitation: PID du processus et nom du serveur;
version du système d'exploitation; nom du système d'exploitation.


Code 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/fr477350/


All Articles