小编Ced*_*tin的帖子

一个Tomcat实例,用于两个域和两个webapps

如何配置Tomcat(在独立模式下,没有Apache [*]),以便我可以在一台服务器上部署它,并根据所请求的域名提供两个不同的webapps?

这样做有什么问题?你能在这两个域上拥有SSL吗?如果有人在这里真的做到了,我会有兴趣回答这些问题以及尽可能多的反馈......

我发现了一个描述这种设置的博客条目,但它适用于Tomcat 5.5:

<Engine defaultHost="domain1.com" name="Catalina">
    <Host name="domain1.com" appBase="/home/user1/domain1">
     <Alias>www.domain1.com</Alias>
     <Context path="" docBase="."/>
    </Host>
    <Host name="domain2.com" appBase="/home/user1/domain2">
     <Alias>www.domain2.com</Alias>
     <Context path="" docBase="."/>
    </Host>
Run Code Online (Sandbox Code Playgroud)

http://iam-rakesh.blogspot.com/2009/10/hosting-multiple-domains-in-tomcat.html

此外,截至目前我有一个webapp,ROOT.war,里面.../tomcat/webapps /

一旦我有两个"根",一个用于domain1.com的 root webapp和一个用于domain2.com的 root webapp,它将如何工作 将在什么地方的.war被定位需求?

java dns tomcat

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

嵌入Neo4j需要哪些罐子?

编辑这个问题不是关于如何使用Ant/Maven/Gradle或诸如此类的东西来解决依赖关系.

我正在尝试使用Neo4j,我对文档有点困惑,因为我需要嵌入一个非常简单的"Hello,world!" 应用程序中的Neo4j示例.

我在几个地方看过Neo4j是轻量级的,只需要一个(现在是两个)罐子.

例如:http://highscalability.com/neo4j-graph-database-kicks-buttox

我们可以读到:"占用空间小.Neo4j是一个带有一个依赖的单个<500k jar(Java Transaction API)."

这正是我对Neo4j嵌入它感兴趣的原因之一......

所以我下载了Neo4j的社区版(GPL),并在此处阅读说明:

http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-setup.html

其中说:"提取一个Neo4j下载zip/tarball,并使用lib /目录中的jar文件."

现在这不仅仅是简洁而且我发现旧消息说"措辞已经改变".有一点,Neo4j所需要的只是一个罐子(这是我有兴趣嵌入Neo4j btw的原因之一).但是现在显然已经是两个了,因为它依赖于某些Java Transaction API(其中一个是一个带有neo4j.jar?)

问题是,如果我查看lib / dir,我有很多东西:

1115454 lib/neo4j-kernel-1.6.1.jar
153707  lib/neo4j-graph-algo-1.6.1.jar
222791  lib/neo4j-shell-1.6.1.jar
8865464 lib/scala-library-2.9.0-1.jar
43530   lib/neo4j-jmx-1.6.1.jar
590503  lib/neo4j-kernel-1.6.1-tests.jar
23954   lib/neo4j-community-1.6.1.jar
28023   lib/neo4j-udc-1.6.1.jar
1517975 lib/neo4j-cypher-1.6.1.jar
51662   lib/neo4j-graph-matching-1.6.1.jar
16030   lib/geronimo-jta_1.1_spec-1.1.1.jar
143177  lib/neo4j-lucene-index-1.6.1.jar
1466301 lib/lucene-core-3.5.0.jar
118875  lib/server-api-1.6.1.jar
92850   lib/org.apache.servicemix.bundles.jline-0.9.94_1.jar
Run Code Online (Sandbox Code Playgroud)

system/lib中:

27461   system/lib/blueprints-neo4j-graph-1.1.jar
72650   system/lib/jettison-1.3.jar
628626  system/lib/rrd4j-2.0.7.jar
17985   system/lib/asm-analysis-3.2.jar
177174  system/lib/jetty-util-6.1.25.jar
109043  system/lib/commons-io-1.4.jar
755981 …
Run Code Online (Sandbox Code Playgroud)

java dependencies jar neo4j

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

即时银行帐号验证

今天我不得不将真实(死树)信件中的银行帐号复制到Emacs缓冲区,然后通过电子邮件发送.我把它从信件复制到Emacs缓冲区时忘记了一个错误(忘了一个数字).这导致一位来自同事的电子邮件告诉我:"无法付款,伪造IBAN".

创建一个函数/次模式有多难:

  • 检测看起来像IBAN的"东西"(例如两个大写字母后面跟着'x'和'y'数字,忽略空格等.那里有现成的正则表达式,可以验证是否有类似IBAN的东西或不)

  • 如果它看起来无效,则运行mod 97并以红色突出显示IBAN

