আমরা ড্রাইভার-ম্যানেজারের পরিবর্তে ডেটাসোর্সটি ব্যবহার করব কেন?


89

আমি জাভা জেডিবিসি স্পেসিফিকেশন পড়ছি (বনাম 4) এবং আমি এই বিবৃতিটি সংখ্যায়িত করেছি:

ডেটা সোর্স - এই ইন্টারফেসটি জেডিবিসি ২.০ Oচ্ছিক প্যাকেজ এপিআইতে প্রবর্তিত হয়েছিল। এটি ড্রাইভারম্যানেজারের চেয়ে বেশি পছন্দ কারণ এটি অন্তর্নিহিত ডেটা উত্স সম্পর্কে বিশদটি অ্যাপ্লিকেশনটিতে স্বচ্ছ হতে দেয়

আমি যা বোঝার চেষ্টা করছি তা হ'ল একটি Connectionএবং ক এর মধ্যে পার্থক্য কী DataSourceএবং কেন এটি বিদ্যমান। আমি বোঝাতে চাইছি, উপরের ব্লকটি বলছে যে কোনও ডাটাসোর্স সম্পর্কিত বিবরণটি অ্যাপ্লিকেশনটির জন্য স্বচ্ছ, তবে কোনও সম্পত্তি ফাইলের মধ্যে ব্যবহারকারীর নাম, পাসওয়ার্ড, ইউআরএল ইত্যাদির মতো ডাটাবেস বৈশিষ্ট্যগুলিকে বহিরাগত করা হবে না এবং তারপরে একইভাবে ড্রাইভার ম্যানেজার কাজটি ব্যবহার করবে না?

এবং DataSourceইন্টারফেসটি কি কেবল পুলিং করা যায় এমন সংযোগগুলি ফেরত দেওয়ার একটি সাধারণ উপায় তৈরি করার জন্য তৈরি করা হয়েছে? জাভা ইইতে, অ্যাপ্লিকেশন সার্ভারটি এই ইন্টারফেসটি প্রয়োগ করে এবং অ্যাপ্লিকেশনগুলিকে সংযোগের পরিবর্তে কোনও ডেটাসোর্সের রেফারেন্স রাখার জন্য নিযুক্ত করা হয়েছে?

উত্তর:


72

ভাল স্কেলাবিলিটি এবং রক্ষণাবেক্ষণ

জন্য DriverManager(হোস্ট, পোর্ট, ব্যবহারকারীর নাম, পাসওয়ার্ড, চালক শ্রেণী) ডিবি সাথে সংযোগ স্থাপনের জন্য আপনি সব বিস্তারিত জানতে হবে এবং সংযোগ জন্য। একটি বৈশিষ্ট্য ফাইলে থাকা ব্যক্তিকে বহিরাগত করা আপনার এগুলি জানা দরকার তা সম্পর্কে কোনও পরিবর্তন হয় না।

একটি ব্যবহার করে DataSourceআপনাকে কেবল জেএনডিআই নামটি জানতে হবে। অ্যাপসভারটি বিশদ সম্পর্কে যত্নশীল এবং ক্লায়েন্ট অ্যাপ্লিকেশনটির বিক্রেতা দ্বারা কনফিগার করা হয়নি, তবে এমন কোনও প্রশাসক দ্বারা যেখানে অ্যাপ্লিকেশনটি হোস্ট করা আছে।

স্কেলিবিলিটি:

ধরুন আপনার নিজের সংযোগ তৈরি করতে হবে, আপনি কীভাবে বোঝা পরিবর্তনের সাথে ডিল করবেন, একসাথে আপনার 10 জন ব্যবহারকারী একসময় আপনার 1000 হবে, যখনই আপনার প্রয়োজন হবে যখনই কোনও সংযোগ পেতে পারবেন না এবং পরে এটি 'রিলিজ' করবেন যাতে ডেটাবেস সার্ভারটি না করে সংযোগ থেকে বেরিয়ে যান, যা আপনাকে সংযোগ পুলিংয়ের দিকে নিয়ে যায়। DriverManagerএটি সরবরাহ করে না, DataSourceকরে না।

আপনি যদি একটি সংযোগ পুল নিজেই প্রোগ্রাম করতে যাচ্ছেন তবে আপনাকে ব্যবহার করতে হবে DriverManager, অন্যথায় যান DataSource


4
ডেটাসোর্স ইমপ্লিমেন্টেশনটি ড্রাইভার বিক্রেতা সরবরাহ করেছেন (আসুন মাইএসকিউএল বলি) say ডেটাসোর্স তৈরি করতে সক্ষম হওয়ার জন্য এ্যাপারসভারটির ড্রাইভারটি জানতে হবে। এর পরে এটি কনফিগার করা জেএনডিআই নাম (লজিকাল নাম) এর সাথে আবদ্ধ হওয়ার যত্ন নেয়। নোট করুন যে এই কনফিগারেশন পদক্ষেপের জন্য সমস্ত বিবরণ (ড্রাইভার শ্রেণি, ইউআরএল, ব্যবহারকারীর নাম, পাসওয়ার্ড ইত্যাদি) জানতে হবে। তবে এটি ক্লায়েন্ট অ্যাপ্লিকেশন দ্বারা পরিচিত হওয়ার চেয়ে আরও ভাল।
A4L

