<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Software AG Tech Community</title>
    <description>The latest articles on Forem by Software AG Tech Community (@techcommunity).</description>
    <link>https://forem.com/techcommunity</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1122%2F43c2cfd0-8a5e-4bf2-9209-3b86dbfaaa41.jpg</url>
      <title>Forem: Software AG Tech Community</title>
      <link>https://forem.com/techcommunity</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/techcommunity"/>
    <language>en</language>
    <item>
      <title>Microservices Best Practices: Multi-Tenant microservices with Java SDK</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Tue, 08 Oct 2024 11:22:16 +0000</pubDate>
      <link>https://forem.com/techcommunity/microservices-best-practices-multi-tenant-microservices-with-java-sdk-47o7</link>
      <guid>https://forem.com/techcommunity/microservices-best-practices-multi-tenant-microservices-with-java-sdk-47o7</guid>
      <description>&lt;p&gt;Cumulocity IoT is a comprehensive IoT platform that enables device management, data collection, and analysis. The Cumulocity IoT Microservice SDK for Java allows developers to interact with the platform programmatically. Multi-tenancy is a key feature of Cumulocity, allowing multiple independent tenants to coexist on the same platform, each with their own set of resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage of Cumulocity IoT Microservice SDK for Java
&lt;/h2&gt;

&lt;p&gt;The Cumulocity IoT Microservice SDK for Java can be used for a variety of tasks including device management, data collection, sending and receiving measurements, alarms, events, and more. It is designed to simplify the integration of devices and applications with the Cumulocity platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Tenancy in Cumulocity
&lt;/h2&gt;

&lt;p&gt;Multi-tenancy in Cumulocity allows for the separation of data and resources for different tenants (organizations or users) on a single platform instance. Each tenant has its own space where devices, users, applications, and other resources are managed independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case of Cumulocity Multi-Tenant
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; To effectively manage multiple tenants within a single Cumulocity IoT platform instance, ensuring data isolation, security, and efficient resource utilization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; A global manufacturing company, “XYZ Industries,” operates in several regions worldwide, each with its own set of IoT devices, data requirements, and management needs. They want to use Cumulocity IoT to manage their devices, collect data, and perform analytics while ensuring that each region operates independently within the same platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Isolation:&lt;/strong&gt; Each region’s data must be isolated from others to maintain privacy and security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable Dashboards:&lt;/strong&gt; Regions need customized dashboards to monitor their specific devices and KPIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Services:&lt;/strong&gt; The ability to scale services based on the number of devices and data load in each region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Management:&lt;/strong&gt; A central administrator should be able to manage global policies and settings while allowing regional administrators to manage their configurations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency:&lt;/strong&gt; Optimize the use of resources to reduce costs by sharing the same infrastructure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Tenant Structure:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Tenant:&lt;/strong&gt; “XYZ”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-Tenants:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;“North America”&lt;/li&gt;
&lt;li&gt;“Europe”&lt;/li&gt;
&lt;li&gt;“Asia”&lt;/li&gt;
&lt;li&gt;“South America”&lt;/li&gt;
&lt;li&gt;“Africa”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Features and Configuration:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Isolation:&lt;/strong&gt; Each region (sub-tenant) has its own isolated data environment ensuring that data from “North America” is not accessible to “Europe,” and vice versa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable Dashboards:&lt;/strong&gt; Regional administrators can create and customize dashboards tailored to their specific needs, showing relevant data, alerts, and analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Services:&lt;/strong&gt; The platform supports horizontal scaling to accommodate the varying number of devices in each region. Shared subscriptions allow for efficient handling of message loads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Management:&lt;/strong&gt; The central administrator at “XYZ” (root tenant) can define global policies, security settings, and shared services. Regional administrators manage local devices, users, and configurations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency:&lt;/strong&gt; By using a multi-tenant structure, “XYZ” reduces infrastructure costs while maintaining flexibility and scalability for each region.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Resource Utilization:&lt;/strong&gt; Shared infrastructure reduces overall costs while maintaining high performance and reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Security:&lt;/strong&gt; Data isolation and customizable security policies ensure that each region’s data remains secure and private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Scaling services based on regional demand allows for efficient resource management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Each region can operate independently with its custom configurations while adhering to global standards set by the central administration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Control:&lt;/strong&gt; Global policies and settings can be managed centrally, ensuring consistency and compliance across all regions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; The use of Cumulocity’s multi-tenant capabilities allows “XYZ Industries” to efficiently manage their global IoT operations, providing each region with the tools and autonomy they need while maintaining overall control and optimizing resource use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Available Methods within Cumulocity IoT Microservice SDK for Java
&lt;/h2&gt;

