Thursday, March 12, 2009

[ICS 499] Planning

Premise:
This entry is a continuation of the long awaited plan of what my thoughts are on building my custom BMXNet component in Java. I took forth this project to provide higher-level interoperability between serviced applications for RPMS’s electronic health records system. I will review the facts regarding the tools and intention of this project, but further details regarding the background of IHS's RPMS can be found in my previous post, here.

A quick re-interation:
Why use BMXNet? Just a refresher, BMXNet is a subset of tools provided by RPMS that enables .NET applications to exchange data via standard ADO.Net data tables. At this point in time RPMS only supports Windows applications written in the .Net 2.0 framework. My goal is to expand this by adding other supportive data providers across multiple platform environments for RPMS to communicate with.

Requirements:
* Installation of InterSystem's Cache on a Windows operating system.
* Net 2.0 framework.
* BMXNet20.dll – handles the conversion between BMXNet to the .Net framework.

Tools:
* Eclipse IDE ~3.4
* Microsoft Visual Studio

The Plan:
Finding a home...
The crowd approval of a project is somewhat difficult to obtain but it isn't hard to include a new project within the neighborhood of other potentials.
Create an open source project using Google's project hosting.
* Place an introduction and produce a good subset of examples supporting the proposal.
* Mention about involving companies or schools.
* Licensing: Since this project is somewhat in its dwarf stages, I'll attach an ordinary GPL to it. Perhaps in the future we will do a dual licensing and reciprocal term.
Benefits of using Google’s project hosting:
* Supports version control, easy navigation or browsing of code, connects well with other Google components, such as Google’s discussion groups, etc.
Other source code management (SCM) option(s):
* What about Github? Due to Git’s full-repository cloning, fast and easy branching and merging of repos, more software developers are seeking it out as an alternative SCM to Subversion. Github combines the goodness of a powerful SCM and ships with the abundance of collaborative software (Campfire & Lighthouse) to help developers stay focus and aware of their community involvements.

Putting BMXNet on the chopping block…
BMXNet details:
Below are three different ways to retrieve data from [M]umps FileMan utility. Each will be the focus of my application as I recreate these components using Java.
  1. Custom Remote Procedure Calls (RPC’s) returned from BMXNet’s M utilities. RPC routines in M are categorized into two record schemas, minimal and full.
    1. Schema Record Structure
      1. Minimal Schema - contains enough information in the RPC for a read-only ADO.Net Data Table.
      2. Full Schema – contains sufficient metadata for a fully updatable Data Table via BMXNet ADO SS.
    1. Record Delimiters
      1. Field separations with ‘^’
      2. ASCII 30 for End-Of-Record (EOR) & ASCII 31 for End-Of-File (EOF).
    2. All schema structures are stored in the BMX ADO SCHEMA file.
  1. SQL-like calls. Rather than having to create custom RPC’s in the M language, BMXNet supports quick retrieval of any read-only DataTable easily through familiar SQL statements.
  2. BMX ADO SS.
    1. Simplifies calls by generalizing RPC routines written in M
    2. Generates an updatable DataTable
Understand Java and RPMS's Networking capabilities:
Java is the first major programming language to be built from the ground up with networking in mind. It has built-in supportive classes to enable Java applications with networking capabilities to easily communicate across the Internet. This task pertains to the first phase of this project and is certainly a vital prerequisite for this application. I'll be focusing on the first phase within the next day or two. Here's a quick outline of what's to come:

Phase I: Communication
* Create a simple Java client to test connecting to Cache's RPMS server environment.
- Use basic TCP/IP socket connections
- Test sending and retrieving data packets
* Accomplish bi-directional relationship

Phase II: Building Custom RPCs
* Learn to create custom RPCs from RPMS
* Learn to invoke custom RPCs from within my custom data provider in Java.

Phase III: Provide SQL support
* Learn about Java Persistence API

Phase IV: Creating Updatable Data Tables
...TBD

No comments: