. . .

Version 3.2.0

New Features

Typescript SDK (beta)

With ApiOmat 3.2.0 our newest SDK is now beta ready! The latest improvements are:

  • better handling for HTTP requests, which improves the compatibility for several frameworks and environments (react, vue, ..)

  • Handling for subclasses is now feature complete: it also works for offline tasks and offline queries

  • E-Tag & DeltaSync handling for better performance

  • embedded objects support for CRUD operations

  • Analytics-ready

  • TSDoc for all public methods

But the SDK is still in the beta phase, which means, that we are currently working on several improvements like: offline handling for embedded objects, referenced Hrefs improvements and some other minor optimizations.

Declaring the TypeScript SDK as beta is great news for our customers, because the plan is to replace the old JavaScript SDK with this SDK, which contains a lot usability improvements and modern programming language features like async/await. It can also be used in a lot modern frontend and NodeJS-backend frameworks:

images/download/attachments/34178068/frameworks.png

The TypeScript SDK can also really easy be transpiled into ES6 and ES5 SDKs. The transpiled ES5 SDK could be a perfect replacement for all existing ApiOmat apps, which were developed with our JavaScript SDK, because it comes with a minified js file like the JS SDK and has similar syntax.

Android SQLite SDK (beta)

Android SDK Beta is now released with several bug fixes and support for working with raw SQL content. Each class represents now a table in your database. Also there's an extra method for querying data from the SQLite Database with full SQLite query capabilities.

ApiOmat Analytics Update

After updating our ApiOmat Analytics server, we've also updated our SDKs with the latest analytics features:

  • GDPR compliance handling in the SDKs and a complete new site in the analytics dashboard, which is called "Compliance Hub"

  • new widgets for the dashboard section: drill, retention, online users, ..

  • ratings and user feedback

  • filtering and views in funnels

We also added examples of the usage to our SDK documentation.

Compliance Dashboard

With 3.2.0 we introduce the new compliance manager, which could be accessed in the administration view of the dashboard. There you can ensure that your apps are developed and maintained as a GDPR compliant solution. You can download the ApiOmat Data Processing Agreement and then return it to ApiOmat. The GDPR Checklist helps developers ensure your app, website, chatbots etc. are built and maintained in a GDPR-compliant manner. You also have access to each user’s personal data. There you can fulfil the standard user requests to view their data, have it deleted as well as the objects created inside your service. You also can download all user data as a json-file, delete users and delete users with all owned data. For more information, take a look at the documentation Compliance Manager.

images/download/attachments/34178068/dataprocessingagreement.png images/download/attachments/34178068/GDPRchecklist.png

images/download/attachments/34178068/statistics.png images/download/attachments/34178068/userdata.png images/download/attachments/34178068/edit_userdata.png

Individual OpenAPI per application

With ApiOmat version 3.2.0 the Apidocs feature now runs as microservice called Explorer. The Explorer contains all defined REST end points of your ApiOmat instance like the Apidocs did before.

The Explorer also delivers a new feature to show all your application specific REST end points.
That means that already known parameters like application name, module name and model name are pre-defined and don't need to be entered by yourself, which tremendously saves time.

images/download/attachments/34178068/application_specific_rest_api.png

Furthermore you are now able to export your application specific API documentation as OpenAPI 2.0 specification and use it as standardized way to connect your application to other external services!

Visit the Explorer documentation for more details.

Graylog Integration

With an integration to the industry leading log monitoring solution Graylog, YAMBAS and other services are now capable of sending their log messages to a centralized instance.

Graylog enables the user to

  • aggregate data from multiple sources

  • initiate a search across multiple parameters and analyze, visualize, and report on the data

  • analyze data and find issues quickly with the ability to explore multiple attack vectors at once

We provide a GELF appender, which can be activated in the logging setup to fully customize, which data will be collected in Graylog and which should be kept locally.

images/download/attachments/34177924/search-graylog.png

Consul Integration

YAMBAS will now register itself at a Consul discovery service, which enables other services to find instances of ApIOmat in a clustered environment.

images/download/attachments/34178068/Bildschirmfoto-von-2018-12-12-10-53-32.png

Also, YAMBAS will use Consul to connect to other Hazelcast instances for distributed caching.

Field value verification (regex, minimum length, maximum length)

