日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

可行的DeltaSpike教程

發(fā)布時(shí)間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可行的DeltaSpike教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在一個(gè)最近的項(xiàng)目中,我遇到了一個(gè)有趣的問(wèn)題:采用被賦予單個(gè)對(duì)象的服務(wù)方法,并在一個(gè)夜間過(guò)程的上下文中重用相同的代碼,該過(guò)程獨(dú)立于應(yīng)用程序而在數(shù)千個(gè)相同類(lèi)型的對(duì)象上運(yùn)行。

試圖在兩個(gè)地方維護(hù)如此大小和復(fù)雜性的相同過(guò)程真是荒謬的,所以我需要找到一種共享代碼的方法。 一種可能的解決方案是使用DeltaSpike (Apache的CDI擴(kuò)展集合)提供一種從主要Java / JPA / Hibernate應(yīng)用程序訪(fǎng)問(wèn)實(shí)體和類(lèi)的簡(jiǎn)單方法。

似乎有足夠的文檔來(lái)使DeltaSpike在網(wǎng)絡(luò)上的類(lèi)似情況下運(yùn)行,但是人們對(duì)此應(yīng)用程序的可行性持懷疑態(tài)度。 我的團(tuán)隊(duì)無(wú)法使它在項(xiàng)目的其他部分工作,因此繼續(xù)使用Spring Batch。

最大的障礙是無(wú)法創(chuàng)建功能性的EntityManager,無(wú)論他們?nèi)绾尉o密地遵循可以找到的文檔和示例。 該項(xiàng)目的較小部分為實(shí)現(xiàn)DeltaSpike提供了另一個(gè)很好的候選人,但是在對(duì)以下教程非常熟悉之后,找到了操作方法,并閱讀了正式的實(shí)現(xiàn)說(shuō)明,我被困在同一個(gè)地方:EntityManager將無(wú)法工作,至少不能與我面前的技術(shù)和版本組合使用。

幸運(yùn)的是,我能夠?qū)⒏ヌm肯斯坦的一些教程和示例中的部分放在一起,以針對(duì)我的情況獲得可行的DeltaSpike實(shí)現(xiàn),因此我想我會(huì)分享我發(fā)現(xiàn)的內(nèi)容,因此下次其他人可能會(huì)更輕松一些。

基礎(chǔ)

首先,我正在使用Maven,因此這里是您需要添加的依賴(lài)項(xiàng):

<dependency><groupId>org.apache.deltaspike.cdictrl</groupId><artifactId>deltaspike-cdictrl-api</artifactId><version>1.2.1</version><scope>compile</scope> </dependency><dependency><groupId>org.jboss.weld.se</groupId><artifactId>weld-se</artifactId><version>1.1.16.Final</version><scope>runtime</scope> </dependency><dependency><groupId>org.apache.deltaspike.cdictrl</groupId><artifactId>deltaspike-cdictrl-weld</artifactId><version>1.2.1</version><scope>runtime</scope> </dependency><dependency><groupId>org.apache.deltaspike.core</groupId><artifactId>deltaspike-core-api</artifactId><version>1.5.0</version> </dependency><dependency><groupId>org.apache.deltaspike.modules</groupId><artifactId>deltaspike-jpa-module-api</artifactId><version>1.4.0</version> </dependency><dependency><groupId>org.apache.deltaspike.modules</groupId><artifactId>deltaspike-jpa-module-impl</artifactId><version>1.4.0</version> </dependency>

如您所見(jiàn),我們正在考慮在一個(gè)也需要JBoss / Weld的項(xiàng)目中實(shí)現(xiàn)DeltaSpike。 我所依賴(lài)的其他依賴(lài)項(xiàng)包括javax.enterprise,Hibernate和JPA。 根據(jù)最終的實(shí)現(xiàn),您可能不需要所有這些DeltaSpike依賴(lài)項(xiàng),因此請(qǐng)確保在完成后清理pom.xml。

應(yīng)用程式

對(duì)于我的示例,我將使用一個(gè)基本的Application類(lèi),該類(lèi)遵循您在其他DeltaSpike示例中可能看到的模式:

