java जावा एसई में सीडीआई और जेपीए का सबसे आसान तरीका क्या है?




jpa cdi (2)

पीटर का उत्तर काम करने लगता है, लेकिन मेवेन निर्भरता पुरानी है ( यह बग देखें)

<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>2.3.1.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.weld</groupId>
    <artifactId>weld-core</artifactId>
    <version>2.3.1.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jandex</artifactId>
    <version>1.2.2.Final</version>
</dependency>

मैं जावा एसई में होना चाहूंगा

@Stateless
public class CarDAO {
    @Inject
    private EntityManager em;

    public Car findById(Long id) {
        return em.find(Car.class, id);
    }
}

@Singleton
public class Application {
    @Inject
    private CarDAO carDAO;

    public void run() {
        Car car = carDAO.findById(44);
        System.out.println(car);
    }
}

public class EntryPoint {
    public static void main(String[] args) {
        Application application = // missing code
        application.run();
    }
}

इसे हासिल करने के लिए मुझे क्या करना है? मैं पोस्टग्रेज़ डाटाबेस का उपयोग कर रहा हूं, और मेरी परियोजना में मेवेन

मैं पहले से ही वेल्ड के बारे में कुछ पढ़ रहा था (लेकिन यह केवल सीडीआई की तरह दिखता है) मैं नहीं जानता कि कैसे इकाई प्रबंधक को इंजेक्ट करने के लिए वेल्ड क्षमता जोड़ने के लिए मुझे पता है कि मैं साथ ही इकाई प्रबंधक प्राप्त कर सकता हूं

EntityManagerFactory emf = Persistence.createEntityManagerFactory("mgr");
EntityManager em = emf.createEntityManager();

लेकिन इंजेक्शन के रूप में यह बहुत सुविधाजनक नहीं है

अगर इस बारे में कोई ट्यूटोरियल है तो यह बहुत अच्छा होगा। वैसे भी, किसी भी मदद के लिए धन्यवाद!


सबसे पहले, ईजेबी जावा ईई का हिस्सा हैं, इसलिए आप जावा एसई में उनका उपयोग नहीं कर सकते। हालांकि, सीडीआई का उपयोग जावा एसई पर्यावरण में किया जा सकता है, मेरा उदाहरण आपको दिखाएगा कि वेल्ड के साथ कैसे उपयोग करें, लेकिन अन्य कार्यान्वयन भी हैं - ध्यान दें कि सीडीआई केवल विनिर्देश है और वेल्ड उस विनिर्देश के क्रियान्वयन में से एक है।

वेल्ड का उपयोग करने के लिए, आपको weld-se-xxx-Final.jar पर weld-se-xxx-Final.jar होगा या weld-se-xxx-Final.jar में अपनी निर्भरता को निर्दिष्ट करना चाहिए

<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se</artifactId>
    <version><!-- See https://mvnrepository.com/artifact/org.jboss.weld.se/weld-se for current version --></version>
</dependency>

फिर आपको अपने मुख्य पद्धति में कंटेनर को स्टार्टअप करने की आवश्यकता है, इसलिए ऐसा कुछ करें

public static void main(String[] args) throws IOException {
    Weld weld = new Weld();
    WeldContainer container = weld.initialize();
    Application application = container.instance().select(Application.class).get();
    application.run();
    weld.shutdown();
}

आपको इसे शुरू करना चाहिए, फिर आप सीडीआई प्रोड्यूसर्स का इस्तेमाल अपने EntityManager इंजेक्शन के लिए कर सकते हैं

@Produces
@RequestScoped
public EntityManager createEntityManager() {
   return Persistence.createEntityManagerFactory("mgr").createEntityManager();
}

public void closeEM(@Disposes EntityManager manager) {
   manager.close();
}

जावा एसई में सीडीआई का उपयोग करने के लिए वेल्ड दस्तावेज भी देखें





entitymanager