Practical উদাহরণ: EntityListeners এর মাধ্যমে Logging এবং Auditing

Entity Listeners এবং Callbacks - জেপিএ  (JPA) - Java Technologies

292

EntityListeners হল JPA এর একটি ফিচার যা Entity ক্লাসে বিভিন্ন ইভেন্ট ট্র্যাক করতে সাহায্য করে। এটি Entity অবজেক্টের lifecycle events (যেমন prePersist, postPersist, preUpdate, postUpdate, preRemove, postRemove) এর সাথে যুক্ত করা যায় এবং এর মাধ্যমে আপনি বিভিন্ন কাজ করতে পারেন, যেমন Logging, Auditing, বা অন্য কোনো রক্ষণাবেক্ষণমূলক কাজ।

JPA এর EntityListeners ব্যবহার করে Logging এবং Auditing কার্যক্রম খুব সহজেই সম্পাদন করা যেতে পারে। এখানে, আমরা Logging এবং Auditing এর জন্য EntityListeners কিভাবে কনফিগার করতে হবে, তা দেখবো।

EntityListeners এর মাধ্যমে Auditing এবং Logging


1. Auditing in JPA using EntityListeners


Auditing সাধারণত ডেটাবেসের মধ্যে কিছু মেটাডেটা (যেমন, ডেটা তৈরি বা আপডেট করার তারিখ, ব্যবহারকারীর নাম) ট্র্যাক করার জন্য ব্যবহৃত হয়। JPA-তে EntityListeners ব্যবহার করে আপনি ডেটা সংশোধনের সময় এই ধরনের তথ্য ট্র্যাক করতে পারেন।

Auditing Example:

ধরা যাক, আমাদের একটি User Entity রয়েছে, এবং আমরা এর createdDate, updatedDate, এবং createdBy, updatedBy ফিল্ডগুলোর জন্য auditing করতে চাই।

Step 1: Create an AuditingListener

AuditingListener নামক একটি ক্লাস তৈরি করা হবে, যা Entity গুলোর লifecycle ইভেন্ট ট্র্যাক করবে।

import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.util.Date;

public class AuditingListener {

    @PrePersist
    public void prePersist(Object entity) {
        if (entity instanceof Auditable) {
            Auditable auditableEntity = (Auditable) entity;
            auditableEntity.setCreatedDate(new Date());
            auditableEntity.setCreatedBy("admin"); // You can dynamically set this as per your user context
        }
    }

    @PreUpdate
    public void preUpdate(Object entity) {
        if (entity instanceof Auditable) {
            Auditable auditableEntity = (Auditable) entity;
            auditableEntity.setUpdatedDate(new Date());
            auditableEntity.setUpdatedBy("admin"); // Dynamically set the updated user
        }
    }
}

এই Listener ক্লাসে, @PrePersist এবং @PreUpdate অ্যানোটেশন ব্যবহার করে, আমরা Entity তৈরি বা আপডেট হওয়ার আগেই অডিটিং ডেটা সেট করব।

Step 2: Define Auditable Interface

আমরা একটি Auditable ইন্টারফেস তৈরি করবো যাতে এই অডিটিং ফিল্ডগুলি থাকবে।

public interface Auditable {
    void setCreatedDate(Date createdDate);
    void setUpdatedDate(Date updatedDate);
    void setCreatedBy(String createdBy);
    void setUpdatedBy(String updatedBy);
}

Step 3: Create the Entity Class

এখন, User Entity ক্লাসে Auditable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে এবং EntityListenersAuditingListener যুক্ত করতে হবে।

import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Id;
import java.util.Date;

@Entity
@EntityListeners(AuditingListener.class)
public class User implements Auditable {
    @Id
    private Long id;
    private String name;
    private Date createdDate;
    private Date updatedDate;
    private String createdBy;
    private String updatedBy;

    // Getters and Setters for all fields

    @Override
    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    @Override
    public void setUpdatedDate(Date updatedDate) {
        this.updatedDate = updatedDate;
    }

    @Override
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    @Override
    public void setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy;
    }
}

