我早上花了很多时间阅读谷歌在乐观锁定方面所做的所有热门文章,而对于我的生活,我仍然没有真正理解.
我理解乐观锁定涉及添加用于跟踪记录的"版本"的列,并且该列可以是时间戳,计数器或任何其他版本跟踪构造.但我仍然不明白如何确保WRITE完整性(意味着如果多个进程同时更新同一个实体,那么之后,实体正确地反映了它应该处于的真实状态).
有人可以提供一个具体的,易于理解的例子,说明如何在Java中使用乐观锁定(可能是MySQL数据库).假设我们有一个Person
实体:
public class Person {
private String firstName;
private String lastName;
private int age;
private Color favoriteColor;
}
Run Code Online (Sandbox Code Playgroud)
并且这些Person
实例会持久化到people
MySQL表:
CREATE TABLE people (
person_id PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL, # } I realize these column defs are not valid but this is just pseudo-code
age INT NOT NULL,
color_id FOREIGN KEY (colors) NOT NULL # Say we also have a …
Run Code Online (Sandbox Code Playgroud) 我注意到许多项目(DropWizard,Grails等)开始接受"胖"JAR(使用Jetty或Tomcat等嵌入式Web服务器)与传统WAR部署的概念.这两种方法都涉及单个JVM进程(即无论将多少WAR部署到Tomcat,它都是相同的JVM进程).
在什么情况下,哪种部署方法优于另一种?
我的许多项目构建都一次又一次地使用相同的阶段,作业和任务.有没有办法定义"模板"计划并使用它来制作其他模板化计划?我不是在谈论克隆,因为通过克隆,您可以对所有克隆进行独立更改.
我想要的是模板的一种方式,比方说,10个不同的计划,然后如果我想为所有这些计划添加一个新的工作/任务,我只需要更改模板,这将会影响所有的计划利用模板.
这是可能的,如果是的话,怎么样?
每当我从file
URI开始 Camel 路由时,我都会看到 Camel 获得了文件的“锁定”。例如,如果文件名为myinput.xml
,则 Camel 在其上创建一个名为.lock 的“锁定文件”,位于同一目录中myinput.xml.camelLock
。
我在Ubuntu(14.04)上安装了最新版本的GVM(1.3.13).然后我用它来安装Grails(2.3.7),Groovy(2.2.2)和Gradle(1.11).
Groovy和Gradle似乎安装得很好(我可以执行他们的SDK命令,比如groovyc
等).但每当我执行任何 Grails命令时,从任何目录,我的整个终端的屏幕都会清除,暂停一秒钟,然后重新绘制我的命令行提示符.该命令永远不会被执行.几个月前,在Nabble上,另一位用户报告了一个非常类似的问题.
从shell开始,如果我执行echo $GRAILS_HOME
,我得到:
/home/myuser/.gvm/grails/current
如果我执行,echo $PATH
我确实看到它/home/myuser/.gvm/grails/current/bin
在我的系统路径上.
所以我决定深入挖掘并实际去$GRAILS_HOME
.这是一个实际指向的象征性链接/home/myuser/.gvm/grails/2.3.7
.所以当我去那里时,我看到一个正常的Grails安装,包括一个bin
目录.当我进入那个bin
目录时,我看到:
grails-debug
grails.bat
grails-debug.bat
startGrails.bat
startGrails
grails
Run Code Online (Sandbox Code Playgroud)
我打开grails
(一个shell脚本)并看到:
#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM
DIRNAME=`dirname "$0"`
. "$DIRNAME/startGrails"
startGrails org.codehaus.groovy.grails.cli.GrailsScriptRunner "$@"
Run Code Online (Sandbox Code Playgroud)
我将其修改如下:
#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM
echo "1..."
sleep 2s
DIRNAME=`dirname "$0"`
echo "2...dirname is $DIRNAME"
sleep 8s
. …
Run Code Online (Sandbox Code Playgroud) 说我想运行带有额外" -Djava.fizz.buzz=3
"JVM arg 的Grails(2.3+)应用程序.
它是如此简单:
grails run-app -Djava.fizz.buzz=3
Run Code Online (Sandbox Code Playgroud)
或者是否BuildConfig.groovy
需要进行特殊配置(例如,in )?
我刚刚在我们的一个Java库中遇到了一个隐藏的gem:
for(Widget w : widgets) {
if(shouldDoStuff()) {
try{
// Do stuff to w.
} catch(Exception e){
throw new RuntimeException("Couldn't do stuff.");
} finally{
// Compiler warning: finally block does not complete normally
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这finally
胜过一切,但我想知道两件事:
catch
条款不执行呢?异常是否被抛出?首先发生什么:抛出的异常或continue
声明?我发现了这个非常相似的问题,但是接受的答案只是声明异常将被突然抛出,我不确定这意味着什么.另外,它并没有真正帮助我理解我上面提到的关于将要发生的事件顺序的第一个问题.
我正在开发一个Grails插件.它plugin.xml
应该保留在版本控制中吗?为什么或者为什么不?
因为这些只是插件描述符,我不确定它们是否应该始终与代码库的其余部分一起维护.然而,Grails可能会将它们用于各种"引擎盖"类型配置,在这种情况下,它们必须始终与应用程序代码库的其余部分一致/存在.
我正在构建Grails应用程序以及应用程序将用作依赖项的插件.我需要一种方法来更改插件,在本地发布,构建应用程序(使用新版本的插件 - SNAPSHOT)然后执行a grails run-app
来获取所有更改.
我还需要一种方法将插件发布到远程Artifactory仓库并让Grails应用程序获取插件的"发布"(非SNAPSHOT)版本.关于如何实现这一目标的任何想法?
我们有大约十几个内部管理员Web应用程序(主要是Java),员工可以使用这些应用程序进行各种工作流程,并且每个人都有自己的,不同的登录/身份验证系统.我被要求在一个单一的唱歌系统下将它们联合起来.我将以下图表作为起点使用:
如您所见,每个应用程序都使用CAS客户端连接到CAS服务器.此服务器还具有配置了Shibboleth插件(?)的Apache httpd.然后,此CAS服务器与我们的Active Directory("AD")服务器通信.
我需要确保完全理解这些技术如何协同工作:
假设我有以下对象层次结构:
public abstract class Animal {
...
}
public class Canine extends Animal {
...
}
public class Feline extends Animal {
...
}
public class Dog extends Canine {
...
}
public class Wolf extends Canine {
...
}
public class Leopard extends Feline {
...
}
Run Code Online (Sandbox Code Playgroud)
假设Animal
该类有一个最终方法,需要采取不同的操作,具体取决于对象的运行时类型/类是什么:
public abstract class Animal {
// Lots of stuff blah blah blah
public final makeNoise() {
// If we're a Dog, then System.out.println("Woof!");
// Else if we're a Wolf, …
Run Code Online (Sandbox Code Playgroud) java ×6
grails ×4
apache-camel ×1
artifactory ×1
bamboo ×1
cas ×1
command-line ×1
concurrency ×1
deployment ×1
exception ×1
file-io ×1
filelock ×1
grails-2.3 ×1
gvm ×1
inheritance ×1
jvm ×1
locking ×1
maven ×1
path ×1
plugin.xml ×1
publishing ×1
reflection ×1
runtime ×1
saml-2.0 ×1
shell ×1
shibboleth ×1
templates ×1
throw ×1
tomcat ×1
ubuntu ×1
war ×1