কোনও মডেল বিনের (পুনঃব্যবহার) স্থির ক্ষেত্র হিসাবে জিসন উদাহরণটি ব্যবহার করা ঠিক কি?


138

আমি যে মডেলটি প্রয়োগ করেছি তা এখানে:

public class LoginSession {
    private static final Gson gson = new Gson();

    private String id;
    private String name;
    private long timestamp;

    public LoginSession(String id, String name) {
        this.id = id;
        this.name = name;
        this.timestamp = System.currentTimeMillis();
    }

    public String toJson() {
        return gson.toJson(this);
    }

    public static LoginSession fromJson(String json) {
        checkArgument(!isNullOrEmpty(json));
        return gson.fromJson(json, LoginSession.class);
    }
}

আমি ভেবেছিলাম প্রতিটি লগইনসেশন দৃষ্টান্তের জন্য নতুন গসন উদাহরণ তৈরি করা অকেজো।

তবে আমি যা নিয়ে চিন্তিত তা হ'ল থ্রেড-সুরক্ষা বিষয়। প্রায় 1000+ টি উদাহরণ / সেকেন্ড তৈরি করা হবে।

স্থির ক্ষেত্র হিসাবে জিসন দৃষ্টান্তটি ব্যবহার করা ঠিক কি?

কোনও পরামর্শ / সংশোধনের জন্য ধন্যবাদ।

উত্তর:


133

এটা আমার কাছে ঠিক আছে। জিএসওএন দৃষ্টান্তে এমন কোনও কিছুই নেই যা এটিকে নির্দিষ্ট উদাহরণের সাথে সম্পর্কিত করে LoginSession, তাই এটি স্থির হওয়া উচিত।

জিএসওএন দৃষ্টান্তগুলি থ্রেড-সেফ হওয়া উচিত , এবং এটির ক্ষেত্রে একটি বাগ ছিল।


@ স্লট, আপনি ছেলেরা কীভাবে পুল / জিএসনের উদাহরণ পুনরায় ব্যবহার করবেন? আপনি প্রতিবার সিরিয়ালাইজ করার দরকার আছে কি একবার ইনস্ট্যান্ট করবেন? অথবা থ্রেডলোকাল পুল ব্যবহার করবেন?
দিলুম রানাতুঙ্গা

আমরা গুগল ভলির সাথে একসাথে জিএসএন ব্যবহার করি এবং যখন আমরা জেএসএন ডেটা সমবর্তীভাবে পার্স করি তখন আমরা এই সমস্যাটি দেখতে পাই। আমি যা দেখতে পাচ্ছি তা থেকে এই সম্পর্কিত যে আমরা ডেটটাইম মানগুলি পার্স করার জন্য একটি টাইমস্ট্যাম্প সংজ্ঞায়িত করি।
স্লট

1
ডেটটাইম থ্রেড নিরাপদ নয়, এটি কারণ হতে পারে, জিএসওএন থ্রেড নিরাপদ নয় not
আন্দ্রেয়াস ম্যাটিসন

20

মূল Gsonশ্রেণি থ্রেড-নিরাপদ। আমি কেবল একটি থ্রেড-সুরক্ষার সমস্যার মুখোমুখি হয়েছি যা অনুমিতভাবে জিএসএন-এর সাথে ছিল। সমস্যাটি যখন কোনও কাস্টম ব্যবহার করার সময় JsonDeserializerএবং পার্সিং এবং ফর্ম্যাট করার JsonSerializerজন্য ঘটেছিল Date। দেখা গেল, থ্রেড-সুরক্ষা সমস্যাটি আমার পদ্ধতির একটি স্থির SimpleDateFormatউদাহরণ ব্যবহারের সাথে ছিল যা থ্রেড-নিরাপদ নয়। আমি একবারে SimpleDateFormatএকটি ThreadLocalস্থিতি স্থির করে ফেললাম , সবকিছু ঠিকঠাক হয়ে গেল।


4
অ্যাপাচি কমন্স ফাস্টডেটফর্ম্যাট (কমন্স-ল্যাংয়ের অংশ) ব্যবহার করা আরও ভাল বিকল্প হতে পারে, যা স্পষ্টতই থ্রেডসেফ। commons.apache.org/proper/commons-lang/apidocs/org/apache/...
Marceau

ধন্যবাদ @ জায়ান দুর্দান্ত টিপ!

8

