小编Eri*_* B.的帖子

我可以使用QueryDSL直接插入JPA实体吗?

QueryDSL中是否有一种方法可以直接插入JPA实体而不使用JPA提供程序?

我的用例问题如下.我正在使用Hibernate与两个实体之间的连接表映射.

例如:

public class Contract implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Version
    @Column(name = "version")
    private Integer version;

    private String number;
    private String volume;

    @ManyToMany
    @JoinTable(joinColumns = @JoinColumn(name = "contract_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "attachment_id", referencedColumnName = "id"))
    private List<Attachment> attachments;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我尝试同时在2个单独的线程中添加附件,我将获得乐观的锁定异常(如预期的那样).所以相反,我想尝试通过SQL插入命令直接添加附件.

无论如何Attachment通过QueryDSL作为对象插入实体?我找不到任何涵盖此用例的参考文档.只有更新查询,需要设置各个字段.

伪代码:

JPAQuery.insert(QAttachment.attachment).into(QContract.attachment).where(QContract.contract.id.eq(<contractId>));
Run Code Online (Sandbox Code Playgroud)

这样的事情可行吗?

hibernate jpa querydsl

4
推荐指数
1
解决办法
1205
查看次数

通过属性文件指定 pom 属性?

由于我的构建系统的设计方式(RTC 构建引擎),我想通过属性文件为 maven 提供属性值,而不是为每个属性指定 -Dkey=value。

我发现了几个关于 SO 的问题(How to set build properties from a file in Maven POM? and How to read an external properties file in Maven)与这个问题完全相关,但它们相对较旧,并且都需要自定义插件工作(处于 alpha 状态)。

我意识到像这样将参数传递给 Maven 可能不是最好的解决方案,但另一个选项是通过 -D 设置在命令行上指定所有内容,这也不理想。

此外,鉴于此属性文件仅由构建引擎(而不是个人开发人员)真正使用,我并不真正相信它属于 pom.xml 文件。但是我找不到任何其他机制可以让我指定要使用的插件 - settings.xml 不允许指定插件。

在这种情况下,我唯一的选择是使用插件并在项目 pom 中指定它吗?

java properties maven

4
推荐指数
1
解决办法
1万
查看次数

Beacon Ranging与GPS跟踪电池使用情况

我正在考虑实施基于信标的应用程序,以根据信标放置进行一些位置跟踪.根据我的阅读和理解,信标监控在电池寿命方面相当无害,但绝对会对电池寿命产生更大的影响.

测量时是否有任何规格或技巧/技术可以最大限度地减少电池消耗?测距时的电池寿命与GPS位置跟踪相比如何?

gps battery core-location ios ibeacon

4
推荐指数
1
解决办法
1460
查看次数

Mockito/JMockit &amp; Hamcrest 匹配器:如何验证列表/集合?

这篇2013 年关于 SO 的帖子询问了如何使用 Hamcrest 匹配器来验证 Mockito 中的列表/集合调用。公认的解决方案是将 Matcher 转换为 (Collection)。

我正在尝试做类似的事情,但遇到了类转换错误。我不确定我是否误用了 Hamcrest 匹配器,或者 Mockito 是否根本不支持这种用法。就我而言,我试图使用匹配器列表作为我的参数:

static class Collaborator
{
   void doSomething(Iterable<String> values) {}
}

@Test
public void usingMockito()
{
   Collaborator mock = Mockito.mock(Collaborator.class);
   mock.doSomething(Arrays.asList("a", "b"));

   // legal cast
   Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains("a", "b")));
   // legal cast
   Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Matchers.equalTo("a"), Matchers.equalTo("b"))));

   // illegal cast!!! Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
   Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Arrays.asList(Matchers.equalTo("a"), Matchers.equalTo("b")))));
}
Run Code Online (Sandbox Code Playgroud)

但我得到了演员错误:

Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
Run Code Online (Sandbox Code Playgroud)

我在做一些不受支持的事情吗?

java generics jmockit hamcrest mockito

4
推荐指数
1
解决办法
1万
查看次数

即使证书链更新,Python(pip)也会抛出[SSL:CERTIFICATE_VERIFY_FAILED]

这是之前SO帖子的后续内容.

我正在使用Windows/cygwin,我需要python来理解自定义CA证书,因为网络基础结构使用自己的证书重新签名所有SSL请求.

如果我尝试运行pip search SimpleHTTPServer,我收到以下错误消息:

...
  File "c:\users\erbe\appdata\local\programs\python\python35-32\lib\ssl.py", line 633, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