理想情况下,我需要一个次要模式,我可以打开几种类型的缓冲区(愚蠢的文本文件,但也电子邮件等).

使用Emacs做什么的"方法"是什么?

validation emacs elisp iban

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

懒惰和堆栈溢出

我写了以下内容:

(fn r [f xs]
  (lazy-seq
    (if (empty? xs)
    '()
    (cons (f (first xs)) (r f (rest xs))))))
Run Code Online (Sandbox Code Playgroud)

解决4clojure.com的问题#118:http://www.4clojure.com/problem/118

它要求重新实现地图而不使用地图等,并且该解决方案通过了测试(我不知道它是否正确:它与其他解决方案非常接近).

因为问题表明它必须是懒惰的,我通过在lazy-seq中 "包装"我的解决方案来编写上面的代码...但是我不明白lazy-seq是如何工作的.

我不明白这里什么是"懒惰",也不知道如何测试它.

当我问(type ...)我得到一个clojure.lang.LazySeq时,不出所料,但我不知道如果我只是删除了lazy-seq "wrap" ,那和我之间的区别是什么.

现在当然如果我删除lazy-seq,我得到一个stackoverflow为什么要尝试执行这个:

(= [(int 1e6) (int (inc 1e6))]
   (->> (... inc (range))
        (drop (dec 1e6))
        (take 2)))
Run Code Online (Sandbox Code Playgroud)

否则(即:如果我让lazy-seq包裹到位),它似乎工作正常.

所以我决定尝试以某种方式"调试"/追踪正在发生的事情,试图了解它是如何工作的.我采用了以下宏(我在SO IIRC上发现):

