Harmony Core Development Blog
Jeff and Steve give an update on Harmony Core development activities over the last six weeks, which included the following.
Traditional Bridge has been updated to use the new system.text.json parser and writer. This reduces overhead when running traditional Synergy methods, resulting in significant performance improvements (a full order of magnitude from what we’ve seen). This enhancement is built on the version 11 Synergy/DE runtime, so it requires version 11 on the traditional side of the bridge. Traditional Bridge still works with prior versions, but these versions can’t take advantage of the built-in JSON libraries that make the performance improvements possible.
We created a prototype with EF Core 3.1 support. Microsoft has completely reworked the model for providers, so this prototype took quite a bit of work. The reworked model is an improvement; it makes query analysis requirements more explicit, so the Harmony Core EF Provider does not have to do as much pattern mapping for optimization. We will continue to improve this support, and we’ll transition the project from prototype to production.
We also made several improvements to project templates. The metadata that is injected into data models has been extended, and some data models have additional attributes that improve the fidelity of generated documentation. These attributes provide additional information about the HTTP responses each operation endpoint can generate, along with the shape of the data that is returned by each operation. This should provide much better information for Swagger documentation. These changes will be checked into the Harmony Core Github repository in the next couple of days.
Finally, we fixed a customer-reported bug that caused duplicate items in multi-leg joins (issue 131), and we continued work on Harmony Core Generator, a utility designed to replace regen.bat and display relations.
Jeff and Steve give a short update on the Harmony Core project, including what will be changing with Synergy/DE 11. They also introduce the xfBBQ project. The team then reviews an issue and answers several questions on the project.
Jeff and Steve give an update on the Harmony Core project. Jeff also validates resolving issues that have been raised in github. Lastly, Jeff and Steve discuss adding documentation to let users know how to enable stdout logging inside iis.
The Harmony Core project has been steadily gaining momentum as we improve our processes, work on support issues, and continue with user engagements.
To start with, we’ve been working on our continuous integration and continuous delivery (CI/CD) pipeline in Azure DevOps. This pipeline serves a dual purpose. It allows us to demonstrate software development best practices applicable to Harmony Core users, and it enables our team to be more productive. Whenever code is committed or a pull request is created, the full test suite is run to ensure that the code is good and that there are no regressions. Automating this has improved our ability to take pull requests from outside contributors.
Significant effort has gone into offering a nearly seamless experience for xfServerPlus users who are looking to expose their Synergy routines via RESTful webservices. We have updated CodeGen, our CodeGen templates, and the underlying support libraries. CodeGen can now read SMC interface definitions, and there are new tokens for iterating over xfServerPlus methods and parameters. Additionally, CodeGen now uses SMC interface definitions as input when determining which repository structures to iterate over. We use this functionality to generate the data objects required to wrap structures passed as parameters.
As part of a consulting engagement, we built a mechanism to support custom loading and custom validation of data objects and transactions (Issue 107). We enhanced CodeGen and the CodeGen templates in Harmony Core to support certain types of relations to ensure that required relations have necessary resources in the database or the current transaction.
Traditional Bridge Improvements
Up to this point, we’ve been exclusively promoting RESTful web services, but now we’re introducing an alternative. We’ve created CodeGen templates for exposing Traditional Bridge services via SignalR, a technology provided by Microsoft. SignalR allows for two-way communication in or outside of the browser without compromising performance, reach, or standards. We’re recommending SignalR in cases where an application can’t operate statelessly or the server needs to push updates to clients rather than requiring them poll or refresh for changes.
On the xfServerPlus front, we implemented encoding in Traditional Bridge for all currently known scenarios and data types that are supported for xfServerPlus. This includes arrays, handles, ArrayLists, and scalar types. We also implemented a secondary calling convention that uses the Synergy routine call block API for those of you that use the optional parameter support offered only in xfNetLink COM clients. And we’re actively working on porting the full test suite used by xfServerPlus and xfNetLink.NET to work as unit tests for Traditional Bridge. Swagger Docs
Over the last few weeks, we’ve been working on improving our API version support. We found an open source Microsoft library for this, and we have created integration samples. This library does two things for us: it takes care of versioning, and it produces Swagger docs for versions, enabling us to move away from statically generated Swagger files. This dramatically improves the quality of Harmony Core Swagger documentation for items that fall outside the normal set of get and post entities. And it has the added benefit of allowing you to expose source code doc comments as part of your API documentation.
Traditional Runtime Updates
The traditional Synergy runtime for version 11 includes support for reading and writing JSON using a subset of the new System.Text.Json namespace from .NET Core 3.0. We have decided to use this functionality because it is designed for speed. Even for moderately-sized JSON documents, we’re seeing upwards of 15x faster parsing, and the number gets larger for larger documents. In the coming weeks, we’ll be implementing a dual pathway for JSON reading and writing in Traditional Bridge. If you’re on a runtime older than 11, we’ll fall back to the implementation written in Synergy DBL. But if you’re using the latest runtime, you’ll be able to take advantage of the massive performance increase.
A New Harmony Core Example
We’ve received some requests for a complete end-to-end Harmony Core example that demonstrates how to develop, test, and deploy a web application backed by a Harmony Core web service. We’ve come up with an idea for an application we’re calling xfBBQ. At our offices during the summer, the development team frequently hosts barbeques for the company, and one of the challenges we face is taking orders. This is currently managed using a Google Sheets spreadsheet, which isn’t ideal. But it gave us the idea to build an example app to improve this process. xfBBQ will be implemented as a React + Redux Single Page Application. We’re planning to pack large amounts of sometimes gratuitous functionality, but we’ll stay within the bounds of best practices.
Utilizing xfBBQ for planning company BBQs
Resolving Your Harmony Core Issues
There are two things we need to know when prioritizing Harmony Core development: what issues you have and what features you need. And we can more quickly resolve your issues and implement the features you need when we know what they are. The following are the best ways to reach us.
We host online office hours every six weeks. During this time, we deliver a short update on what we have improved in the Harmony Core framework. At the end of each session we answer questions and work through issues you may have. This is a great opportunity to get direct and live feedback from us. During our last online office hours session, we fielded some support questions that we were subsequently able to resolve. We will continue to offer these sessions every six weeks. If you have any questions for us, please sign up for the next office hours session so we can answer your questions directly.
The next best way to reach us is through GitHub issues. Here we can easily keep track of your issues and make sure they are resolved as quickly as possible. This is also helpful because it creates a repository of answers for other users to search through. Recently we were able to resolve questions regarding ISMFILE.txt and .XDL files and where to put logicals by directing the user to our wiki documentation.
Jeff Greene discusses some recent updates to Harmony Core. Jeff also asks the audience if there is any interest in an entity framework core template, and guidance for stand alone use.
Join us for office hours hosted via GoToWebinar. You can drop in to ask our experts your burning questions, get the latest updates, and hear how other customers are implementing Harmony Core in their Synergy applications.
Our next office hours will be on January 23, 8:00 am PST