A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
tanszek:oktatas:iss_t:evolution_of_software_integration_methods [2023/03/26 18:10] knehez |
tanszek:oktatas:iss_t:evolution_of_software_integration_methods [2024/02/19 08:16] (aktuális) knehez [Native development method] |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | Following figure shows the six classical Software Integration methods. | + | ==== Six standard software integration methods ==== |
- | {{tanszek:oktatas:integration_evolution.png|}} | + | {{tanszek:oktatas:integration_evolution.png?600x0|}} |
Sor 15: | Sor 15: | ||
* How can we communicate with the environment, or the other sw components? | * How can we communicate with the environment, or the other sw components? | ||
- | === Native development method === | + | ==== Native development method ==== |
Although this is the oldest method, but it is still used in many ways today. For example, in embedded systems, or in containers. | Although this is the oldest method, but it is still used in many ways today. For example, in embedded systems, or in containers. | ||
Sor 35: | Sor 35: | ||
* the standard handling of used dependencies (components developed by others) is not uniform, but after 2020, we can use [[https://conan.io/]] or [[https://vcpkg.io/en/]] or the modern [[https://cmake.org/cmake/help/latest/guide/using-dependencies/index.html]]. | * the standard handling of used dependencies (components developed by others) is not uniform, but after 2020, we can use [[https://conan.io/]] or [[https://vcpkg.io/en/]] or the modern [[https://cmake.org/cmake/help/latest/guide/using-dependencies/index.html]]. | ||
- | * RELEASE/DEBUG mode compilation method slows down development | + | * RELEASE/DEBUG mode compilation method slows down development (see: https://godbolt.org) |
* it is possible that the operation of the program is different (erroneous, slower) with another compiler | * it is possible that the operation of the program is different (erroneous, slower) with another compiler | ||
Sor 50: | Sor 50: | ||
* It's very easy to make a mistake - uninitialized data structures - (sanitizers) | * It's very easy to make a mistake - uninitialized data structures - (sanitizers) | ||
+ | ==== Development on a software "Virtual Machine" ==== | ||
+ | {{tanszek:oktatas:informatikai_rendszerek_epitese:vm_fejlesztes.png|}} | ||
+ | It has been widespread since the introduction of the Java VM (1997-). It defines a virtual processor and its associated so-called Byte Code, a set of instructions with its own machine code. It does not translate the source code directly to the CPU, but to the virtual machine's own byte code. Then VM converts the byte code to the machine code of the host system, when running. A virtual machine is usually a native application written in c/c++, which usually works on several platforms. | ||
+ | |||
+ | ** Most famous Virtual Machine implementations ** | ||
+ | |||
+ | * Java Virtual Machine (JVM) | ||
+ | * Nodejs, chromium engine | ||
+ | * Common Language Runtime (CLR): **.NET** system | ||
+ | * Zend Engine: **php** | ||
+ | * Adobe Flash Player: runs swf-s on the web (depricated) | ||
+ | * HHVM: php-based VM in facebook development | ||
+ | * ABAP: runs on the SAP Virtual Machine | ||
+ | * LLVM: this is not the classic VM, but it compiles the source into an llvm byte code, which then turns into native code. "LLVM is designed around a language-independent intermediate representation that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. | ||
+ | |||
+ | **Just in Time (JIT) translation** | ||
+ | * The virtual machine can continuously optimize the application code, the byte code conversion is dynamic. | ||
+ | |||
+ | **Memory management** | ||
+ | * use of pointers is prohibited (generally) | ||
+ | * a special 'Garbage collection' algorithm is responsible for freeing unused memory | ||
+ | |||
+ | **Resource management** | ||
+ | * resource management is the responsibility of the developer | ||
+ | * but the VM has basic resource management capabilities | ||
+ | * Built-in, widely used dependency management is available (maven, pip, npm) | ||
+ | |||
+ | **RELEASE/DEBUG mode compilation method is not distinguished** | ||
+ | * we are running the code in "DEBUG mode", the optimization remains hidden in the VM. | ||
+ | * the speed of the modern VM's are enough for general tasks. | ||
+ | |||
+ | The life cycle of the application (starting, stopping, monitoring) is managed by the virtual machine | ||
+ | |||
+ | **Development of components** | ||
+ | it is ideal for developing collaborative components, as applications running on the VM can easily communicate with each other using TCP/IP network objects can be easily used and modified with the help of self-analysis. (Java reflection) | ||
+ | |||
+ | ==== Middleware development method ==== | ||
+ | |||
+ | {{tanszek:oktatas:informatikai_rendszerek_epitese:jee_fejlesztes.png|}} | ||
+ | |||
+ | Application server development method. It was originally released by Sun Microsystems in 1999 under the name J2EE (Java 2 Enterprise Edition). The standard specification is currently at version 8 (2017): https://javaee.github.io/javaee-spec/ | ||
+ | |||
+ | * It typically uses middleware implemented in Java. [[https://en.wikipedia.org/wiki/List_of_application_servers]] | ||
+ | * famous implementations: Glashfish, Websphere, Weblogic, JBoss, Wildfly | ||
+ | |||
+ | The entire life cycle of applications is managed by middleware. | ||
+ | |||
+ | **Web Container** : managing the life cycle of web components. | ||
+ | |||
+ | **Servlet**: a Java class responsible for standard processing and responses to HTTP requests. Originally responsible for creating dynamic Web content. The generated content is HTML , but more recently JSON. It also includes URL mapping. It was first presented as a concept in 1996! | ||
+ | |||
+ | * Automatically generated servlets can also be created using JSP technology, where the HTML code can also contain Java codes. | ||
+ | * HTTP requests : GET, POST, PUT, DELETE, OPTIONS | ||
+ | |||
+ | <code java> | ||
+ | | ||
+ | public class MyServlet extends HttpServlet{ | ||
+ | | ||
+ | public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException | ||
+ | { | ||
+ | res.setContentType("text/html"); | ||
+ | PrintWriter pw=res.getWriter(); | ||
+ | | ||
+ | pw.println("<html><body>"); | ||
+ | pw.println("Hello from servlet"); | ||
+ | pw.println("</body></html>"); | ||
+ | | ||
+ | pw.close(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | In the first versions, metadata was managed with XML descriptors. In these, it was possible to specify how a class should behave: URL mapping, number of running instances, etc. | ||
+ | |||
+ | ==== ESB - Enterprise service bus ==== | ||
+ | {{tanszek:oktatas:informatikai_rendszerek_epitese:esb.png|ESB}} | ||
+ | |||
+ | Service BUS: Service Oriented Architecture (SOA). It is based on loosely coupled components (services). Analogy of the BUS concept known in networks. | ||
+ | |||
+ | **Main functions**: | ||
+ | |||
+ | * Message forwarding - Message Routing between services | ||
+ | * Service discovery | ||
+ | * Support conversion of different protocols | ||
+ | * Validation - schema validation | ||
+ | * Version management of services | ||
+ | * Monitoring services | ||
+ | * Business process management | ||
+ | |||
+ | **Advantages:** | ||
+ | |||
+ | * easily scalable use - from local service to full enterprise access | ||
+ | * instead of implementing (coding) the integration, creating configurations | ||
+ | * services can be easily started and stopped due to loose connection | ||
+ | |||
+ | **Disadvantages:** | ||
+ | |||
+ | * slow communication | ||
+ | * due to centralization, a complete shutdown may occur in the event of an error | ||
+ | * high complexity in configuration | ||
+ | |||
+ | Known implementations: | ||
+ | |||
+ | Azure Service Bus, Microsoft Biztalk Server, Mule ESB, Oracle ESB, IBM Websphere ESB, JBOSS ESB | ||