এখানে, @EntityListeners(AuditingListener.class) ব্যবহার করা হয়েছে যা AuditingListener ক্লাসের prePersist এবং preUpdate মেথডগুলিকে Entity Lifecycle এর সময় কল করবে এবং অডিটিং তথ্য সেট করবে।

2. Logging in JPA using EntityListeners


Logging সাধারণত Entity পরিবর্তন হওয়ার সময় লগ তৈরি করতে ব্যবহৃত হয়। আমরা Entity-এ পরিবর্তন ঘটানোর পর লগিং করতে EntityListeners ব্যবহার করতে পারি।

Logging Example:

Step 1: Create a LoggingListener

LoggingListener ক্লাসটি Entity-এ Lifecycle ইভেন্টের জন্য লগিং করার জন্য তৈরি করা হবে।

import javax.persistence.PostPersist;
import javax.persistence.PostUpdate;
import javax.persistence.PostRemove;
import java.util.logging.Logger;

public class LoggingListener {

    private static final Logger logger = Logger.getLogger(LoggingListener.class.getName());

    @PostPersist
    public void postPersist(Object entity) {
        if (entity instanceof User) {
            User user = (User) entity;
            logger.info("User created: " + user.getName());
        }
    }

    @PostUpdate
    public void postUpdate(Object entity) {
        if (entity instanceof User) {
            User user = (User) entity;
            logger.info("User updated: " + user.getName());
        }
    }

    @PostRemove
    public void postRemove(Object entity) {
        if (entity instanceof User) {
            User user = (User) entity;
            logger.info("User deleted: " + user.getName());
        }
    }
}

এখানে, @PostPersist, @PostUpdate, এবং @PostRemove অ্যানোটেশন ব্যবহৃত হয়েছে যা Entity-এ বিভিন্ন পরিবর্তন হওয়ার পরে লগ তৈরি করবে।

Step 2: Apply LoggingListener to Entity

এখন, User Entity-তে LoggingListener অ্যাপ্লাই করা হবে।

import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Id;

@Entity
@EntityListeners(LoggingListener.class)
public class User {
    @Id
    private Long id;
    private String name;

    // Getters and Setters for all fields
}

এখানে, @EntityListeners(LoggingListener.class) ব্যবহার করে Entity-এ সংশ্লিষ্ট Lifecycle ইভেন্টগুলির জন্য লগিং লিস্টনার যোগ করা হয়েছে।

Complete Example with Entity, Auditing, and Logging

import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Id;
import javax.persistence.PostPersist;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.util.Date;

@Entity
@EntityListeners({AuditingListener.class, LoggingListener.class})
public class User implements Auditable {
    @Id
    private Long id;
    private String name;
    private Date createdDate;
    private Date updatedDate;
    private String createdBy;
    private String updatedBy;

    @PrePersist
    public void prePersist() {
        System.out.println("Preparing to persist user...");
    }

    @PreUpdate
    public void preUpdate() {
        System.out.println("Preparing to update user...");
    }

    @Override
    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    @Override
    public void setUpdatedDate(Date updatedDate) {
        this.updatedDate = updatedDate;
    }

    @Override
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    @Override
    public void setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy;
    }

    // Getters and setters for other fields
}

সারাংশ


JPA EntityListeners ব্যবহার করে আপনি Auditing এবং Logging কার্যক্রম খুব সহজভাবে ইমপ্লিমেন্ট করতে পারেন। Auditing Entity-এ তৈরি বা আপডেট করার সময় মেটাডেটা (যেমন: তারিখ, ব্যবহারকারী) ট্র্যাক করার জন্য ব্যবহৃত হয়, এবং Logging Entity-এর lifecycle ইভেন্ট ট্র্যাক করে বিভিন্ন ইভেন্ট লগ করার জন্য ব্যবহৃত হয়।

এগুলি Entity lifecycle ইভেন্টে @PrePersist, @PreUpdate, @PostPersist, @PostUpdate, @PostRemove এর মতো অ্যানোটেশন ব্যবহার করে করা যায়, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং রক্ষণাবেক্ষণকে আরও উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...