小编cml*_*der的帖子

带有外部 Jar 的 Keycloak 自定义 SPI 部署

我有一个 SPI 实现,它是:

  • 自定义SPI,直接通过SPI接口实现
  • 有一个 JBoss base 中不存在的外部 jar

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 找不到我的外部 …

jboss wildfly keycloak

8
推荐指数
1
解决办法
1470
查看次数

完全可变的可见性保证

我正在阅读有关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()方法写入三个变量,其中只有几天是可变的。

完全易失的可见性保证意味着,当将值写入天时,线程可见的所有变量也将写入主存储器。这意味着,当将值写入天时,年和月的值也将写入主存储器。

那么,“线程可见的所有变量”是什么意思?这是否意味着线程堆栈中的所有变量?“线程可见”是什么意思?我如何知道该线程可以看到几个月和几年?

java multithreading volatile

7
推荐指数
1
解决办法
103
查看次数

不能将类拆分为更小的类

将我的班级分成更小的部分我遇到了麻烦.我们有一个糟糕的情况,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)

java sonarlint

5
推荐指数
1
解决办法
83
查看次数

标签 统计

java ×2

jboss ×1

keycloak ×1

multithreading ×1

sonarlint ×1

volatile ×1

wildfly ×1