小编lat*_*ell的帖子

在一场战争中有多个CDI配置文件(开发,测试版,qa,生产)?

有了使用Spring DI applicationContext.xml声明依赖注入的方法的经验,我现在试着弄清楚如何用Java EE6 CDI做同样的事情.

使用Spring,我可以将我的.jar与几个配置文件一起发送,例如 unittest.xml,devel.xml,qa.xml,production.xml,并使用命令行参数或环境变量激活它们.

使用CDI,我可以在beans.xml中使用@Alternative 和web.xml中的属性,但似乎无法为不同的环境发送多个beans.xml.

我不想使用Maven配置文件/过滤器来生成我的应用程序的4-6版本,虽然我知道在某些情况下这将是更好的解决方案(即向客户发送准备好的构建战争 - 但我只在内部使用我的战争所以让我们节省编译时间!)

最好,我还可以从文件系统加载这些配置文件,以便系统管理员可以编辑它们,而无需重新构建应用程序.

具有多个依赖关系和属性配置集的Java EE6方法是什么?

如果没有,那么2013年的推荐替代品是什么?使用Spring?接缝?吉斯?我看到了Apache DeltaSpike的提及,但它们仍然看起来像网页上的alpha.

java spring cdi java-ee-6

10
推荐指数
1
解决办法
3719
查看次数

@QueryParam如何将没有值的参数转换为布尔值"false"?

我想使用像一个URL http://www.example.com/rest/foo?bar,其中bar查询参数没有价值,它的单独存在应表示变量是否truefalse.

目前,缺失值假定为""(空)并传递给new Boolean()它,将其视为false.

是否有更优雅的方式来定义它而不是将参数声明为String并自行转换它?

像一个类javax.rs.BooleanFlag或类似的?

java jax-rs

8
推荐指数
3
解决办法
9177
查看次数

sdkman 挂钩将 /etc/ssl/java/cacerts 链接到当前使用的 Java SDK

Debian 有一个很好的机制来将所有常用的来自 Thawte、Let's Encrypt 等的 CA 证书以及本地安装的证书编译/usr/local/share/ssl成一个/etc/ssl/certs/java/cacertsJKS 文件。这通常被符号链接到$JAVA_HOME/lib/security/cacerts.

使用 sdkman,我在不同的非 Debian Java 版本之间切换,~/.sdkman/candidates/java/current/其中使用SDK 创建者提供的cacerts

是否有某种 post-inst 挂钩机制,我可以在切换 sdkman Java 版本时自动创建指向 Debian cacerts文件的符号链接?

java sdkman

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

为什么会出现 invalid_grant 错误并显示“会话没有所需的客户端”?

我有一个应用程序通过 oauth2-proxy 连接到 Keycloak,通常一切运行正常。

有时我会在 oauth2-proxy 日志文件中看到以下错误:

unable to redeem refresh token: failed to get token: oauth2: cannot fetch token: 400 Bad Request 
Response: {"error":"invalid_grant","error_description":"Session doesn't have required client"},
removing session.
Run Code Online (Sandbox Code Playgroud)

Keycloak日志文件中相应的消息是这样的:

org.keycloak.events
type=REFRESH_TOKEN_ERROR, realmId=xxx, clientId=xxx, userId=f:ce9d954a-de51-48a4-a70b-xxx:xxx, ipAddress=x.x.x.x, error=invalid_token, grant_type=refresh_token, refresh_token_type=Refresh, refresh_token_id=bb77d7aa-c061-45d4-b2f7-fe938d5537cb, client_auth_method=client-secret
Run Code Online (Sandbox Code Playgroud)

我在例如“会话没有所需的客户端”意味着什么?中发现了相同的错误消息。但这个问题是针对 Keycloak 4.x 的,而我使用的是最新的 16.1.1。此外,我不使用“记住我”会话。

源代码仅在 oidc/TokenManager.java 中包含此消息,其中建议存在“跨 DC 环境”问题,但我们没有跨数据中心环境,只有同一 Kubernetes 命名空间中的三个实例安装了最新的 Helm 图表。

还有什么可能导致这个问题?

keycloak oauth2-proxy

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

在没有重启的IDE中使用Wildfly Swarm进行开发 - 在某处"热部署"?

我对Wildfly Swarm项目感兴趣,以创建fat-jar JavaEE应用程序,但无法弄清楚如何从IDE"热部署"更改的类.

每当我更改一行代码或JSF xhtml文件时,我当前必须重新启动整个应用程序需要大约7秒左右.那不是很有成效.

Spring Boot提供了一个spring-boot-devtools,可以重新加载至少一些类,传统的应用服务器提供热部署协议.Wildfly Swarm还有类似的东西吗?JRebel会帮忙吗?

ide java-ee wildfly wildfly-swarm

6
推荐指数
1
解决办法
5225
查看次数

IntelliJ 在 Gradle Kotlin-DSL 中错误地抱怨它找不到“java.lang.String”

在以下 build.gradle.kts (Kotlin DSL) 脚本中,IntelliJ 将“mainClassName”标记为红色并抱怨:“无法访问类 'java.lang.String'。检查您的模块类路径是否缺少或冲突的依赖项。”

使用./gradlew clean assemble命令行上,一切正常。

谁能给我一个提示如何解决这个问题?

IntelliJ 是最新版本 2019.1-社区。

------------------------------------------------------------
Gradle 5.3.1
------------------------------------------------------------

