7.1 இணைப்புக் குளம்

இன்று நாம் இன்னும் கூடுதலான தொழில் ரீதியாக தரவுத்தளத்துடன் எவ்வாறு வேலை செய்வது என்பதைக் கற்றுக்கொள்வோம். இப்போது நாம் ஆங்கிலத்தில் நூல் குளம் அல்லது இணைப்புக் குளம் பற்றி பேசுவோம் .

தரவுத்தளத்துடன் இணைக்க சிறிது நேரம் ஆகும். குறிப்பாக தரவுத்தளம் தொலைவில் இருந்தால். ஒவ்வொரு கோரிக்கைக்கும் நாங்கள் தரவுத்தளத்துடன் இணைப்பை உருவாக்கினால், எங்கள் பயன்பாட்டின் பதில் நம்பமுடியாத வேகத்தில் மெதுவாக இருக்கும். அது உட்கொள்ளும் வளங்களைக் குறிப்பிடவில்லை.

இத்தகைய சிக்கல்களுக்கு ஒரு தீர்வாக, தளத்திற்கான இணைப்புகளை சில தொகுப்பில் சேமிக்க முன்மொழியப்பட்டது, இது நூல் குளம் என்று அழைக்கப்படுகிறது.

நாம் ஒரு புதிய இணைப்பைக் கோரும்போது, ​​இணைப்புக் குளம் அதை உருவாக்குகிறது, மூடப்படும்போது, ​​​​அது அதை மூடாது, ஆனால் அதை இணைப்புக் குளத்தில் சேமிக்கிறது. மேலும் இணைப்புக் குழுவிலிருந்து மீண்டும் ஒரு இணைப்பைக் கோரினால், அது புதிய ஒன்றை உருவாக்குவதற்குப் பதிலாக பழையவற்றில் ஒன்றை நமக்குத் தரும்.

உண்மையில், பயன்பாடு ஒரு சிறப்பு இயக்கி மூலம் செயல்படுகிறது, இது வழக்கமான ஜேடிபிசி டிரைவருக்கான ரேப்பர் மற்றும் குளத்துடன் வேலை செய்வதற்கான கூடுதல் செயல்பாட்டைக் கொண்டுள்ளது. இந்த சூழ்நிலையை பின்வருமாறு குறிப்பிடலாம்:

இணைப்பு குளம்

புரோகிராமர் இணைப்புக் குளத்திற்கான அமைப்புகளை கைமுறையாக அமைக்கலாம்: செயலில் உள்ள இணைப்புகளின் எண்ணிக்கை, காலக்கெடு போன்றவை.

குறிப்பாக தீவிரமான சூழ்நிலைகளில், உங்கள் சொந்த இணைப்புக் குளத்தை நீங்கள் எழுதலாம்: இணைப்புகளின் பட்டியலைக் கொண்டிருக்கும் ஒரு வகுப்பு. இது நெருங்கிய செயல்பாட்டை மேலெழுதிவிடும், இது இணைப்பை மீண்டும் பட்டியலுக்குத் திருப்பிவிடும், மேலும் திறந்த இணைப்பு டைமர் போன்ற பல நன்மைகள் இருக்கும். நீண்ட நேரம் இணைப்பு இல்லாத போது, ​​இணைப்பு மூடப்படும்.

7.2* இன்டர்ஃபேஸ் டேட்டா சோர்ஸ் மற்றும் கனெக்ஷன்பூல் டேட்டா சோர்ஸ்

நூல் குளம் பொதுவாக டேட்டாசோர்ஸ் பொருளுடன் இணைந்து செயல்படுகிறது. இந்த பொருளை தொலை தரவுத்தளத்தின் சுருக்கமாக கருதலாம். Data Source என்ற பெயரையே Data Source என மொழிபெயர்க்கலாம். இது ஒரு வகையான குறிப்பு.