(defmacro dbg [x] `(let [x# ~x] (println "dbg: " '~x "=" x#) x#))
Run Code Online (Sandbox Code Playgroud)

并将工作版本包装在 …

stack-overflow clojure lazy-evaluation lazy-sequences

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

如何在"迷你缓冲区"模式图中重新定义一个键?

我正在尝试重新定义用于导航历史记录的键,当几个命令接受正则表达式并提供Cp/Cn历史导航时.除了Cp/Cn之外,我还想使用其他键.例如,当使用occurrencereplace-regexp时,可以使用Cp和Cn转到上一个和下一个元素.

我已经尝试了几件事,但无法使其发挥作用.我想我在这里错过了"大局".

我需要修改哪种模式图,何时以及如何修改?我试过的一切都失败了.

PS:请注意,我已经拥有自己的次要模式,我的所有键盘图都在这里建议.

regex emacs history elisp keymaps

6
推荐指数
2
解决办法
1312
查看次数

这种锁定技术的名称是什么?

我有一个庞大的Trove地图和一个我需要经常从多个线程调用的方法.大多数情况下,此方法应返回true.线程正在进行大量的运算,我注意到由于以下方法存在一些争用(这只是一个例子,我的实际代码有点不同):

synchronized boolean containsSpecial() {
   return troveMap.contains(key);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个"仅附加"地图:一旦添加了一个键,就会永远停留在那里(这对我接下来的事情很重要).

我注意到通过将以上内容更改为:

boolean containsSpecial() {
    if ( troveMap.contains(key) ) {
        // most of the time (>90%) we shall pass here, dodging lock-acquisition
        return true;
    }
    synchronized (this) {
        return troveMap.contains(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的数字运算得到了20%的加速(经过多次运行验证,长时间运行等).

这种优化看起来是否正确(知道一旦钥匙存在,它将永远留在那里)?

这种技术的名称是什么?

编辑

更新地图的代码比containsSpecial()方法更频繁地调用,看起来像这样(我已经同步了整个方法):

synchronized void addSpecialKeyValue( key, value ) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

java optimization synchronization locking trove4j

5
推荐指数
2
解决办法
425
查看次数

单独测试Clojure在一个单独的框架中飞行

我正在观看一个惊人的"Emacs rock"视频,我注意到开发人员并排使用两个窗口,其中一个窗口是Emacs,另一个窗口用于(几乎)不断运行单元测试.视频在这里(IMO非常好看):

http://www.youtube.com/watch?v=Zxt-c_N82_w

在使用Clojure时我该怎么做?

我想在屏幕上看到的是:

  • 我正在缓冲区中编辑的.clj文件
  • 一个REPL
  • 另一个窗口(一个Emacs框架?),在那里我可以看到我的单元测试的结果(单元测试自己被定义在他们测试的每个.clj文件中或在单独的.clj文件中,我不在乎)

理想情况下,我希望单元测试的结果显示在另一个Emacs框架中,但常规终端也会这样做(只要至少有一些颜色支持).

有人做过类似的事吗?我不介意shell脚本或elisp'ing或其他任何东西,只要它允许获得与单元测试Clojure代码类似的设置.

emacs unit-testing clojure

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

lazy-seq的分步示例

我很难理解懒惰工作以及缓存是如何工作的.

我认为一个lazy-seq在工作中的分步示例在这里可以提供帮助.例如,我读过以下问题:

Clojure懒惰序列使用

但它仍然不清楚.

我的问题是该调用将如何确定另一个调用是否与缓存调用"相等"以及它在缓存中保留多长时间?我试图(源lazy-seq),但显然它是在Java的土地,所以我在这里运气不好.

对于一个简单的lazy-seq,只取一个参数(比如说两个幂的列表),如果我用5然后8调用它怎么办?这两个值是否被缓存?

如果我要通过缓存我已经称为惰性函数的每个输入来破坏内存,那么创建和缓存无限列表以获得无限结构的重点是什么?

因为它表示它会在每次后续调用中缓存结果......使用's'.

1:参数结果为'1'缓存2:结果为参数为'2'缓存3:结果为参数为'3'缓存... 2 30:我数到2 30并且它很好因为我很懒所有,但现在内存中有一个2**30缓存,缓存所有后续调用的所有后续调用.

或者它只是缓存的最后一个调用?

如果我写一个以树为参数的懒函数怎么办?它运行平等吗?关于传递的论点,知道是否需要进行新的评估?

可以在运行时以某种方式跟踪此行为吗?

equals clojure lazy-evaluation

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

如何使用core.async实现Skynet 1m微基准测试?

为了尝试理解core.async,我不成功地试图实现"天网100万微基准",即:

创造一个演员(goroutine,无论如何),它产生10个新演员,每个演员产生10个演员等,直到在最后一级创建了100万个演员.然后,它们中的每一个都返回它的序数(从0到999999),它们在前一级别上求和并向上游发送,直到到达根演员.(答案应该是499999500000).

这里有许多语言的实现:

https://github.com/atemerev/skynet

这是我完全破碎的尝试:

(defn skynet [chan num size div]
  (if (= 1 size)
    (>! chan num)
    (>! chan (reduce + (let [rc  (async/chan)
                             n   (/ size div)]
                          (doall (for [i [0 div]]
                                   (skynet rc (+ num (* i n)) n div))
                                 (for [i [0 div]] (<! rc))))))))
Run Code Online (Sandbox Code Playgroud)

我试图在REPL的一个go块内调用它:

  (time (go (<!! (skynet (async/chan) 0 1000000 10))))
Run Code Online (Sandbox Code Playgroud)

我可能会对很多关于core.async(以及懒惰评估)的事情感到困惑.

我该如何解决这个问题?为什么?

channel clojure coroutine core.async

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

什么时候插入环防伪令牌?

我试图了解何时在 HTML 页面中生成或插入环防伪令牌。我正在使用 Compojure / ring / hiccup 但我认为我的问题真的是关于戒指。我本身没有任何问题:我只是想知道何时以及如何“注入”防伪令牌。

anti-forgery-field从功能ring.util.anti-forgery实现是这样的:

(html (hidden-field "__anti-forgery-token" *anti-forgery-token*)
Run Code Online (Sandbox Code Playgroud)

如果我在 REPL 中调用这个函数,我会得到:

REPL>  (println (anti-forgery-field))
<input id="__anti-forgery-token" name="__anti-forgery-token" type="hidden" value="Unbound: #&apos;ring.middleware.anti-forgery/*anti-forgery-token*" />
Run Code Online (Sandbox Code Playgroud)

仍然在 REPL 中,如果我尝试获取此变量,则会得到相同的“未绑定”变量:

> ring.middleware.anti-forgery/*anti-forgery-token*
=> #object[clojure.lang.Var$Unbound 0x1eae055 "Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*"]
Run Code Online (Sandbox Code Playgroud)

我不明白的是“未绑定”值是什么,也不知道它何时(通过环?)转换为实际交付的令牌。而且我特别不明白连接到网站的几个用户如何获得不同的令牌(每个会话)。

该变量总是“未绑定”吗?它何时/如何成为“绑定”(如果有?)?

另外,如果我有环会话 ID(比如"ring-session=310678be-9ef6-41a7-a12a-b2417de4a79f"),我怎么能在 Clojure REPL(在服务器端)看到相应的反伪造令牌的价值?

clojure ring csrf-protection

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