import javax.enterprise.context.ApplicationScoped; import org.apache.deltaspike.cdise.api.CdiContainer; import org.apache.deltaspike.cdise.api.CdiContainerLoader; import org.apache.deltaspike.cdise.api.ContextControl; import org.apache.deltaspike.core.api.config.ConfigResolver;public class Application {public static void main(String[] args) {CdiContainer cdiContainer = CdiContainerLoader.getCdiContainer();cdiContainer.boot();ContextControl contextControl = cdiContainer.getContextControl();contextControl.startContext(ApplicationScoped.class);//Your code herecdiContainer.shutdown();} }

特別注意這一行:

contextControl.startContext(ApplicationScoped.class);

該行查找?guī)в?#64;ApplicationScoped批注的類(lèi),這些類(lèi)需要包含在上下文中。

EntityManagerProducer

這是棘手的地方。 遵循典型的DeltaSpike教程,將為您提供一個(gè)類(lèi)似于以下內(nèi)容的EntityManagerProducer:

@ApplicationScoped public class EntityManagerProducer {@PersistenceUnitprivate EntityManagerFactory entityManagerFactory;@Produces@Default@RequestScopedpublic EntityManager create(){return this.entityManagerFactory.createEntityManager();}public void dispose(@Disposes @Default EntityManager entityManager){if (entityManager.isOpen()){entityManager.close();}} }

考慮到我要處理的各種因素,我唯一遇到的問(wèn)題是根本不起作用。 無(wú)論我嘗試了什么,EntityManager始終為null。 我懷疑EntityManagerFactory不能正常工作,所以我做了一些挖掘,發(fā)現(xiàn)這種獲取EntityManagerFactory的方法:

private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PERSISTENCE_UNIT", setProperties());

使用此方法,我可以基于在persistence.xml中定義的持久性單元(它具有我在參數(shù)中提供的名稱(chēng))來(lái)獲得一個(gè)有效的EntityManagerFactory。 在這里,我定義了應(yīng)用程序需要成為EntityManagerFactory一部分的實(shí)體,以便能夠執(zhí)行諸如運(yùn)行之類(lèi)的小事情。

這是新的和改進(jìn)的EntityManagerProducer的外觀:

@ApplicationScoped public class EntityManagerProducer {private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PERSISTENCE_UNIT", setProperties());private EntityManager entityManager;protected void closeEntityManager(@Disposes EntityManager entityManager) {if (entityManager.isOpen()) {entityManager.close();}}@Producesprotected EntityManager createEntityManager() {if (entityManager == null) {entityManager = entityManagerFactory.createEntityManager();}return entityManager;}protected Properties setProperties() {properties.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");properties.setProperty("hibernate.show_sql", "false");properties.setProperty("hibernate.hbm2ddl.auto", "none");properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");properties.setProperty("hibernate.jdbc.batch_size", "20");properties.setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver");properties.setProperty("hibernate.connection.url", "JDBC_URL");properties.setProperty("hibernate.default_schema", System.getProperty("SCHEMA_NAME"));properties.setProperty("javax.persistence.jdbc.user", System.getProperty("USER"));properties.setProperty("javax.persistence.jdbc.password", System.getProperty("PASSWORD"));properties.setProperty("org.hibernate.flushMode", "ALWAYS");return properties;}}

注意@ApplicationScoped標(biāo)簽; 這樣可以確保在啟動(dòng)CDI容器時(shí)將此類(lèi)包含在上下文中。 還要注意,您可以設(shè)置屬性以將其傳遞到您創(chuàng)建的EntityManagerFactory中,包括從服務(wù)器參數(shù)中的系統(tǒng)屬性中獲取它們,如果環(huán)境變量可能會(huì)更改應(yīng)用程序的功能,這將非常有用。

最后的想法

希望這為如何設(shè)置和實(shí)現(xiàn)DeltaSpike提供了一個(gè)簡(jiǎn)單有效的示例。

旁注:我最終無(wú)法使用這種方法來(lái)解決問(wèn)題,因?yàn)橐幚淼膶?duì)象數(shù)量比預(yù)期的要大得多(幾百萬(wàn)個(gè)),但是我認(rèn)為分享發(fā)現(xiàn)的內(nèi)容仍然有用。

翻譯自: https://www.javacodegeeks.com/2016/01/working-deltaspike-tutorial.html

總結(jié)

以上是生活随笔為你收集整理的可行的DeltaSpike教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。