Erste Anwendung (Avalanche - Application Framework für Java)

Erste Anwendung (Avalanche - Application Framework für Java)


"Avalanche - Application Framework für Java" - Implementierung der Technologie, die die Unterschiede zwischen
Orts- und Ferncodeanrufe. Fehlertoleranz, Skalierbarkeit,
Modifizierbarkeit und ständige Verfügbarkeit sind mit schönen Boni verbunden.


In allen Programmiersprachen wird empfohlen, zunächst ein einfaches Ausgabeprogramm zu schreiben.
Hallo Weltnachrichten. Dieses Beispiel ist nicht zur Demonstration von Funktionen geeignet
Features von "Avalanche - Application Framework für Java", da der Aufruf dieses Beispiels immer ist
Gibt dieselbe Zeichenfolge zurück und ermöglicht nicht die Identifizierung der Quelle, die diese zurückgegeben hat
Ergebnis.


Für die erste Anwendung müssen Sie zwei Klassen (Funktion und Anwendung) implementieren, eine
Schnittstelle (Funktionsadapter) und eine JSP-Seite zur Anzeige des Ergebnisses. Entworfen von
Die Anwendung wird unter Tomcat ausgeführt.


Implementierung der Funktionsklasse - DemoFunction


In der Funktionsimplementierungsklasse gibt es nichts Besonderes, es handelt sich um eine reguläre Java-Klasse. Als
Funktionsklasse Jede Klasse kann verwendet werden. Lassen Sie die Funktion Demo-Klasse
gibt die folgenden Informationen vom Betriebssystem zurück: PID des Prozesses und Servername;
Betriebssystemversion; Name des Betriebssystems.


Klassencode 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/de477350/


All Articles