&lt;p&gt;The Cumulocity IoT Microservice SDK for Java provides a comprehensive set of APIs. Some of the key APIs and their methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MicroserviceSubscriptionsService&lt;/strong&gt; : Main entry point to the tenant as microservice gets subscribed on a tenant.

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;callForTenant(String var1, Callable&amp;lt;T&amp;gt; var2)&lt;/code&gt;: Within this method any Cumulocity Java SDK API could be called for a specific tenant if a message needs to be returned.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;runForTenant(String var1, Runnable var2)&lt;/code&gt;: Within this method any Cumulocity Java SDK API could be called for a specific tenant if nothing is returned&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;runForEachTenant(Runnable var1)&lt;/code&gt;: Within this method any Cumulocity Java SDK API could be called for all the subscribed tenants and nothing will be returned.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example of Multi-Tenancy with Cumulocity IoT Microservice SDK for Java
&lt;/h2&gt;

&lt;p&gt;Here’s an example of how you might interact with different tenants using the Cumulocity IoT Microservice SDK for Java:&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add the Cumulocity Microservice SDK for Java to your project&lt;/strong&gt;. Ensure you have the SDK dependency in your &lt;code&gt;pom.xml&lt;/code&gt; if you are using Maven:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependencyManagement&amp;gt;
        &amp;lt;dependencies&amp;gt;
            &amp;lt;dependency&amp;gt;
                &amp;lt;groupId&amp;gt;com.nsn.cumulocity.clients-java&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;microservice-dependencies&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;${c8y.version}&amp;lt;/version&amp;gt;
                &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;
                &amp;lt;scope&amp;gt;import&amp;lt;/scope&amp;gt;
            &amp;lt;/dependency&amp;gt;
&amp;lt;/dependencyManagement&amp;gt;
&amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;com.nsn.cumulocity.clients-java&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;microservice-autoconfigure&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;${c8y.version}&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
&amp;lt;/dependencies&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a client for all the subscribed tenants&lt;/strong&gt; :
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; subscriptionService.runForTenant(tenantId, ()-&amp;gt; {
            try {
                //Do the Cumulocity API call for the specified tenant
            }catch(Exception e) {
                //log the error message
            }
        });


return subscriptionService.callForTenant(tenantId, ()-&amp;gt; {
            try {
                 //Do the Cumulocity API call for the specified tenant and return the result
            }catch(Exception e) {
                 //Log the error message as well as return the same
            }
        });


