小编eba*_*axt的帖子

12
推荐指数
2
解决办法
1820
查看次数

同一容器中的战争之间的进程间通信

在同一个码头容器中运行的两场战争之间有什么选择可以实现低延迟通信?

我基本上需要在另一场战争中调用一个服务,但不能承担将其称为Web服务的开销.

由于它们在同一个JVM中运行,我希望避免使用RMI/JMS等,但我不知道我还有其他选择吗?

我看过servlet之间的通信,但是因为不推荐使用直接方法调用,这似乎不是正确的选择?

我也发现了kyronet,但是有更好的解决方案,因为它在同一个JVM中吗?

我正在寻找的是像Apache Camel的VM组件(Web应用程序之间的seda),但由于只有一个应用程序使用Camel,因此不是一个选择.

我知道我可能要在战争之间分享一些DTO,但请不要建议将服务拉入共享库,如果这是一个选项,我不会问这个问题:)

编辑:

嵌入EJB容器也许不是一种选择.

java communication-protocol low-latency

11
推荐指数
1
解决办法
5242
查看次数

访问JerseyTest中的Spring bean

我试图弄清楚如何从JerseyTest的子类访问Spring bean.扩展JerseyTest我已经设法在我的测试中加载Spring上下文,但我还没弄清楚如何访问spring上下文.我的设置如下:

public abstract class SpringJerseyTest extends JerseyTest {
    public SpringJerseyTest() throws Exception {
        super(new WebAppDescriptor.Builder("com.acme.resources")
            .contextPath("/")
            .contextParam("contextConfigLocation", "classpath:applicationContext.xml")
            .servletClass(SpringServlet.class)
            .contextListenerClass(ContextLoaderListener.class)
            .build());
    }

}
Run Code Online (Sandbox Code Playgroud)

该设置使用默认的Grizzly Web容器.我以前从未使用Grizzly,但在Jetty我会做这样的事情:

    public Object getSpringBean(String beanName) {
        WebAppContext context = (WebAppContext) server.getHandler();
        ServletContext sc = context.getServletContext();
        WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);
        return applicationContext.getBean(beanName);
    }
Run Code Online (Sandbox Code Playgroud)

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

testing spring integration-testing unit-testing jersey

7
推荐指数
2
解决办法
5259
查看次数

避免Clojure应用程序的DAO层中的全局状态

我正在尝试将http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded中的想法实现到我的代码库中.

我有一个dao层,我现在需要传入一个数据库以避免全局状态.让我失望的一件事就是:

任何需要其中一个组件的函数都必须将其作为参数.这并不像看起来那么繁琐:每个函数最多只能获得一个额外的参数,提供它运行的"上下文".该上下文可以是整个系统对象,但更常见的是一些子集.通过明智地使用词法闭包,额外的参数从大多数代码中消失.

我应该在哪里使用闭包以避免每次调用都通过全局状态?一个例子是在dao层中创建一个init函数,如下所示:

(defprotocol Persistable
  (collection-name [this]))

(def save nil)

(defn init [{:keys [db]}]
  (alter-var-root #'save (fn [_] (fn [obj] (mc/insert-and-return db (collection-name obj) obj WriteConcern/SAFE)))))
Run Code Online (Sandbox Code Playgroud)

这样我可以从system/start函数启动我的dao层,如下所示:

(defn start
  [{:keys [db] :as system}]
  (let [d (-> db
              (mc/connect)
              (mc/get-db "my-test"))]
    (dao/init d)
    (assoc system :db d)))
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉有点icky.有没有更好的办法?如果可能的话,我想避免强迫我的dao层的客户端每次使用函数时都必须传递数据库.

dao clojure mongodb

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

努力在Hibernate中优化N + 1查询

我正在努力改进我正在进行的项目的n + 1查询.我使用Hibernate与下面显示的模型,我想表达一个查询来检索与投资组合相关的所有项目,包括每个项目的最后两个价格(给定日期和先前价格的价格).

在此输入图像描述

示例API:

List<Items> items = findItemsWithLatestTwoPrices(portfolio, latestPriceDate);
Run Code Online (Sandbox Code Playgroud)

目前我使用一个查询来提取与投资组合相关的所有项目,然后我迭代这些项目以查询给定项目的两个最新价格(所以n + 1).

我尝试使用相关子查询在本机sql中表达这一点,但性能非常糟糕.这个以及每天都有新价格的事实(所以查询变得越来越慢)让我觉得我需要一个不同的模型,但是我很难想出一个合理有效且随时间不变的模型.价格上涨的数量.

我一直在考虑不同的解决方案,包括将价格表示为链表,或使用某种树,但我相信有更好的选择.我错过了一些明显的东西吗 是否有人在解决类似问题时提出了良好的解决方案?

我不太关心我使用HQL或本机SQL,只要性能不错.我也愿意对模型进行更改.

谢谢!

[编辑]

由于我有超过两年的价格数据,并且可以有1000多个项目.投资组合,检索整个图表可能不是一个好主意.此外,我需要按日期随机访问,因此将两个价格作为字段存储在该项目上是不幸的选择.

optimization orm hibernate query-optimization data-structures

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

理解在Clojure中执行懒惰的斐波纳契实现

我正在尝试理解以下代码的执行:

(def fibs 
  (concat (lazy-seq [0 1]) (lazy-seq (map + fibs (rest fibs)))))
Run Code Online (Sandbox Code Playgroud)

这就是我期望执行的样子

[0 1 : (map + [0 1] [1]) => 1
[0 1 1 : (map + [0 1 1] [1 1]) => 1 2
[0 1 1 1 2 : (map + [0 1 1 2] [1 1 2]) => 1 2 3
[0 1 1 1 2 1 2 3 : (map + [0 1 1 2 3] [1 1 2 3]) => 1 2 …
Run Code Online (Sandbox Code Playgroud)

clojure lazy-evaluation lazy-sequences

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

使用 jq 转换对象的嵌套数组

如何转换 JSON 输入

{
"Subnets": [
    {
        "VpcId": "vpc-xxx",
        "Tags": [
            {
                "Value": "staging_subnet_private_a",
                "Key": "Name"
            }
        ],
        "SubnetId": "subnet-xxx"
    },
    ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

[
 {
  "SubnetId": "subnet-xxx",
  "Name": "staging_subnet_private_a"
 },
 ...
]
Run Code Online (Sandbox Code Playgroud)

使用jq

我有一个使用的工作解决方案jq '[.Subnets[] | {SubnetId, Name: .Tags[0] | .Value }]',但这依赖于标签的顺序(不好)。

我可以使用from_entires或减少吗?

json jq

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