63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
/*
|
|
Copyright (c) 2012, Oracle and/or its affiliates. All rights
|
|
reserved.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; version 2 of
|
|
the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
02110-1301 USA
|
|
*/
|
|
|
|
|
|
var conf = require("../adapter_config.js"),
|
|
path = require("path"),
|
|
fs = require("fs");
|
|
|
|
|
|
/* getDBServiceProvider()
|
|
The internal DBServiceProvider modules are located in spi_dir.
|
|
An external DBServiceProvider module "x" must be loadable using:
|
|
require("x/x_service_provider.js")
|
|
*/
|
|
|
|
exports.getDBServiceProvider = function(impl_name) {
|
|
var existsSync = fs.existsSync || path.existsSync;
|
|
var impl_module_file = path.basename(impl_name) + "_service_provider.js";
|
|
var externalModule = path.join(impl_name, impl_module_file);
|
|
var internalModule = path.join(conf.spi_dir, impl_name, impl_module_file);
|
|
var isInternalImpl = existsSync(internalModule);
|
|
var service, error;
|
|
|
|
if(isInternalImpl) {
|
|
service = require(internalModule);
|
|
}
|
|
else {
|
|
try {
|
|
service = require(externalModule);
|
|
}
|
|
catch(e) {
|
|
error = new Error("getDBServiceProvider: provider " + impl_name +
|
|
" does not exist.");
|
|
error.cause = e;
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/* Now verify that the module can load its dependencies.
|
|
This will throw an exception if it fails.
|
|
*/
|
|
service.loadRequiredModules();
|
|
|
|
return service;
|
|
};
|