Run Code Online (Sandbox Code Playgroud)

我尝试通过执行以下操作将证书添加到我的可信证书列表中:

  1. 将我的.pem文件复制到/ etc/pki/ca-trust/source/anchors
  2. update-ca-trust extract

我已经验证这是有效的,因为我现在可以指向生成的PEM文件并成功运行pip pip --cert /usr/local/ssl/cert.pem search SimpleHTTPServer:

$ pip --cert tls-ca-bundle.pem search SimpleHTTPServer
ComplexHTTPServer (0.1)      - A Multithreaded Python SimpleHTTPServer
SimpleTornadoServer (1.0)    - better SimpleHTTPServer using tornado
rangehttpserver (1.2.0)      - SimpleHTTPServer with support for Range requests
Run Code Online (Sandbox Code Playgroud)

但是,我希望这一点无需每次都手动指定证书.我希望更新python使用的证书链:

$ python -c "import ssl; print(ssl.get_default_verify_paths())"
DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs')
Run Code Online (Sandbox Code Playgroud)

我已经通过一系列符号链接验证了/usr/local/ssl/cert.pem指向同一个文件.但是,如果我执行pip …

python windows ssl https cygwin

4
推荐指数
1
解决办法
4927
查看次数

Keycloak Backchannel注销

我试图了解Web应用程序中反向通道注销的流程,但是我发现文档令人困惑。我有一个运行JBoss EAP的JEE应用程序,带有Java Servlet过滤适配器(出于某些技术原因,我不能使用EAP适配器)。该用于注销,文件说:

您可以通过多种方式注销Web应用程序。对于Java EE Servlet容器,可以调用HttpServletRequest.logout()。对于其他浏览器应用程序,您可以将浏览器重定向到 http:// auth-server / auth / realms / {realm-name} / protocol / openid-connect / logout?redirect_uri = encodedRedirectUri,如果您有SSO,它将注销您浏览器会话。

管理员URL配置的文档说:

例如,反向通道注销的工作方式是:1.用户从一个应用程序发送注销请求2.该应用程序将注销请求发送到Keycloak 3. Keycloak服务器使用户会话无效。4.然后,Keycloak服务器使用一个与会话5相关联的管理url。当应用程序收到注销请求时,它将使相应的HTTP会话无效。

因此,据我了解,

  1. 调用HttpServletRequest.logout()应该向Keycloak发送请求
  2. 一个GET to http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri应该以某种方式检测到clientId(从重定向URI?)并将请求发送到适当的反向通道

这两种选择似乎都不适合我。无论哪种情况,我都不会从Keycloak回调到adminUrl。此外,在调用Request.logout()之后,我在Keycloak管理员中仍然看到相同数量的活动会话。根据这篇SO帖子,它似乎可以工作,但是我不确定是否缺少配置或某种形式的东西。

我尝试使用access_token将GET发送到注销端点,但这也没有任何区别。

我对本文档有什么误解?我应该如何编码注销?

java-ee keycloak

4
推荐指数
1
解决办法
3422
查看次数

OpenID Connect:SPA 的隐式或身份验证代码流?

OIDC 中有多个身份验证流程;隐式和身份验证代码流是 SPA 可访问的两个主要流。ietf 邮件列表中最近的电子邮件表明,由于访问令牌出现在浏览器历史记录和/或日志文件中的安全问题(如果任何 SSL 终止/检查到位/等),应该优先考虑 Auth 代码流而不是隐式流)。

是否有任何白皮书或 RFC 支持一种流程优于另一种流程?今天是否有行业标准/公认的方法?

这已被交叉发布到SoftwareEngineering,因为它是一个有争议的话题。我不是在寻找意见;而是为了支持更好的安全性/实施的主张的官方帮助/白皮书/参考材料。我一直无法找到它们,因此不确定使用哪种方法。

authentication oauth-2.0 single-page-application openid-connect angular

4
推荐指数
1
解决办法
1356
查看次数

如何在少于 3 个节点的情况下使用 Hazelcast 的 CPSubsystem?

我看到 Hazelcast 3.12 引入了CPSubsystem()具有 3-7 个节点的系统。我明白其中的道理。但是,如果我试图设计一个可以在 1-n 个节点之间的任何地方运行的解决方案,我是否需要使用不同的逻辑来验证 CPSubsystem 是否已启用?我什至如何检查?

我会想/希望只是打电话

hazelcastInstance.getCPSubsystem().getLock()
Run Code Online (Sandbox Code Playgroud)