DataSource ஆப்ஜெக்ட்கள் ஒரு தரவுத்தளத்துடன் ஒரு உடல் இணைப்பைப் பெறப் பயன்படுத்தப்படுகின்றன மற்றும் DriverManager க்கு மாற்றாக உள்ளன. ஜேடிபிசி டிரைவரை பதிவு செய்ய வேண்டிய அவசியம் இல்லை. இணைப்பை நிறுவுவதற்கு பொருத்தமான அளவுருக்களை மட்டுமே அமைக்க வேண்டும்getConnection() முறையை இயக்கவும்.

DataSource வகையின் பொருளை உள்நாட்டில் (நேரடியாக பயன்பாட்டில்) உருவாக்கும் போது, ​​JDBC இயக்கி வழங்குநரால் வழங்கப்பட்ட பொருத்தமான முறைகளால் இணைப்பு அளவுருக்கள் அமைக்கப்படுகின்றன. இந்த முறைகள் DataSource இடைமுகத்தால் வரையறுக்கப்படவில்லை, ஏனெனில் வெவ்வேறு விற்பனையாளர்களிடமிருந்து DBMS உடன் இணைப்பதற்கான அளவுருக்கள் வகையிலும் எண்ணிக்கையிலும் வேறுபடலாம் (உதாரணமாக, அனைத்து DBMS க்கும் இயக்கி அல்லது பிணைய நெறிமுறை குறிப்பிடப்பட வேண்டிய அவசியமில்லை).

எனவே, Oracle DBMS உடன் பணிபுரியும் போது, ​​தொடர்புடைய தொகுப்பைப் பயன்படுத்தவும், முறைகளைப் பெறவும், OracleDataSource வகையின் ஒரு பொருளைப் பெறுவது அவசியம், இது DataSource இடைமுகத்தை செயல்படுத்தும் அதே பெயரின் வகுப்பின் எடுத்துக்காட்டு. எனவே, டேட்டாசோர்ஸ் வகையின் பொருள்களை உருவாக்கும் இந்த வழி, உங்கள் குறியீட்டை குறைந்த கையடக்கமாகவும், இயக்கியின் குறிப்பிட்ட செயலாக்கத்தைச் சார்ந்ததாகவும் மாற்றுகிறது.

DataSource வகைப் பொருள்களின் உள்ளூர் பயன்பாட்டை விளக்கும் குறியீடு உதாரணம் கீழே உள்ளது.

import java.sql.*;
import javax.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.pool.*;

public class DataSource {
    public static void main(String[] args) {
    	try {
        	OracleDataSource ods = new OracleDataSource();

        	ods.setUser("root");
        	ods.setPassword("secret");
        	ods.setDriverType("thin");
        	ods.setDatabaseName("test");
        	ods.setServerName("localhost");
        	ods.setPortNumber(1521);

        	Connection connection = ods.getConnection();
        	System.out.println("Connection successful!!!");

    	} catch (SQLException se) {
        	se.printStackTrace();
    	}
    	System.out.println("Goodbye!");
	}
}

7.3* JNDI இடைமுகம்

டேட்டாசோர்ஸ் வகையின் பொருள்களின் முழு திறன்களும் JNDI இடைமுகத்தின் பயன்பாட்டுடன் இணைந்து வெளிப்படுத்தப்படுகின்றன. JNDI என்பது பெரிய சர்வர் பயன்பாடுகளுக்கான ஒரு சிறப்பு சேவையாகும் (ஒரு கோப்பகம் போன்றது), இது ஒரு சேவையை மற்றொரு சேவையுடன் இணைக்க அனுமதிக்கிறது.

பெயர் மற்றும் அடைவு சேவையைப் பயன்படுத்துவது, கணினி நிர்வாகியால் முன்னர் உருவாக்கப்பட்ட தரவுமூல வகைப் பொருட்களை முன் வரையறுக்கப்பட்ட இணைப்பு அளவுருக்களுடன் சேமிக்க உங்களை அனுமதிக்கிறது. சூரியனால் உருவாக்கப்பட்ட சில நிலையான சொத்து (அளவுரு) பெயர்கள் பின்வருமாறு:

