也许,我做错了什么,但我找不到以下情况的好方法。
我想对一个在下面使用Spring Batch来执行作业的服务进行单元测试。作业通过AsyncTaskExecutor
在单独的线程中预先配置来执行。在我的单元测试中,我想:
显然,以上所有内容都应该在一个事务中执行,但不幸的是,事务不会传播到新线程(我理解这背后的基本原理)。
我想到的想法:
Isolation.READ_UNCOMMITTED
在作业配置中使用。但这需要两种不同的配置用于测试和生产。我要停止从孩子到父母的事件传播,我有一堆li
包含a
.
$('li a[rel=close]').live('click', function(e){
e.stopPropagation();
e.preventDefault();
})
Run Code Online (Sandbox Code Playgroud)
但它并没有停止事件。有什么建议吗?
只是一点背景,我是一个新的开发人员,最近在高级开发人员离开公司之后接手了一个重大项目,然后我才完全了解他是如何构建这个项目的。我会尽力解释我的问题。
此应用程序创建多个 MessageListner 线程以从 JMS 队列读取对象。接收到对象后,数据将根据某些业务逻辑进行操作,然后映射到持久性对象以使用休眠 EntityManager 保存到 oracle 数据库中。
直到几周前,自从我加入这个项目以来,这个配置在过去一年左右的时间里还没有出现任何重大问题。但是对于其中一个队列(问题与此特定队列隔离),处理接收到的对象的 spring 托管 bean 挂在下面的方法中。我的调试使我得出结论,它已完成方法中的所有内容,但在完成时挂起。经过数周的尝试解决这个问题,我对这个问题束手无策。对此的任何帮助将不胜感激。
由于每个 MessageListner 都有自己的处理器,因此这种挂起方法只影响一个队列上的传入数据。
@Transactional(propagation = Propagation.REQUIRES_NEW , timeout = 180)
public void update(UserRelatedData userData, User user,Company company,...)
{
...
....
//business logic performed on user object
....
......
entityMgr.persist(user);
//business logic performed on userData object
...
....
entityMgr.persist(userData);
...
....
entityMgr.flush();
}
Run Code Online (Sandbox Code Playgroud)
我插入调试语句只是为了遍历该方法,它完成了包括 entityMgr.flush.() 在内的所有内容。
我写了一个简短的 matlab 脚本文件,假设运行菲涅耳的传播(衍射),这样给定一个特定的输入字段 U0,它会告诉你该字段在距离 z0 后的样子。我将结果与教科书的结果进行了比较,看起来我的程序运行良好。问题是如果我尝试采取两个传播步骤而不是一个。即,不是通过程序的一次迭代来传播距离 z0,而是通过程序的两次迭代来传播距离 z0/2。然后我就完全胡说八道了,我无法弄清楚是什么问题。任何建议将被接受,非常感谢。这是代码:
function U = fresnel_advance (U0, dx, dy, z, lambda)
% The function receives a field U0 at wavelength lambda
% and returns the field U after distance z, using the Fresnel
% approximation. dx, dy, are spatial resolution.
k=2*pi/lambda;
[ny, nx] = size(U0);
Lx = dx * nx;
Ly = dy * ny;
dfx = 1./Lx;
dfy = 1./Ly;
u = ones(nx,1)*((1:nx)-nx/2)*dfx;
v = ((1:ny)-ny/2)'*ones(1,ny)*dfy;
O = fftshift(fft2(U0));
H = exp(1i*k*z).*exp(-1i*pi*lambda*z*(u.^2+v.^2));
U …
Run Code Online (Sandbox Code Playgroud) 我们对子域的DNS传播行为有疑问.
这是我们想要实现的方案:
User1在我们的网站"company.com"注册.自动创建子域"user1.company.com",而不是"company.com"的附加域,而是WHM中的独立帐户.
因此,正在创建一个自己的区域并且正在设置A记录(与company.com相同的IP)NS记录也设置为"ns1.domain2.com + ns2.domain2.com",我们自己的名称服务器(没有群集, 2个不同的IP,BIND方法,它们通过与company.com和子域相同的WHM安装提供.Domain2.com由我们的注册商GoDaddy处理,名称服务器ns1 + ns2也在那里定义.
我们的问题是,在创建之后,域"user1.company.com"无法立即访问(与附加域不同).
当我们使用来自ISP的名称服务器查找新域"user1.company.com"时,在创建它之后,我们将获得"不存在的域".然后,在1-15分钟后,根据我们尝试的DNS,nslookup会回答正确的IP地址.来自谷歌的DNS(8.8.8.8)例如立即!使用正确的IP地址回答问题.
当用户尝试访问其子域"user1.company.com"时会发生什么?我们的名称服务器是否已联系以解析子域,还是以某种方式在全球范围内的DNS服务器上传播的子域?但是为什么Google的DNS会立即回答,传播速度不会那么快!
无论用户使用哪种DNS,任何可能存在问题的想法以及如何在创建后立即访问子域帐户?
非常感谢
渣
我有一个使用 HTML LocalStorage 的网页。同时打开此页面的多个选项卡/窗口是很常见的。由于这些都使用相同的 LocalStorage 并且 LocalStorage 不提供事务或类似功能,因此我想实现某种形式的互斥,以防止不同的选项卡/窗口以不受控制的方式覆盖彼此的数据。
我尝试通过将Burns/Lynch 互斥算法的测试boolean[] F
简单地存储在 LocalStorage 中 来将其移植到浏览器。
在 FireFox 中一切正常,但 Chrome 平均允许大约 1.3 个进程(大多数情况下只有 1 个,有时 2 个,很少甚至 3 个或更多)同时进入临界区,而 Internet Explorer 平均允许 2 个进程(大多数情况下只有 2 个)进入关键部分1、2 或 3,有时甚至更多)。
由于该算法已被证明是正确的,并且我的实现非常简单,而且我已经测试了它的其他情况,我能想到为什么会发生这种情况的唯一原因是在 Chrome 和 IE 中存在延迟在我在一个选项卡/窗口中写入 LocalStorage 时与新值在所有其他选项卡/窗口中可见时之间。
这可能吗?如果是这样,是否有任何文件或对这些延误有任何保证?或者,更好的是,是否有某种“commit”或“flush()”调用可以用来强制更改立即传播?
更新:
我整理了一些jsfiddle来测试往返时间:
// Get ID
var myID;
id = window.localStorage.getItem("id");
if (id==1) { myID = 1; window.localStorage.setItem("id", 0); }
else { myID = 0; window.localStorage.setItem("id", 1); }
// Initialize …
Run Code Online (Sandbox Code Playgroud) 我有两个事务方法A和B.A的隔离级别为READ_COMMITTED,B的隔离级别为SERIALIZABLE.如果在A内部调用B,这里的默认行为是什么?
注意:我们假设传播级别是A和B的默认级别.
关于在这种情况下会发生什么的任何想法?
语境
我正在用 C++编写一个线程安全的原型线程/协程库,并且我正在使用原子来使任务切换无锁。我希望它尽可能高效。我对原子和无锁编程有一个大致的了解,但我没有足够的专业知识来优化我的代码。我做了很多研究,但很难找到我的具体问题的答案:不同内存顺序下不同原子操作的传播延迟/可见性是多少?
当前假设
我读到对内存的更改是从其他线程传播的,它们可能会变得可见:
我不确定这种延迟的可见性和不一致的传播是仅适用于非原子读取,还是也适用于原子读取,这可能取决于使用的内存顺序。当我在 x86 机器上开发时,我无法在弱有序系统上测试行为。
无论操作类型和使用的内存顺序如何,所有原子读取都总是读取最新值吗?
我很确定所有读-修改-写(RMW) 操作总是读取任何线程写入的最新值,而不管使用的内存顺序如何。对于顺序一致的操作似乎也是如此,但前提是对变量的所有其他修改也是顺序一致的。据说两者都很慢,这对我的任务不利。如果不是所有原子读取都获得最新值,那么我将不得不使用 RMW 操作来读取原子变量的最新值,或者在 while 循环中使用原子读取,以我目前的理解。
写入的传播(忽略副作用)是否取决于内存顺序和使用的原子操作?
(仅当上一个问题的答案是并非所有原子读取总是读取最新值时,此问题才有意义。请仔细阅读,我在这里不询问副作用的可见性和传播。我只关心原子变量本身的值。)这意味着根据用于修改原子变量的操作,可以保证任何后续原子读取接收变量的最新值。因此,我必须在保证始终读取最新值的操作之间进行选择,或者使用宽松的原子读取,以及这种特殊的写入操作,以保证对其他原子操作的修改的即时可见性。
我想将 SwiftUI 中的 ObservableObject 行为扩展到嵌套类,我正在寻找正确的方法来做到这一点。它可以使用Combine“手动”完成,但我想使用SwiftUI有一种更简洁的方法,我希望你能指出我正确的方向。这就是我的意思……
下面是 ObservableObject 的一个典型应用,它使 View 动态响应引用类型的变化。点击按钮切换showText
值,使文本在屏幕上出现/消失:
import SwiftUI
class MyClass: ObservableObject {
@Published var showText = false
}
struct ContentView: View {
@ObservedObject var instance = MyClass()
var body: some View {
VStack(spacing: 10) {
Button(action: {
print(self.instance.showText)
self.instance.showText.toggle()
}) {
Text("BUTTON").bold().padding()
.foregroundColor(.white)
.background(Color.red)
}
if instance.showText {
Text("Hello, World!")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常。
但是下面的修改呢,其中包含的类showText
是 an InnerClass
,它本身包含在 an 中OuterClass
?按钮切换showText
得很好,但值更改的通知不再通过OuterClass
实例传播到视图,因此视图根本不再显示文本。
import SwiftUI
class OuterClass: ObservableObject …
Run Code Online (Sandbox Code Playgroud) 我知道这是一个经典的但我在网上找不到答案:
我有这个HTML代码:
<div class="comment>
<div class="myLinks">Some Links</div>
<div class="comment">
<div class="myLinks">Some Links</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
然后我有这个CSS(用scss编写):
.myLinks {
display: hidden;
}
.comment {
&:hover {
.myLinks {
display: visible;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当指针位于第一个注释块之上时,嵌套的一个悬停效果也会被激活.我想要的是我的链接只在徘徊的评论中可见,而不是在他的父母或孩子中.
我怎样才能做到这一点?谢谢!