我有一个 SPI 实现,它是:
1) EAR 部署:我尝试了 EAR 部署并将我的 .ear 部署到 /standalone/deployments。这解决了捆绑在 EAR 的 lib 文件夹中的外部 jar 问题。但是现在 SPI 没有初始化(我在调试时看到了这一点),并且当我触发 SPI 时也出现异常:
11:34:02,185 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 9.0.2 (WildFly Core 10.0.3.Final) started in 12070ms - Started 732 of 1031 services (613 services are lazy, passive or on-demand)
11:34:18,209 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: java.lang.NullPointerException
at org.keycloak.keycloak-services@9.0.2//org.keycloak.services.DefaultKeycloakSessionFactory.getAllProviderIds(DefaultKeycloakSessionFactory.java:362)
Run Code Online (Sandbox Code Playgroud)
然后我想也许 keycloak 无法通过独立/部署部署导入扩展 SPI,如果您开发自定义 SPI keycloak 建议(或需要?)模块部署,这里也会提到这一点。
2)然后我尝试了模块部署;现在我可以看到我的自定义 SPI 正在初始化,但是现在 keycloak 找不到我的外部 …
我正在阅读有关Java Volatile关键字的文章,遇到了一些问题。点击这里
public class MyClass {
private int years;
private int months
private volatile int days;
public void update(int years, int months, int days){
this.years = years;
this.months = months;
this.days = days;
}
}
Run Code Online (Sandbox Code Playgroud)
udpate()方法写入三个变量,其中只有几天是可变的。
完全易失的可见性保证意味着,当将值写入天时,线程可见的所有变量也将写入主存储器。这意味着,当将值写入天时,年和月的值也将写入主存储器。
那么,“线程可见的所有变量”是什么意思?这是否意味着线程堆栈中的所有变量?“线程可见”是什么意思?我如何知道该线程可以看到几个月和几年?
将我的班级分成更小的部分我遇到了麻烦.我们有一个糟糕的情况,Dto拥有30个不同的Dtos.现在我们需要这个selectDto的映射,这也迫使我们制作30个不同的映射类.(我们在项目中也使用了mapstruct,这个场景与mapstruct可以处理的不同)
现在我的问题开始了:
我在相应的课程中制作了所有映射.在基础selectDto中,我的构造函数中有26个映射器,这很糟糕:
SonarLint:构造函数有26个参数,大于7个授权参数
我想方法如何分割这种情况,但我找不到办法.有什么建议?
我的构造函数持有26个参数:
AssignedSelectMapper(AssignedOpDtoMapper assignedOpDtoMapper,
AssignedOrderDtoMapper assignedOrderDtoMapper
// many more constructor parameters
) {
this.assignedOptionCodeDtoMapper = assignedOptionCodeDtoMapper;
this.assignedOrderCriteriaDtoMapper = assignedOrderCriteriaDtoMapper;
// all settings
}
Run Code Online (Sandbox Code Playgroud)
我的公共函数映射哪些调用每个映射的私有函数:
public List<AssignedSelect> assignSelectFrom(SelectDto selectDto) {
Objects.requireNonNull(selectionDto, "selectionDto can not be NULL");
List<AssignedSelect> assignedSelects= new ArrayList<>();
assignedSelects.addAll(this.mapOps(selectionDto.getOps()));
assignedSelects.addAll(this.mapOra(selectionDto.getOra()));
assignedSelects.addAll(this.mapOrs(selectionDto.getOrs()));
assignedSelects.addAll(this.mapSs(selectionDto.getSs()));
assignedSelects.addAll(this.mapDels(selectionDto.getDels()));
assignedSelects.addAll(this.mapMs(selectionDto.getMs()));
assignedSelects.addAll(this.mapBrs(selectionDto.getBrs()));
assignedSelects.addAll(this.mapEqs(selectionDto.getEqs()));
assignedSelects.addAll(this.mapPaints(selectionDto.getPaints()));
assignedSelects.addAll(this.mapBas(selectionDto.getBas()));
// more ...
// and more...
return assignedSelects;
}
Run Code Online (Sandbox Code Playgroud)
//我的私有函数的例子,它调用相应的mapper,其中我的所有私有函数都包含不同类的类,如OptionCodeDto.它们不会从相同的接口/类扩展而不能扩展.
private List<AssignedSelectionCriteria> mapOps(List<OptionCodeDto> optionCodeDtos) {
return this.assignedOpDtoMapper.mapCriterias(opDtos);
}
Run Code Online (Sandbox Code Playgroud)
//这里是反向映射.我需要从我的映射返回类型中选择不同类的类
// this is my public function for mapping. …Run Code Online (Sandbox Code Playgroud)