சொத்தின் பெயர் ஜாவா தரவு வகை நோக்கம்
தரவுத்தள பெயர் லேசான கயிறு தரவுத்தளத்தின் பெயர்
சர்வர் பெயர் லேசான கயிறு சர்வர் பெயர்
பயனர் லேசான கயிறு பயனர் பெயர் (ஐடி)
கடவுச்சொல் லேசான கயிறு பயனர் கடவுச்சொல்
போர்ட் எண் முழு எண்ணாக DBMS சர்வர் போர்ட் எண்

டேட்டாசோர்ஸ் மற்றும் JNDI இடைமுகங்களின் கலவையானது J2EE கூறு தொழில்நுட்பத்தின் அடிப்படையில் பல அடுக்கு நிறுவன பயன்பாடுகளின் வளர்ச்சியில் முக்கிய பங்கு வகிக்கிறது.

உங்கள் பயன்பாட்டுக் குறியீட்டில் DataSource மற்றும் JNDI இடைமுகங்களின் கலவையைப் பயன்படுத்தினால், பெயரிடுதல் மற்றும் அடைவுச் சேவையிலிருந்து DataSource வகைப் பொருளை மட்டுமே நீங்கள் கோர வேண்டும். இந்த வழக்கில், இணைப்பின் விவரங்கள் மற்றும் இயக்கியின் குறிப்பிட்ட செயலாக்கத்தைப் பொறுத்து நிரல் குறியீடு ஆகியவை பெயர் மற்றும் அடைவு சேவையில் சேமிக்கப்பட்ட பொருளில் உள்ள பயன்பாட்டிலிருந்து மறைக்கப்படுகின்றன.

இவ்வாறு, டேட்டாசோர்ஸ் மற்றும் ஜேஎன்டிஐ வகையின் பொருள்களைப் பகிர்வது ஒன்றுக்கொன்று சுயாதீனமாகச் செய்யப்படும் இரண்டு படிகளை உள்ளடக்கியது:

  1. Context.bind()நீங்கள் பெயரிடும் மற்றும் அடைவு சேவையில் டேட்டாசோர்ஸ் வகையின் பெயரிடப்பட்ட பொருளைச் சேமிக்க வேண்டும் javax.naming.
  2. ஐப் பயன்படுத்தி பயன்பாட்டில் உள்ள பெயரிடுதல் மற்றும் கோப்பகச் சேவையிலிருந்து DataSource வகைப் பொருளைக் கோரவும் Context.lookup(). DataSource.getConnection()அதன் பிறகு, தரவுத்தளத்துடன் இணைப்பைப் பெற அதன் முறையைப் பயன்படுத்தலாம் .

பின்வருபவை JNDI இடைமுகம் மற்றும் OracleDataSource வகையின் ஒரு பொருளை ஒன்றாகப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு.

// Create a key JNDI object
Hashtable env = new Hashtable();
env.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
env.put (Context.PROVIDER_URL, "file:JNDI");
Context ctx = new InitialContext(env);

// Get the DataSource object by its name
DataSource ods = (DataSource) ctx.lookup("myDatabase");

// Get the Connection from the DataSource object
Connection connection = ods.getConnection();
System.out.println("Connection successful!!!");

JNDI இன் வேலையை நாங்கள் பகுப்பாய்வு செய்ய மாட்டோம். இது இந்தப் பாடத்தின் எல்லைக்கு அப்பாற்பட்டது. பெரிய பயன்பாடுகளில் இந்த அணுகுமுறை மிகவும் பொதுவானது என்பதை நீங்கள் தெரிந்து கொள்ள வேண்டும் என்று நான் விரும்புகிறேன். எதிர்காலத்தில் இதுபோன்ற குறியீட்டைப் பார்த்தால் தொலைந்து போகாதீர்கள்.