Build time:   2019-03-28 09:09:23 UTC
Revision:     f2fae6ba563cfb772c8bc35d31e43c59a5b620c3

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.2 (Oracle Corporation 11.0.2+9)
OS:           Linux 4.9.0-8-amd64 amd64
Run Code Online (Sandbox Code Playgroud)
plugins {
    java
    application
}

group = "de.lathspell"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    testCompile("junit", "junit", "4.12")
}

configure<JavaPluginConvention> {
    sourceCompatibility = JavaVersion.VERSION_1_8
}

configure<ApplicationPluginConvention> {
    mainClassName …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea gradle kotlin

6
推荐指数
0
解决办法
873
查看次数

JOOQ忽略具有默认值的数据库列

似乎JOOQ完全忽略了数据库列的默认值.既没有更新ActiveRecord对象也没有在INSERT上跳过此列.相反,它尝试将其设置为NULL,这在NOT NULL列上失败.

例:

CREATE TABLE bug (
  foo int,
  bar int not null default 42
);

  BugRecord b = jooq.newRecord(BUG);
  b.setFoo(3);
  b.store();          

  assertNotNull(b.getBar()); // fails

  Record r = jooq.select().from(BUG).fetchOne();
  assertEquals(new Integer(-1), r.getValue(BUG.BAR)); // fails

  // DataMapper pattern
  Bug b = new Bug();
  b.setFoo(3);
  bugDao.insert(b); // Fails because it tries to set "bar" to NULL
Run Code Online (Sandbox Code Playgroud)

我期望的行为是newRecord()使用korrekt值初始化所有默认变量(虽然我知道如果结果是自定义函数的结果,这可能很难:-)).或INSERT INTO执行不要使用默认值插入所有未修改的列,然后INSERT INTO后跟一个SELECT,该SELECT从数据库中获取现有的值(类似于RETURNING).

这真的是一个错误/限制,还是我错过了一些配置选项等,这使得可以使用"not null default"列?

java sql default-value jooq

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

EclipseLink @CascadeOnDelete有时只能工作吗?

我有两个表,"书籍"和"书店"都有一个@OneToMany引用"book_to_bookstore"表,其中包含了书店中有多少本书的信息.如果删除书籍或书店,那么该信息也应该消失.

因此我使用标准JPA CascadeType.ALL和orphanRemoval = true.为了使"正确"的SQL模式在使用Java访问时也能正常工作,我添加了EclipseLink特定的@CascadeOnDelete注释,期望在两个FOREIGN KEY语句之后出现CASCADE ON DELETE.

有趣的是,它只出现在其中一个我无法解释之后!

我尝试了MySQL和PostgreSQL的DDL生成,但两者都是一样的.

为什么?

一个可编译的迷你项目在这里:svn + ssh://lathspell@svn.code.sf.net/p/lathspellsphp/code/java_test_eclipselink_cascade_bug

重要的课程:

public class Bookstore implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")

    private Integer id;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "bookstoreId", orphanRemoval = true)
    @CascadeOnDelete
    private List<BookToBookstore> bookToBookstoreList;
    ...

public class Book implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "bookId", orphanRemoval = true)
    @CascadeOnDelete
    private List<BookToBookstore> bookToBookstoreList; …
Run Code Online (Sandbox Code Playgroud)

java jpa eclipselink

5
推荐指数
0
解决办法
771
查看次数

Java EE7 REST服务器不再将List <String>作为JSON返回

以下示例适用于我的Java EE6(Glassfish3)项目,但在切换到Java EE7(Glassfish4)后失败.HTTP请求返回"500内部错误",Glassfish服务器日志中没有任何消息.该项目使用NetBeans8作为Maven Web Project进行设置,没有特殊的依赖项,beans.xml或其他配置.

@RequestScoped
@Path("generic")
public class GenericResource {

    @GET
    @Path("ping")
    @Produces(APPLICATION_JSON)
    public List<String> debugPing() {
        return Arrays.asList("pong");
    }
Run Code Online (Sandbox Code Playgroud)

然后:

$ curl -v  http://localhost:8080/mavenproject2/webresources/generic/ping
> GET /mavenproject2/webresources/generic/ping HTTP/1.1
...
< HTTP/1.1 500 Internal Server Error
Run Code Online (Sandbox Code Playgroud)

据我了解,所有REST处理都是由Jackson参考实现完成的,Jackson使用Jersey作为底层JSON库.其中一个应该为所有基本数据类型提供某种提供程序.只有自定义类需要自编写的ObjectMapper.这些概念仍然正确吗?

rest json java-ee-7

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

如何使用 Spring Security 和 Keycloak OAuth2/OIDC 添加自定义 UserDetails 类

我正在使用 SpringBoot org.keycloak:keycloak-spring-security-adapter:6.0.1,目前正在通过以下方式访问用户详细信息,例如“family_name”

String familyName = ((KeycloakAuthenticationToken)auth).account.keycloakSecurityContext.idToken.familyName
String employeeId = ((KeycloakAuthenticationToken)auth).account.keycloakSecurityContext.idToken.otherClaims["employeeId"]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个 CustomUser 类,以便我可以通过更优雅的方式访问所有属性(OIDC 以及一些自定义声明)

 CustomUser u = ((CustomUser) auth).details
 String employeeId = u.employeeId
Run Code Online (Sandbox Code Playgroud)

我应该把映射放在哪里CustomUser?类UserDetailsMapper在这里不起作用,或者?应该AuthenticationProvider.authenticate()通过设置来完成吗authentication.details = <some subclass of KeycloakAccount>

spring-security keycloak

5
推荐指数
0
解决办法
1225
查看次数