মন্তব্য অনুসারে বিদ্যমান ইউনিট পরীক্ষা সত্যিই খুব বেশি পরীক্ষা করে না, থ্রেড সুরক্ষার সাথে সম্পর্কিত যে কোনও বিষয়ে সতর্ক থাকুন ...

থ্রেড সুরক্ষার জন্য একটি ইউনিট পরীক্ষা করা আছে :

/**
 * Tests for ensuring Gson thread-safety.
 *
 * @author Inderjeet Singh
 * @author Joel Leitch
 */
public class ConcurrencyTest extends TestCase {
  private Gson gson;
  ...

আপনি ভাবতে পারেন যে এই ইউনিট পরীক্ষাটি প্রতিটি সম্ভাব্য মেশিন কনফিগারেশনে প্রতিটি সম্ভাব্য সমস্যা খুঁজে পাওয়ার জন্য যথেষ্ট? এ সম্পর্কে কোন মন্তব্য?

ডক্সে এই বাক্যটিও রয়েছে :

জসন অপারেশনগুলি চালনার সময় গসন উদাহরণটি কোনও রাজ্য রক্ষণ করবে না। সুতরাং, একাধিক জসন সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজেশন ক্রিয়াকলাপগুলির জন্য আপনি একই জিনিসটি পুনরায় ব্যবহার করতে মুক্ত free


3
আমি বলতাম এই ইউনিট পরীক্ষাটি সম্মতিযুক্ত সমস্যাগুলি সনাক্ত করতে খুব খারাপভাবে অপর্যাপ্ত। প্রথমত, মাইবজেক্টটি একটি তুচ্ছ শ্রেণীর সাথে কোনও জটিল সংগ্রহের সাথে জড়িত নয় সুতরাং তালিকাগুলি এবং মানচিত্র এবং অন্যান্য জটিল বিষয়গুলির সমবর্তী ডি / সিরিয়ালাইজেশন পরীক্ষা করা হয় না। দ্বিতীয়ত, সিরিয়ালাইজেশন 10 টি প্রতিটি থ্রেডের জন্য কেবল 10 বার পুনরাবৃত্তি করা হয় যা অপর্যাপ্ত। তৃতীয়ত, সম্মতিযুক্ত ত্রুটিগুলি যেভাবেই হোক না কেন পরীক্ষা করা বেশ কঠিন কারণ বিভিন্ন হার্ডওয়্যার কনফিগারেশনের বিভিন্ন রানটাইম বৈশিষ্ট্য রয়েছে, সুতরাং যে কোনও পরীক্ষা কেবলমাত্র সমস্ত কনফিগারেশনে চালানোর গ্যারান্টিযুক্ত থাকলেই বৈধ হবে।
লরেন্স ডল

1
উদাহরণস্বরূপ, এই পরীক্ষাটি সম্ভবত একটি একক কোর মেশিনে কোনও সামঞ্জস্যপূর্ণ ত্রুটি খুঁজে পাবে না, যেহেতু প্রতিটি থ্রেড সম্ভবত একক টাইমস্লাইসের মধ্যে সম্পূর্ণ হবে এবং থ্রেডগুলি একযোগে নয়, ধারাবাহিকভাবে চলবে।
লরেন্স ডল

3
বলার অপেক্ষা রাখে না এটি থ্রেডসেফ নয়, কেবলমাত্র এই পরীক্ষাটি দূরবর্তীভাবে এটির নিশ্চয়তা দেয় না।
লরেন্স ডল

1

কিছুক্ষণ আগে থ্রেড সুরক্ষা নিয়ে আমাদের সমস্যা ছিল এবং আমরা এপাচি কমনে ফাস্টডেটফর্ম্যাট ব্যবহার করে এটি সমাধান করেছি।

এটিকে ঘিরে জিস্টের জন্য একটি সংক্ষিপ্ত লিঙ্ক তৈরি করা হয়েছে যাতে লোকেরা ভাবছেন যে জিসন উদাহরণগুলি পুনরায় ব্যবহার করা যেতে পারে help তাদের সেটার নেই এবং সমস্ত ওয়ার্স ব্যক্তিগত।

সিম্পলডেট ফরম্যাট ইস্যু ব্যতীত অন্য কোথাও আমি এগুলিকে রাষ্ট্র বজায় রাখতে দেখছি না।

এটি পরীক্ষা করে দেখুন । এইগুলির মধ্যে একটির জবাব দেওয়ার এটি আমার প্রথমবার। একবারের জন্য ফেরত দেওয়ার জন্য খুশি। :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.