|
| 1 | +# loopback-connector-ibmi |
| 2 | + |
| 3 | +This is a database connectior for Db2 on IBM i intended for use with LoopBack 3 (LoopBack 4 testing soon). It uses the npm `odbc` package to connect to the database, so installing an ODBC driver manager and driver and setting up a datasource is required for use (see below). |
| 4 | + |
| 5 | +## Major differences from version 0.x of loopback-connector-ibmi |
| 6 | +This version of the module is significantly different from version 0.x and constitutes a complete rewrite. This project is a derivative of [loopback-connector-db2iseries](https://github.com/strongloop/loopback-connector-db2iseries) and the v0.x [loopback-connector-ibmi](https://github.com/andrescolodrero/loopback-connector-ibmi). |
| 7 | + |
| 8 | +The main difference between this and the other packages for IBM i (including v0.x of this package) is that it uses ODBC to communicate to the database. Version 0.x of this package was built using the Db2 for i CLI API set, hence the need for important prerequisites (below). |
| 9 | + |
| 10 | +## Prerequisites |
| 11 | +Before installing this package, you will need an ODBC driver and a driver manager (with development libraries). |
| 12 | +This package is primarily developed and tested with the IBM i Access ODBC driver, which is supported as part of IBM i software maintenance agreements (SWMA) and comes with no additional licensing fees. |
| 13 | + |
| 14 | +### On IBM i |
| 15 | +- Install the `unixODBC-devel` package. See [the RPM and yum documentation for IBM i](http://ibm.biz/ibmi-rpms) for more detailed steps. |
| 16 | +### On Linux |
| 17 | +- Install the `unixODBC-devel` package with your operating system's package manager (apt-get, zypper, yum, etc). |
| 18 | +- Install the "Linux Application Package" of IBM i Access Client Solutions. Consult [this document](http://www-01.ibm.com/support/docview.wss?uid=nas8N1010355) for assistance. |
| 19 | +### On Windows |
| 20 | +- Install the "Windows Application Package" of IBM i Access Client Solutions. Consult [this document](http://www-01.ibm.com/support/docview.wss?uid=nas8N1010355) for assistance. |
| 21 | + |
| 22 | + |
| 23 | +## Installation |
| 24 | +Once the prerequisites are satisfied, enter the following in the top-level directory of your LoopBack application and install this package: |
| 25 | + |
| 26 | +``` |
| 27 | +$ npm install loopback-connector-ibmi |
| 28 | +``` |
| 29 | + |
| 30 | +## Configuration |
| 31 | + |
| 32 | +In LoopBack, datasources are used to store the information about your database so it can be used by the program. Use the [data source generator](https://loopback.io/doc/en/lb3/Data-source-generator.html) to add to your application: |
| 33 | + |
| 34 | +``` |
| 35 | +lb datasource |
| 36 | +``` |
| 37 | + |
| 38 | +The datasource generator will then walk you through the process of setting up a datasource: |
| 39 | +1. `Enter the datasource name:` Any name will do, such as the name of the schema you will use or the name of your system. |
| 40 | +2. `Select connector for <name>:` LoopBack 3 does not have knowledge of `loopback-connector-ibmi`, so just press up on the arrow key once and select `other`. |
| 41 | +3. `Enter the connector's module name:` Enter `loopback-connector-ibmi`. |
| 42 | +4. `Install loopback-connector-ibmi`: If you haven't installed it, enter `Y`. If you have already installed it, select `n`. |
| 43 | + |
| 44 | +This will generate an entry in your `server/datasources.json` file. It should know have an entry similar to: |
| 45 | + |
| 46 | +```json |
| 47 | + "test": { |
| 48 | + "name": "test", |
| 49 | + "connector": "loopback-connector-ibmi" |
| 50 | + } |
| 51 | + ``` |
| 52 | +You should edit this entry to add information on how to connect to Db2. For `loopback-connector-ibmi`, you need to pass either a `connectionString`, or pass your `username`, `password`, and `dsn` (which will be the DSN name you set up for your ODBC driver). |
| 53 | + |
| 54 | +```json |
| 55 | +"test": { |
| 56 | + "name": "test", |
| 57 | + "connector": "loopback-connector-ibmi", |
| 58 | + "connectionString": "DSN=MYDSN" |
| 59 | +} |
| 60 | +``` |
| 61 | + |
| 62 | +or |
| 63 | + |
| 64 | +```json |
| 65 | +"test": { |
| 66 | + "name": "test", |
| 67 | + "connector": "loopback-connector-ibmi", |
| 68 | + "dsn": "MYDSN", |
| 69 | + "username": "FIRSTLAST", |
| 70 | + "password": "password123" |
| 71 | +} |
| 72 | +``` |
| 73 | + |
| 74 | +The following table describes the connector properties. |
| 75 | + |
| 76 | +Property| Type | Description |
| 77 | +---| --------| -------- |
| 78 | +connectionString | String | ODBC connection string for connecting to the database |
| 79 | +dsn | String | ODBC DSN to use for the connection |
| 80 | +username | String | Username on the IBM i |
| 81 | +password | String | Password on the IBM i |
| 82 | +schema | String | Specifies the default schema name that is used to qualify unqualified database objects in dynamically prepared SQL statements. The schema name is case-sensitive. |
| 83 | + |
| 84 | +**More connector properties will be added as requested by the community** |
| 85 | + |
| 86 | +Alternatively, you can create and configure the data source in JavaScript code. |
| 87 | +For example: |
| 88 | + |
| 89 | +```javascript |
| 90 | +var DataSource = require('loopback-datasource-juggler').DataSource; |
| 91 | +var DB2 = require('loopback-connector-ibmi'); |
| 92 | + |
| 93 | +var config = { |
| 94 | + dsn: process.env.DSN |
| 95 | + username: process.env.DB2_USERNAME, |
| 96 | + password: process.env.DB2_PASSWORD, |
| 97 | +}; |
| 98 | + |
| 99 | +var db = new DataSource(DB2, config); |
| 100 | + |
| 101 | +var User = db.define('User', { |
| 102 | + name: { type: String }, |
| 103 | + email: { type: String }, |
| 104 | +}); |
| 105 | + |
| 106 | +// Will make sure that 'User' table has the same format as the model |
| 107 | +db.autoupdate('User', function(err) { |
| 108 | + if (err) { |
| 109 | + console.log(err); |
| 110 | + return; |
| 111 | + } |
| 112 | + |
| 113 | + User.create({ |
| 114 | + name: 'Tony', |
| 115 | + email: 'tony@t.com', |
| 116 | + }, function(err, user) { |
| 117 | + console.log(err, user); |
| 118 | + }); |
| 119 | + |
| 120 | + User.find({ where: { name: 'Tony' }}, function(err, users) { |
| 121 | + console.log(err, users); |
| 122 | + }); |
| 123 | + |
| 124 | + User.destroyAll(function() { |
| 125 | + console.log('example complete'); |
| 126 | + }); |
| 127 | +}); |
| 128 | +``` |
0 commit comments