From now on you can define your own regular expression, that an attribute's value is matched against, or to put it more simple, just define a minimum or maximum length, that the value has to meet. The verification is done during creation and update of the value and can be set via REST, native module annotations or via Dashboards class editor:

images/download/attachments/34177735/AttrEditor.png

Cluster-wide atomic counter

Until now it wasn't possible for Native Module developers to implement a counter that increments by 1 with each call and always yields unique values when yambas runs in a cluster.

Now there's a new method to achieve this: YourModule.AOM.incrementAndGet(counterName, offset, optionalAppName)

This method initiates a counter with a given name and from then on increments that counter with each call by 1+offset. The counter is always module-specific, but can either be used across multiple apps (when you pass null for the optionalAppName parameter), or app-specific. The counter's uniqueness and atomicity are guaranteed by utilizing Hazelcast features, and on top of that it's backed up by MongoDB, so even when the cluster dies and you restart all nodes, the counter continues where it left off.

MongoDB Wired Tiger Support

ApiOmat now fully supports the Wired Tiger storage engine of MongoDB. WiredTiger uses document-level concurrency control for write operations; as a result, multiple clients can modify different documents of a collection at the same time.

While existing installations can keep using MMAPv1, new installations will automatically use the new storage engine which is set by default on new MongoDB installations.

Breaking changes

Breaking changes may require changes in configuration, apps, or native module code after an ApiOmat upgrade to ensure system stability.

Docker images

The name for the previous alpine-yambas image was renamed to apiomat / yambas.

Objective-C SDK

When loading data while the device is offline and no data is found in the cache, an error with the status code AOMID_NOT_FOUND_OFFLINE will be returned, instead of AOMNO_NETWORK. When using the caching strategy NETWORK_ONLY, AOMNO_NETWORK will still be returned as the cache is not used.

If you are checking for the status code AOMNO_NETWORK when loading data and the cache is used, you'll have to check for AOMID_NOT_FOUND_OFFLINE instead.

apiomat.yaml/maxResults

The system-wide maximum of results limitation is now set to 0/unlimited by default (was 1000 before). When querying large datasets with no limitation, database may take lots of time to collect the data. Thus, on systems where millions of entries can be queried, the yambas.limits.maxResults should be set back to a proper limit.

Remarkable changes

Remarkable changes do not affect system stability after ApiOmat upgrade, but may require changes in configuration, apps, or modules in the next development cycle.

DEB repository key

The GPG key for the Debian package has changed. Please add the newest key to bypass apt signature errors:

wget -O - https://repo-int.apiomat.com/yambas/rest/web/Key/LIVE/apiomat-archive-keyring.asc | apt-key add -

Database storage engine

The default MongoDB storage engine Wired Tiger is now fully supported in ApiOmat.

We now support Mongo's default storage engine and use it when doing a fresh install. Existing installations will keep the MMAPv1 engine, and new installations can also be re-configured to use MMAPv1 in mongod.conf.

Backend and Customer caching

We removed the nearcache configuration from our default hazelcast.xml, as the nearcache may lead to inconsistencies when reading backends or customers from the cache.

We recommend to remove the nearcache configuration from hazelcast.xml. This may result in a slight decrease in performance, but fixes unexpected Unauthorized messages due to outdated cache entries. Your map configuration should look like this example

EHCache

EHCache caching was removed in favour of Hazelcast caching. Since EHCache was only used on single node deployments, no implications for productive setups are expected.

Analytics "/connect" response

Until now, even when Analytics was disabled in the config, a request to the "/connect" endpoint lead to a "200 OK" response with the message: "Nothing to do, because Analytics is either disabled or it's already connected to ApiOmat.". This also leads to the Dashboard interpreting the response as success and removing the "connect" Button in the Vendor Onboarding area.

From now on, when Analytics is disabled, it will lead to a "400 Bad Request" response with an appropriate message. Also, in case of an actual success, a "200 OK" response is sent, without any message.

All changes in the current and previous versions can be found at the root page.

All deprecations and their removal date can be found at Deprecations and Migration.

Changelog

Key

Summary

T

Resolution

DAS-1878

Cannot Accept Contract in Internet Explorer

images/jira.apiomat.com/secure/viewavatar

Fixed

DAS-1857

Lurker URL nor correctly retrieved from consul

images/jira.apiomat.com/secure/viewavatar

Fixed

DAS-1854

Remove mcrypt

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5330

File/Image Attribute with name "result" leads to uncompileable module since 3.1.2

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5319

Check min max length for non-empty string only

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5310

[TypeScript] order of saved collection objects could get lost when using order by in query

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5302

[C#] SQLite - Implement Offline CRUD for ReferenceCollections

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5296

getResources returns same urls with different contents

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5284

Add possibility for service discovery in Yambas

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-5271

Add possibility to get and increment a thread-safe and cluster-wide number

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-5253

Application creation on multi node environment throws error

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5247

Loading of global references not working

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5235

Avoid creating empty collections for each stage and support Wired Tiger

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5228

NPE for missing GridFSResourceId

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5222

[Swift] Support for Swift 4.2

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5187

Fix backreferences for files/images on Global classes

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5185

className field leads (probably) to unusable Resource-Data

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5182

Can't replace/add file to file property on global class

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5173

Missing ApiomatSession.User in onConfigChanged()

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5168

Getting datamodels with own userInRoles method takes too long

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5164

Set default value of maxResults to unlimited

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5148

onModuleAttach fails in usedModules module

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5145

Copy collection(s) on mongo DB with possibility to filter data from native module

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5144

[TypeScript] SubClasses in References and Collections

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5136

OnDeployForAppBackend calls too early

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5135

[iOS][Objective-C] Problem with download size more than 1 mb

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5124

Deadlock when starting YAMBAS with existing native modules

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5111

[TypeScript] Problem building ES5 when having two classes with same name

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5110

Remove hazelcast-swarm dependencies

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-5093

Cannot upload module where an invisible class inherits from another invisible class

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5090

Predicates are reused across objects of different classes when using reference attributes

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5085

Integrate new hazelcast consul configuration in docker

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5080

Update Tomcat to Version 8.5.32

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5067

Integrate Docs and Apidocs war to YAMBAS installation

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5065

Make group 'apiomat' owner of common installation dirs

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-5063

Missing adminName for usedModules causes NPE during onDeploy

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5053

Improve Module compilation and upload performance

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-5052

Support Ubuntu 18.04 and Centos 7.5

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-5022

Classloaders remain in Quartz-Threadpool (and other places)

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5021

Auth classes are not evaluated for static data

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-5020

[Alpha] Support bulk creation and update from native module

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-5000

[TypeScript] Implement DELETE for embedded Objects handling

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4999

[TypeScript] Implement POST for embedded Objects handling

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4987

[TypeScript] duplicate reference variable name but with underscore will throw error

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4969

[TypeScript] Cache and Persistent POST/PUT/DELETE OfflineHandling

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4968

[TypeScript] persistent storage GET

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4966

Used module libs on third level are not updated on Native Module download

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4962

Integrate Consul plugin for Hazelcast

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4955

Implement missing role endpoints for UIs

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4927

Add documentation for datatypes of attributes

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4889

[C#] SQLite - Fix AomJsonConverter.isPropertyEmbedded() functions

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4886

[C#] SQLite - Fix NullReferenceException in AddTask when deleting files in offline mode

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4868

Fix caching of database handles

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4855

[SDK] Analytics SDK update to 18.08

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4849

[C#] SQLite - Handle Fixmes and Todos in productive code

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4847

[C#] SQLite - Evaluate new behaviour that getting missing referenced objects will throw exception

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4838

[C#] SQLite - Repair broken Tests

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4802

Remove EHcache usage

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4635

Delete File possible with wrong Credentials

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4412

Change behaviour of getReferencedDataModels in MRR for Transient references

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4410

Implement possibility to call count for models also in native module

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4260

Can't set ownerUserName in native module on POST

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4137

[C#] SQLite - Implement fix and tests for OfflineHandling when caches crash

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4100

[TypeScript] Add ETAG-Handling

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4099

[TypeScript] Add Deltasync-Handling

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4094

Make timeout for module during server start deployment configurable

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-3980

TypeScript SDK

images/jira.apiomat4.com/secure/viewavatar

Fixed

AOM-3905

Provide regex, minLenght, maxLenght, description and exampe for meta model attributes

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-3882

[C#] SQLite - Default values of collections should be null instead of empty

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-3265

Apidocs problems with Internet Explorer 11

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-1132

Generate individual Swagger api docs per app backend

images/jira.apiomat3.com/secure/viewavatar

Fixed

71 issues