subscriptionService.runForEachTenant(() -&amp;gt; {
        try {

               //Do the Cumulocity API call for each subscribed tenant

        } catch (SDKException exception) {
               //log the error message
        }
    });

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advantages of Multi-Tenancy
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Resource Isolation&lt;/strong&gt; : Each tenant’s data and resources are isolated, ensuring privacy and security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; : Efficiently manage multiple organizations or projects on a single platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency&lt;/strong&gt; : Reduce infrastructure costs by sharing resources among multiple tenants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Management&lt;/strong&gt; : Centralized management of multiple tenants with easy maintenance and updates.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Cumulocity IoT Microservice SDK for Java provides a robust framework for managing IoT devices and data in a multi-tenant environment. Its comprehensive APIs simplify the development process, allowing for efficient and secure management of multiple tenants. Understanding the advantages, limitations, and available methods will enable you to leverage the full potential of the Cumulocity platform in your IoT projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/microservices-best-practices-multi-tenant-microservices-with-java-sdk/297165/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>bestpractices</category>
      <category>iot</category>
      <category>java</category>
    </item>
    <item>
      <title>Scaling Micro-Frontend Reliability: Advanced Techniques in Version Management and Automated Testing</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Mon, 30 Sep 2024 11:05:38 +0000</pubDate>
      <link>https://forem.com/techcommunity/scaling-micro-frontend-reliability-advanced-techniques-in-version-management-and-automated-testing-1l8i</link>
      <guid>https://forem.com/techcommunity/scaling-micro-frontend-reliability-advanced-techniques-in-version-management-and-automated-testing-1l8i</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article is a follow-up to &lt;a href="https://tech.forums.softwareag.com/t/the-power-of-micro-frontends-how-to-dynamically-extend-cumulocity-iot-frontends/266665" rel="noopener noreferrer"&gt;The power of micro frontends – How to dynamically extend Cumulocity IoT Frontends&lt;/a&gt;. Since the original publication, significant changes have occurred, with an increasing number of plugins being created by both Cumulocity teams and the community. As the use of micro frontends within the Cumulocity platform grew, new challenges emerged. One of the most frequently mentioned issues in the micro frontend space is dependency version incompatibility. We’ve addressed this challenge using a set of metadata called the version matrix and Cypress tests. But first, let’s look at what’s changed…&lt;/p&gt;

&lt;h2&gt;
  
  
  What has changed since the first micro frontend article?
&lt;/h2&gt;

&lt;p&gt;A major update to our Web SDK was the deprecation of the &lt;code&gt;@c8y/cli&lt;/code&gt; package. It has been replaced by the &lt;code&gt;@c8y/devkit&lt;/code&gt; package, which now serves as a builder for ng-cli. In simpler terms, instead of handling all commands through our own CLI, we now extend Angular CLI. This means you don’t call &lt;code&gt;@c8y/devkit&lt;/code&gt; directly; instead, all commands start with &lt;code&gt;ng &amp;lt;command&amp;gt;&lt;/code&gt;. For more information about ng-cli, check out the &lt;a href="https://styleguide.cumulocity.com/apps/codex/index.html#/getting-started/quickstart/overview" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt; section.&lt;/p&gt;