இது எப்படி வேலை செய்கிறது என்பது முக்கியமில்லை. JNDI சேவையின் மூலம் சேவை கோப்பகத்தில் பதிவுசெய்யப்பட்ட எந்தவொரு சேவையின் ப்ராக்ஸி பொருளையும் நீங்கள் பெற முடியும் என்பதை நீங்கள் அறிந்து கொள்ள வேண்டும். இப்படித்தான் நீங்கள் DataSource ஆப்ஜெக்டைப் பெற்று, தரவுத்தளத்துடன் வேலை செய்ய அதைப் பயன்படுத்துகிறீர்கள்.

7.4 இணைப்புக் குளத்தின் எடுத்துக்காட்டுகள்

நாம் தொடங்கிய இடத்திற்கு வருவோம் - இணைப்புக் குளங்கள்.

ஜாவா புரோகிராமர்கள் தங்கள் திட்டங்களில் இணைப்புக் குளங்களின் பல்வேறு செயலாக்கங்களைக் கொண்ட நூலகங்களைப் பயன்படுத்துகின்றனர். அவற்றில் மூன்று மிகவும் பிரபலமானவை:

  • அப்பாச்சி காமன்ஸ் டிபிசிபி
  • C3PO
  • ஹிகாரிசிபி

அப்பாச்சி திட்டம் ஒரு நல்ல இணைப்புக் குளத்தை முதலில் உருவாக்கியது, இது டாம்கேட் வலை சேவையகத்திலும் பயன்படுத்தப்படுகிறது. அதனுடன் வேலை செய்வதற்கான ஒரு எடுத்துக்காட்டு:

public class DBCPDataSource {

    private static BasicDataSource ds = new BasicDataSource();
    static {
    	ds.setUrl("jdbc:h2:mem:test");
    	ds.setUsername("user");
    	ds.setPassword("password");
    	ds.setMinIdle(5);
    	ds.setMaxIdle(10);
    	ds.setMaxOpenPreparedStatements(100);
    }

    public static Connection getConnection() throws SQLException {
    	return ds.getConnection();
    }

    private DBCPDataSource(){ }
}

இரண்டாவது மிகவும் பிரபலமான குளம் C3PO ஆகும் . வித்தியாசமான பெயர்கள், நான் ஒப்புக்கொள்கிறேன். C3PO என்ற பெயர் ஸ்டார் வார்ஸின் c3po ரோபோவைக் குறிக்கிறது. மேலும் CP என்பது இணைப்புக் குளத்தின் சுருக்கமாகும்.

public class C3p0DataSource {

    private static ComboPooledDataSource cpds = new ComboPooledDataSource();
    static {
    	try {
        	cpds.setDriverClass("org.h2.Driver");
        	cpds.setJdbcUrl("jdbc:h2:mem:test");
        	cpds.setUser("user");
        	cpds.setPassword("password");
    	} catch (PropertyVetoException e) {
            // handle the exception
    	}
    }

    public static Connection getConnection() throws SQLException {
    	return cpds.getConnection();
    }

    private C3p0DataSource(){}
}

அதற்கான ஆவணங்களை அதிகாரப்பூர்வ பக்கத்தில் காணலாம் .

இறுதியாக, நம் காலத்தில் மிகவும் பிரபலமான இணைப்புக் குளம் ஹிகாரிசிபி :

public class HikariCPDataSource {

    private static HikariConfig config = new HikariConfig();
    private static HikariDataSource ds;

    static {
    	config.setJdbcUrl("jdbc:h2:mem:test");
    	config.setUsername("user");
    	config.setPassword("password");
    	config.addDataSourceProperty("cachePrepStmts", "true");
    	config.addDataSourceProperty("prepStmtCacheSize", "250");
    	config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    	ds = new HikariDataSource(config);
    }

    public static Connection getConnection() throws SQLException {
    	return ds.getConnection();
    }

    private HikariCPDataSource(){}
}

இதோ அவருடைய அதிகாரப்பூர்வ GitHub பக்கம் .

மற்றும் கட்டமைப்பு பற்றிய நல்ல கட்டுரை .