4
If you are going to program a connection pool then you have to use DriverManager, otherwise go with Datasource.- আপনি নামগুলি ফ্লিপ করেছেন?
অরুন

4
@ আরুন আমি এটি মনে করি না, ড্রাইভারম্যানেজার ডেটাসোর্সের চেয়ে নিম্ন স্তরের এপিআই।
এল

9
@ কোডেফেইটাইন আমি মনে করি তার অর্থ, আপনি যদি কোনও সংযোগ পুল নিজেই বাস্তবায়ন করতে চান, তবে উল্টানোর মতো কিছুই নেই।
Koray Tugay

4
ডেটা সোর্স সংযোগ পোলিং সরবরাহ করে। শেষ বিবৃতিতে বলা হয়েছে যে আপনি যদি প্রোগ্রাম সংযোগের পোলিং করতে চান ডেটা ম্যানেজারের জন্য যান। এটি প্রথমে কিছুটা বিভ্রান্তিকর হতে পারে। আপনি যদি আপনার অ্যাপ্লিকেশনটিতে সংযোগের পোলিং করতে চান তবে এটি হওয়া উচিত ডেটাসোর্সে যান।
অনিকেত ঠাকুর

38

DriverManager

  • জাভা ক্লাসে সংযোগ তৈরি / বন্ধ হওয়ায় অ্যাপ্লিকেশন কার্যকারিতা ব্যাহত হয়।
  • সংযোগ পুলিং সমর্থন করে না।

DataSource

  • অ্যাপ্লিকেশন কর্মক্ষমতা উন্নত করে কারণ কোনও শ্রেণীর মধ্যে সংযোগ তৈরি / বন্ধ না হয়ে এগুলি অ্যাপ্লিকেশন সার্ভার দ্বারা পরিচালিত হয় এবং রানটাইম থাকাকালীন এনে নেওয়া যায়।
  • এটি সংযোগের পুল তৈরির সুবিধা সরবরাহ করে
  • এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলির জন্য সহায়ক

তবে আপনি যদি নিজের ক্লাস যেমন মাইকনেকশনপুল তৈরি করেন এবং ড্রাইভারম্যানেজারের সাথে এর অভ্যন্তরে কিছু জাদু করেছেন তা কি ডেটাসোর্স ইন্টারফেস প্রয়োগ করে এমন একটি ক্লাস ব্যবহার করার মতো? সংযোগ পেতে কেবলমাত্র একটি সাধারণ ইন্টারফেস থাকার জন্য কি ডেটাসোর্স ইন্টারফেস?
লাকীলুক

4
ঠিক একই নয় spring বসন্তের মতো ফ্রেমওয়ার্ক ডেটাসোর্সের সক্ষমতা এবং এর কার্য সম্পাদন দেখায়।
nav0611

3

কোডের নীচে সংযোগ পাওয়ার জন্য দুটি উপায় দেখায়।

mySqlDataSourceএই লাইনটি যেমন মন্তব্য করা হয় সে ক্ষেত্রে ইউআরএল সম্পর্কে জানার দরকার নেই ।

public class MySqlDataSourceTest {

public static void main(String[] args) throws SQLException, ClassNotFoundException {


    /************** using MysqlDataSource starts **************/
    MysqlDataSource d = new MysqlDataSource();
    d.setUser("root");
    d.setPassword("root");
//  d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
    d.setDatabaseName("manavrachna");
    Connection c =  (Connection) d.getConnection();
    /************** using MysqlDataSource ends**************/


    /************** using DriverManager start **************/
    Class.forName("com.mysql.jdbc.Driver");
    Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
    /************** using DriverManager ends **************/

    Statement st=(Statement) c.createStatement();
    ResultSet rs=st.executeQuery("select id from employee");
    while(rs.next())
    {
        System.out.println(rs.getInt(1));
    }

}

}

2

DataSourceঅবজেক্টস সংযোগ পুলিং এবং বিতরণ লেনদেন সরবরাহ করতে পারে, তাই আপনার DataSourceযদি এই দুটি বৈশিষ্ট্যগুলির একটির প্রয়োজন হয় তবে আপনাকে ব্যবহার করতে হতে পারে ।


ভোট দিন। 'বিতরণ লেনদেন' অন্যান্য উত্তরের জন্য একটি অনুপস্থিত পয়েন্ট
声 远 শেংইউয়ান লু

1

আমরা নিম্নলিখিত হিসাবে একটি ডেটাসোর্স ব্যবহার করে সংযোগ পেতে পারি। যে কোনও ডাটাবেস ক্যোয়ারী সম্পাদন করতে সংযোগটি ব্যবহার করুন।

DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.