无论节点数量如何,都可以工作,但如果节点少于 3 个,则会引发异常。而且我找不到任何允许我检查是否CPSubsystem启用的方法。

我当前的实现使用已弃用的方法getLock()来获取分布式锁:

   LOG.debug("Creating a distributed lock on username for a maximum of 5 minutes {}", username);
    ILock usernameLock = hazelcastInstance.getLock(this.getClass().getName() + ":" + username);
    try {
        if (usernameLock.tryLock (5, TimeUnit.MINUTES)) {
            clearUserData(cacheEntryEvent);
        }
    } catch (InterruptedException e) {
        LOG.warn("Exception locking on : {} ", username, e);
        LOG.warn("Invoking clearUserData without synchronization : {}", username);
        clearUserData(cacheEntryEvent);
    } finally {
        usernameLock.unlock();
    }
Run Code Online (Sandbox Code Playgroud)

如何在不知道这一点的情况下获得 …

concurrency hazelcast

4
推荐指数
1
解决办法
1221
查看次数

部署Maven one-jar会部署错误的工件

我正在尝试构建一个单jar Java实用程序.在之前的SO帖子中,有人建议使用onejar-maven-plugin插件.我试过了,但我遇到的问题是插件(1.4.4)创建了一个带有one-jar.jar扩展名的新工件.因此,我最终在我的目标文件夹中有2个jar,当我尝试安装和/或部署时,它会部署原始jar(而不是one-jar).

我已经从目标文件夹运行了一个jar.jar工件,它完全按预期工作,所以我很满意.但是,如果我无法使用标准mvn deploy命令语法正确部署它,则插件实际上并未按预期或按要求执行.

有没有办法正确构建pom配置以避免此问题?

我目前的pom写道:

                <plugin>
                    <groupId>com.jolira</groupId>
                    <artifactId>onejar-maven-plugin</artifactId>
                    <version>1.4.4</version>
                    <executions>
                        <execution>
                            <configuration>
                                <mainClass>com.nbfg.cws.cs.lendingsimulationservice.Client</mainClass>
                                <onejarVersion>0.97</onejarVersion>
                                <attachToBuild>true</attachToBuild>
                            </configuration>
                            <goals>
                                <goal>one-jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
Run Code Online (Sandbox Code Playgroud)

运行时Maven输出mvn deploy:

测试运行:0,失败:0,错误:0,跳过:0

[INFO]
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ lss-client ---
[INFO]
[INFO] --- onejar-maven-plugin:1.4.4:one-jar (default) @ lss-client ---
[INFO] Using One-Jar to create a single-file distribution
[INFO] Implementation Version: 0.0.1-SNAPSHOT
[INFO] Using One-Jar version: 0.97
[INFO] More info on One-Jar: http://one-jar.sourceforge.net/
[INFO] License for One-Jar:  http://one-jar.sourceforge.net/one-jar-license.txt
[INFO] One-Jar …
Run Code Online (Sandbox Code Playgroud)

java executable jar maven

3
推荐指数
1
解决办法
2277
查看次数

如何使用 Oracle DB 在 Spring/mybatis 应用程序中设置默认架构?

来自 mysql 背景的我能够在连接 url 中设置要用于所有 sql 查询的默认架构名称。我现在有一个需要访问的 Oracle 数据库。我知道我无法在 URL 中指定要使用的架构,因为用户是正在使用的架构名称。

我意识到我可以使用一行 SQL 代码:

ALTER SESSION SET CURRENT_SCHEMA=default_schema
Run Code Online (Sandbox Code Playgroud)

该项目使用mybatis 2.3.5作为我的 SQL 框架,但我对 mybatis 完全陌生。有没有简单的方法来配置mybatis来完成这个任务?我的应用程序是 Spring 3 应用程序,因此我使用Spring DataSourceTransactionManager来管理我的事务。我认为管理者必须了解这一要求,以确保每当创建新连接时都会发送命令。

我尝试过在线搜索,但我发现的大多数示例都将模式名称包含在 SqlMap 的 sql 查询中,我发现这是不好的做法。

在理想情况下,模式名称将是 URL 的一部分,这样我就可以针对不同环境(例如:开发、测试、生产等)更改模式名称,而无需接触代码(即:仅在 JNDI 上配置) /应用程序服务器级别)。如果我可以使用 Spring 配置值来设置它,并且我仍然可以使用 JNDI 查找或系统环境属性来检索该值,我会很高兴。

有人能指出我正确的方向吗?

谢谢,

埃里克

java oracle schema spring mybatis

3
推荐指数
1
解决办法
7238
查看次数