4.4.5 Implementing database connection processing
The following indicates the conditions for developing plugins to be connected to a database:
-
Processing that acquires the data source is implemented by the plugin initialization processing (PluginInitializer class of the IPluginInitializer interface).
-
Data source lookup processing is implemented by the init method of the PluginInitializer class.
If you are developing plugins to be connected to a database, the following implementations are recommended:
-
If an attempt to acquire data sources fails, UCNPPluginUserException is thrown.
-
Data source update processing is implemented by the inputFromNode method.
-
Data source reference processing is implemented by the outputToNode method.
-
For plugins linked with external systems, the update and reference timing is synchronized by using other plugins.
- Note
-
If you ignore a failure of the data source lookup processing and then terminate the plugin start processing, the next lookup processing is not executed until you restart Navigation Platform.
Because the lookup processing fails by either of the following causes, UCNPPluginUserException must be thrown to prevent Navigation Platform from starting:
-
The resource adapter is not running.
-
The resource adapter settings are inconsistent with the plugin implementation.
-
- Organization of this subsection
(1) Example of implementing plugin initialization processing
// Store the data source in the static member variable so that the data source can be acquired from the inputFromNode method. private static DataSource mDs; @Override public void init() throws UCNPPluginUserException { try { // Data source lookup processing must be performed within the init method. InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup( "java:comp/env/jdbc/TP_Connector_for_HiRDB_Type4"); mDs = ds; } catch (NamingException e) { // If lookup processing fails, UCNPPluginUserException must be thrown. UCNPPluginUserException ue = new UCNPPluginUserException( "Lookup processing failed.", e); throw ue; } } public static DataSource getDataSource() { return mDs; }
(2) Example of implementing the outputToNode method
public Map<String, Object> outputToNode(HttpSession session, Map<String, Object> param){ Map<String, Object> map = new HashMap<String, Object>(); DataSource ds = PluginInitializer.getDataSource(); // Acquire the instance Connection con = null; PreparedStatement statement = null; String name = null; try { // Establish a connection con = ds.getConnection(); // Execute SQL // The outputToNode method must perform Reference processing statement = con.prepareStatement("SELECT NAME FROM TP_TBL"); statement.setString(1, uid); ResultSet set = statement.executeQuery(); // Obtain results if (set.next()) { name = set.getString(1); } Map<String, String> rtnParm = new HashMap<String, String>(); rtnParm.put("outputParam1", name); map.put("ucnp.next.params.map ",rtnParm); } catch (SQLException e) { // Store the error information in response and interrupt transition. map.put("ucnp.error.message","An error occurred during DB access."); map.put("ucnp.error.type","NG"); } finally { if (statement != null) { try { statement.close(); } catch (SQLException e) { } } if (con != null) { try { con.close(); } catch (SQLException e) { } } } return name; }