&lt;p&gt;Another change is that you no longer declare your exports in &lt;code&gt;package.json&lt;/code&gt;. Instead, they are now defined in &lt;code&gt;cumulocity.config.ts&lt;/code&gt; (which is later compiled to &lt;code&gt;cumulocity.json&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;If you’re ready to build your own plugin, refer to the &lt;a href="https://styleguide.cumulocity.com/apps/codex/index.html#/getting-started/microfrontends/overview" rel="noopener noreferrer"&gt;Microfrontends&lt;/a&gt; documentation for detailed, step-by-step guidance on creating a plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Version matrix
&lt;/h2&gt;

&lt;p&gt;Introduced in Web SDK version 10.19.0, the version matrix is a part of the plugin designed to ensure compatibility between the plugin, Web SDK, and shell API. To use it, simply add it to your &lt;code&gt;cumulocity.config.ts&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Here’s an example of how a version matrix might look (content of &lt;code&gt;cumulocity.config.ts&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default {
  runTime: {
    ...
    versioningMatrix: {
      '2.1.6': {
        sdk: '&amp;gt;=1016.0.0 &amp;lt;1018.0.0',
        api: '&amp;gt;=1016.0.0 &amp;lt;1018.0.0',
      },
      '3.2.1': {
        sdk: '&amp;gt;=1018.0.0',
        api: '&amp;gt;=1018.0.0',
      }
    },
  },
  buildTime: {
    ...
  }
} as const satisfies EnvironmentOptions;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The top-level keys (&lt;code&gt;2.1.6&lt;/code&gt;, &lt;code&gt;3.2.1&lt;/code&gt;) represent the plugin versions, while the &lt;code&gt;sdk&lt;/code&gt; and &lt;code&gt;api&lt;/code&gt; values specify semver ranges of compatible Web SDK and API versions, respectively.&lt;/p&gt;

&lt;p&gt;To illustrate how the version matrix works, let’s try installing version 3.2.1 of a plugin with the above matrix into Cockpit version 1017.0.543. You’ll receive this warning:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux55yr6b5ciy0cp8kchx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux55yr6b5ciy0cp8kchx.png" alt="Plugin installation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, you can still install the plugin, but you’re warned that versions might be incompatible. Some features might not work, or the plugin could fail to load and potentially break your app. This warning won’t appear for Cockpit version 1018.0.0 or higher.&lt;/p&gt;

&lt;h2&gt;
  
  
  E2E testing plugins against shell
&lt;/h2&gt;

&lt;p&gt;While the versioning matrix works almost effortlessly when properly declared, how do we determine which versions are compatible with our plugin? Manual testing is always an option, but it’s time-consuming and prone to human error.&lt;/p&gt;

&lt;p&gt;This concern led us to develop a solution that informs us about incompatibilities between our plugin and the shell app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cypress to the rescue!
&lt;/h3&gt;

&lt;p&gt;The most effective way to ensure our plugin works correctly with a particular shell app (without hiring a new QA specialist) is through end-to-end (E2E) tests. For this type of testing, we use the Cypress library along with &lt;a href="https://www.npmjs.com/package/cumulocity-cypress" rel="noopener noreferrer"&gt;cumulocity-cypress&lt;/a&gt; and &lt;a href="https://www.npmjs.com/package/cumulocity-cypress" rel="noopener noreferrer"&gt;cumulocity-cypress-ctrl&lt;/a&gt; packages, developed by our team.&lt;/p&gt;

&lt;p&gt;We chose our &lt;a href="https://github.com/SoftwareAG/cumulocity-community-plugins" rel="noopener noreferrer"&gt;Cumulocity community plugins&lt;/a&gt; repository to introduce this feature. The plan was straightforward - we introduced a new workflow that:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Collects shell versions
&lt;/h4&gt;

&lt;p&gt;First, we need to decide which shell versions to test our plugin against. For this purpose, we created the &lt;a href="https://github.com/SoftwareAG/plugins-e2e-setup" rel="noopener noreferrer"&gt;plugins-e2e-setup&lt;/a&gt; repository containing a custom Github action &lt;code&gt;collect-shell-versions&lt;/code&gt;. This action provides information about the latest versions for relevant distribution tags. By default, it returns the last 3 yearly release tags (and if there aren’t 3 yearly releases yet, it also includes the &lt;code&gt;1018.0-lts&lt;/code&gt; tag). Here’s an example result of this action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  { "tag": "y2025-lts", "version": "1020.26.2" },
  { "tag": "y2024-lts", "version": "1018.503.119" },
  { "tag": "1018.0-lts", "version": "1018.0.278" }
]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Builds the plugin
&lt;/h4&gt;

&lt;p&gt;An obvious step - we need to build the plugin to run it in the shell in later steps.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Gets shell apps, hosts them, and runs E2E tests
&lt;/h4&gt;

&lt;p&gt;Now that we know which shell versions we want to test our plugin against, we need to obtain builds of these apps. In our previously mentioned &lt;a href="https://github.com/SoftwareAG/plugins-e2e-setup" rel="noopener noreferrer"&gt;plugins-e2e-setup&lt;/a&gt; repository, we have a second custom Github action - &lt;code&gt;get-shell-app&lt;/code&gt;. This action downloads the build of the requested app (&lt;code&gt;Cockpit&lt;/code&gt;, &lt;code&gt;Administration&lt;/code&gt;, or &lt;code&gt;Device Management&lt;/code&gt;) for the specified version.&lt;/p&gt;

&lt;p&gt;With both the shell and plugin apps in hand, we can use &lt;code&gt;cumulocity-cypress-ctrl&lt;/code&gt; to host the apps, run Cypress test suites, and verify if the plugins are usable in the shell apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage of the workflow
&lt;/h3&gt;

&lt;p&gt;Currently, we run this workflow in two scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On each pull request&lt;/li&gt;
&lt;li&gt;Scheduled with CRON for nightly runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first use case helps us detect incompatibilities mainly due to changes in the plugin itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcq2thjonlrl5kmz9m3vz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcq2thjonlrl5kmz9m3vz.png" alt="First use case"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If tests fail, the actions that can be taken are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If tests fail because test suites are out of date - update the tests&lt;/li&gt;
&lt;li&gt;If tests fail because the plugin is not compatible with some shell versions:

&lt;ul&gt;
&lt;li&gt;Update the versioning matrix to indicate compatible Web SDK versions and align the workflow to test against relevant shell versions&lt;/li&gt;
&lt;li&gt;Or review the changes and select a different approach to ensure plugin compatibility with the shell&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;While the first use case is mostly relevant to recent changes in the plugin, the second use case targets changes in the shell app. Even if a new plugin version hasn’t been released for days or weeks, the workflow is triggered every night, and tests are run against current versions of the shell app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8aobqjxkqvv6nhuaue7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8aobqjxkqvv6nhuaue7.png" alt="Second use case"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to these scheduled runs, we can receive notifications if a new version of Cockpit is not compatible with our plugin, allowing us to take the actions mentioned above.&lt;/p&gt;

&lt;p&gt;Of course, it doesn’t make sense to test the same version of the plugin with the same version of the shell repeatedly. That’s why our CRON job creates a cache of test results, so if no new version of the plugin or shell is released, the test case can be skipped.&lt;/p&gt;

&lt;h3&gt;
  
  
  The power of &lt;code&gt;cumulocity-cypress-ctrl&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;You might wonder why we use the &lt;code&gt;cumulocity-cypress-ctrl&lt;/code&gt; package instead of simply using the &lt;code&gt;http-server&lt;/code&gt; package to host the shell and plugin, letting Cypress handle running test suites. There are several compelling reasons. &lt;a href="https://tech.forums.softwareag.com/t/scaling-micro-frontend-reliability-advanced-techniques-in-version-management-and-automated-testing/300867/1" rel="noopener noreferrer"&gt;Read full topic here&lt;/a&gt; to find out what they are.&lt;/p&gt;

</description>
      <category>iot</category>
      <category>cumulocity</category>
      <category>microfrontend</category>
    </item>
    <item>
      <title>IoT Tech Talk - Cumulocity IoT &amp; Machine Learning</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Thu, 05 Sep 2024 10:59:44 +0000</pubDate>
      <link>https://forem.com/techcommunity/iot-tech-talk-cumulocity-iot-machine-learning-4fda</link>
      <guid>https://forem.com/techcommunity/iot-tech-talk-cumulocity-iot-machine-learning-4fda</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;In this IoT Tech Talk, Dr. Kanishk Chaturvedi, Solution Architect, Software AG and Nick Van Damme, Product Manager Analytics, Software AG talk about how Machine Learning (ML) and Cumulocity can be combined to implement powerful use cases.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FNrQHrdDLlU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tech.forums.softwareag.com/t/turning-your-benched-ai-machine-learning-models-into-value-how-to-operationalize-your-ai-ml-models-with-cumulocity-iot/292526" rel="noopener noreferrer"&gt;Turning your benched AI / Machine Learning models into value: How to operationalize your AI / ML models with Cumulocity IoT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tech.forums.softwareag.com/t/leveraging-hyperscaler-clouds-for-machine-learning-inferencing-on-cumulocity-iot-data/292498" rel="noopener noreferrer"&gt;Leveraging Hyperscaler Clouds for Machine Learning Inferencing on Cumulocity IoT Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tech.forums.softwareag.com/t/performing-machine-learning-inference-on-cumulocity-iot-data-using-open-source-frameworks/277988" rel="noopener noreferrer"&gt;Performing Machine Learning Inference on Cumulocity IoT Data using Open-Source Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/iot-tech-talk-cumulocity-iot-machine-learning/300163/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cumulocity</category>
      <category>iot</category>
      <category>video</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Achieve application high availability in a distributed architecture | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Thu, 22 Aug 2024 11:55:24 +0000</pubDate>
      <link>https://forem.com/techcommunity/achieve-application-high-availability-in-a-distributed-architecture-iug-2024-43d3</link>
      <guid>https://forem.com/techcommunity/achieve-application-high-availability-in-a-distributed-architecture-iug-2024-43d3</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;Maximize the uptime of your business applications with the new Natural Availability Server. Learn how to achieve high availability and seamless failover for Natural apps in Linux and cloud environments.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/CkqW3XyUfMM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/achieve-application-high-availability-in-a-distributed-architecture-iug-2024/299549/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>cloud</category>
      <category>video</category>
      <category>uptime</category>
    </item>
    <item>
      <title>Make Adabas on Linux more resilient | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Thu, 22 Aug 2024 08:28:43 +0000</pubDate>
      <link>https://forem.com/techcommunity/make-adabas-on-linux-more-resilient-iug-2024-54d8</link>
      <guid>https://forem.com/techcommunity/make-adabas-on-linux-more-resilient-iug-2024-54d8</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;What’s the importance of making Adabas more resilient in Linux environments? Join us for this presentation as we compare old monolithic designs found in mainframes to modern multi-instance and distributed models, stressing the latter’s advantages in dealing with serious incidents and disasters.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tz8Wr9koqI0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/make-adabas-on-linux-more-resilient-iug-2024/299548/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>adabas</category>
      <category>linux</category>
      <category>video</category>
      <category>resilience</category>
    </item>
    <item>
      <title>Secure Adabas on Linux | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Wed, 21 Aug 2024 08:39:33 +0000</pubDate>
      <link>https://forem.com/techcommunity/secure-adabas-on-linux-iug-2024-5a26</link>
      <guid>https://forem.com/techcommunity/secure-adabas-on-linux-iug-2024-5a26</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;Discover how to use encryption, role-based access control (RBAC) &amp;amp; other tools to maximize your Adabas data’s security on Linux platforms.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/EhU5qe8DSS0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/secure-adabas-on-linux-iug-2024/299492/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>adabas</category>
      <category>linux</category>
      <category>video</category>
      <category>security</category>
    </item>
    <item>
      <title>Adabas &amp; Natural innovations | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Tue, 20 Aug 2024 11:10:39 +0000</pubDate>
      <link>https://forem.com/techcommunity/adabas-natural-innovations-iug-2024-22i</link>
      <guid>https://forem.com/techcommunity/adabas-natural-innovations-iug-2024-22i</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;Evolve your applications to be future-ready, now! Discover how the innovations of the Adabas &amp;amp; Natural 2050+ agenda enable you to embrace the latest advances in high availability, security, hybrid cloud, platform optimization, and much more.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xWB6LenQp-U"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/adabas-natural-innovations-iug-2024/299421/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>adabas</category>
      <category>video</category>
      <category>innovation</category>
    </item>
    <item>
      <title>What does Zero Trust Security mean for you | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Mon, 19 Aug 2024 11:53:22 +0000</pubDate>
      <link>https://forem.com/techcommunity/what-does-zero-trust-security-mean-for-you-iug-2024-3n59</link>
      <guid>https://forem.com/techcommunity/what-does-zero-trust-security-mean-for-you-iug-2024-3n59</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;You’ve heard the buzz! More and more enterprises are requiring Zero Trust as their new security architecture. What does this mean to you? We describe the principles and components of Zero Trust and the many capabilities that can be used to support Zero Trust in an Adabas &amp;amp; Natural setting.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/t40dMogloRE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/what-does-zero-trust-security-mean-for-you-iug-2024/299376/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>video</category>
      <category>security</category>
      <category>adabas</category>
    </item>
    <item>
      <title>Innovation, Modernization &amp; the journey to Agility | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Mon, 19 Aug 2024 07:52:12 +0000</pubDate>
      <link>https://forem.com/techcommunity/innovation-modernization-the-journey-to-agility-iug-2024-2fn8</link>
      <guid>https://forem.com/techcommunity/innovation-modernization-the-journey-to-agility-iug-2024-2fn8</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;Learn how the Virginia Department of Motor Vehicles is using NaturalONE to modernize the development of mainframe apps utilizing agile, scrum, and sprints. Using APIs, VA can generate mobile driver licenses and “talk” to all states and the federal government using a common interface.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jVNF0bPj7ow"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/innovation-modernization-the-journey-to-agility-iug-2024/299375/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>innovation</category>
      <category>agility</category>
      <category>video</category>
      <category>mainframe</category>
    </item>
    <item>
      <title>Maximize your cost saving with zIIP offloading | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Fri, 16 Aug 2024 10:40:40 +0000</pubDate>
      <link>https://forem.com/techcommunity/maximize-your-cost-saving-with-ziip-offloading-iug-2024-51dn</link>
      <guid>https://forem.com/techcommunity/maximize-your-cost-saving-with-ziip-offloading-iug-2024-51dn</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;The mainframe’s significance in terms of stability, performance, and security is unquestionable. However, keeping infrastructure expenditures under control is an ongoing concern. Learn how to improve your mission-critical workloads, such as Natural with Db2, and make use of IBM zIIP processors.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/591geCDLIvI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/maximize-your-cost-saving-with-ziip-offloading-iug-2024/299297/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>costsaving</category>
      <category>mainframe</category>
      <category>video</category>
      <category>event</category>
    </item>
    <item>
      <title>Junior Developer's Guide to Legacy Systems | IUG 2024</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Fri, 16 Aug 2024 07:07:08 +0000</pubDate>
      <link>https://forem.com/techcommunity/junior-developers-guide-to-legacy-systems-iug-2024-288</link>
      <guid>https://forem.com/techcommunity/junior-developers-guide-to-legacy-systems-iug-2024-288</guid>
      <description>&lt;h2&gt;
  
  
  About this video
&lt;/h2&gt;

&lt;p&gt;Developers Lars-Erik Bjørk, Kristoffer Jacobsen, Geir Knudsen, and Johan Svartdal present their insights on organizational change and onboarding new talent.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/g0DE8AeIwkI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/junior-developers-guide-to-legacy-systems-iug-2024/299292/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>legacy</category>
      <category>guide</category>
      <category>video</category>
      <category>developer</category>
    </item>
    <item>
      <title>IT Outages, how can they be avoided?</title>
      <dc:creator>Tech Community</dc:creator>
      <pubDate>Tue, 30 Jul 2024 09:47:53 +0000</pubDate>
      <link>https://forem.com/techcommunity/it-outages-how-can-they-be-avoided-24h6</link>
      <guid>https://forem.com/techcommunity/it-outages-how-can-they-be-avoided-24h6</guid>
      <description>&lt;p&gt;&lt;em&gt;By Ilan Hirschowitz, Senior Adabas &amp;amp; Natural Customer Success Architect, Software AG, 30 July 2024&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://global.discourse-cdn.com/techcommunity/original/3X/f/8/f81da417000810770bd8fd109d09bb2b4d77d2bf.jpeg" rel="noopener noreferrer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4RQ5ELtV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://global.discourse-cdn.com/techcommunity/optimized/3X/f/8/f81da417000810770bd8fd109d09bb2b4d77d2bf_2_414x232.jpeg" alt="image" width="414" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened in simple terms?
&lt;/h2&gt;

&lt;p&gt;Friday, July 19th was a bad day worldwide and the week after wasn’t much better. A bug in a critical security component that was rolled out caused havoc around the world. Not since the doomsday predictions of Y2K | BUG 2000, which was supposed to have widespread dire consequences, has such an event affected our planet with banks, airlines, and major institutions having severe systems outages. At least with Y2K, companies were anticipating the risk—I recall reaching out to our Australian colleagues at midnight just to confirm that all was okay. This one hit the world completely by surprise.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The error&lt;/strong&gt; messages 0x50 or 0x7E appear on a &lt;strong&gt;blue screen&lt;/strong&gt; and the computer goes into a looping restart state. This renders the Windows terminal unusable. A SPOF or single point of failure can become any company’s biggest nightmare.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Companies normally have automatic updates turned on, so this bug was propagated unwittingly to all their servers on that Friday.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who was affected?
&lt;/h2&gt;

&lt;p&gt;Microsoft estimated that about one percent of worldwide Windows devices, around 8.5 million servers, were impacted by the bad release update. This figure sounds small but there were many more &lt;strong&gt;connected applications&lt;/strong&gt; that were affected and became non-functional meaning many more end-users could not work. The airline industry was possibly the most visible victim since some airlines reported that upward of half of their IT systems are Windows-based.&lt;/p&gt;

&lt;p&gt;Being robust, our customer’s Adabas &amp;amp; Natural mainframe applications were not directly affected by the outage. Still, systems may have been unreachable if endpoint connections off the mainframe were not available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it so difficult to fix?
&lt;/h2&gt;

&lt;p&gt;A manual intervention by an IT specialist is needed since there are multiple steps to go through that an end user would find difficult to perform. The steps involve starting Windows in safe mode &amp;amp; deleting the offending file. Because the Windows machines are offline, the IT specialist needs to physically sit in front of every machine to perform the recovery, a time-consuming task.&lt;/p&gt;

&lt;h2&gt;
  
  
  You may ask, how can one avoid this?
&lt;/h2&gt;

&lt;p&gt;One way is to have Point in Time (PIT) encrypted backups stored in a secure vault.&lt;/p&gt;

&lt;p&gt;Both for Cyber malware attacks and for inadvertent Software bugs, PIT backups allow you to revert to a state before the attack or bug.&lt;/p&gt;

&lt;p&gt;A cloud-based solution could also help where after fixing the underlying problem, new servers could be easily provisioned and spun up quickly, even though the old ones were unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can a robust &lt;strong&gt;cluster solution&lt;/strong&gt; protect your mission-critical databases?
&lt;/h2&gt;

&lt;p&gt;If you rely on an Adabas database, you have another way to recover from an outage. Software AG’s &lt;strong&gt;Adabas Cluster for Linux&lt;/strong&gt; solution allows a transparent failover mechanism for any Adabas database outage under Linux. When it comes to patching, each individual node is taken out of the cluster &amp;amp; each is patched separately without affecting the health of the remaining cluster nodes. If one node gets a bad update, then the others continue to function as normal. This is also critical in preventing common single points of failure scenarios. The same holds for our mainframe Adabas Cluster Services which takes advantage of a z/OS® Sysplex cluster.&lt;/p&gt;

&lt;p&gt;This has several advantages such as high availability, robust disaster recovery, scalability, and efficient isolation of systems in the Sysplex from others, providing a secure environment for different applications.&lt;/p&gt;

&lt;p&gt;Finally, this also solves the patching and SPOF issues.&lt;/p&gt;

&lt;p&gt;Hopefully, some simple preventative measures such as these will allow DBAs and IT Admins to sleep better at night!&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://www.softwareag.com/en_corporate/resources/adabas-natural/ds/adabas-cluster-linux.html" rel="noopener noreferrer"&gt;Adabas Cluster for Linux | Software AG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tech.forums.softwareag.com/t/it-outages-how-can-they-be-avoided/298604/1" rel="noopener noreferrer"&gt;Read full topic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>adabas</category>
      <category>outage</category>
      <category>database</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
