标签: propagation

如何将 Spring 事务传播到另一个线程?

也许,我做错了什么,但我找不到以下情况的好方法。

我想对一个在下面使用Spring Batch来执行作业的服务进行单元测试。作业通过AsyncTaskExecutor在单独的线程中预先配置来执行。在我的单元测试中,我想:

  1. 创建少量域对象并通过 DAO 持久化它们
  2. 调用服务方法来启动作业
  3. 等待作业完成
  4. 使用 DAO 检索域对象并检查它们的状态

显然,以上所有内容都应该在一个事务中执行,但不幸的是,事务不会传播到新线程(我理解这背后的基本原理)。

我想到的想法:

  • 在步骤 (1) 之后提交事务 #1。不好,因为数据库状态应该在单元测试后回滚。
  • Isolation.READ_UNCOMMITTED在作业配置中使用。但这需要两种不同的配置用于测试和生产。

java spring multithreading transactions propagation

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

防止点击事件影响父jquery

我要停止从孩子到父母的事件传播,我有一堆li包含a.

$('li a[rel=close]').live('click', function(e){
    e.stopPropagation();
    e.preventDefault();
})
Run Code Online (Sandbox Code Playgroud)

但它并没有停止事件。有什么建议吗?

jquery events propagation stoppropagation

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

Spring Bean 使用 @Transactional 挂在方法上

只是一点背景,我是一个新的开发人员,最近在高级开发人员离开公司之后接手了一个重大项目,然后我才完全了解他是如何构建这个项目的。我会尽力解释我的问题。

此应用程序创建多个 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.() 在内的所有内容。

spring jpa transactional propagation

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

菲涅耳衍射分两步

我写了一个简短的 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)

matlab physics propagation fresnel

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

DNS传播 - 为什么子域只能在创建后的几分钟内访问(自己的名称服务器)

我们对子域的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,任何可能存在问题的想法以及如何在创建后立即访问子域帐户?

非常感谢

apache dns cpanel nameservers propagation

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

HTML LocalStorage 中的数据在其他窗口/选项卡中可用所需的时间

我有一个使用 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)

html delay propagation local-storage

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

具有不同隔离级别的spring嵌套事务

我有两个事务方法A和B.A的隔离级别为READ_COMMITTED,B的隔离级别为SERIALIZABLE.如果在A内部调用B,这里的默认行为是什么?

  • 是春天要为B创建一个新的交易,还是会在同一个交易中运行?是否可以正确处理B的隔离级别?
  • 如果两个线程同时访问A,当它们到达B调用时会发生什么?
  • 如果B的交易由于某种原因被回滚,A的交易是否也会被回滚?

注意:我们假设传播级别是A和B的默认级别.

关于在这种情况下会发生什么的任何想法?

java spring transactions propagation isolation-level

5
推荐指数
0
解决办法
302
查看次数

原子操作传播/可见性(原子负载与原子 RMW 负载)

语境

我正在用 C++编写一个线程安全的原型线程/协程库,并且我正在使用原子来使任务切换无锁。我希望它尽可能高效。我对原子和无锁编程有一个大致的了解,但我没有足够的专业知识来优化我的代码。我做了很多研究,但很难找到我的具体问题的答案:不同内存顺序下不同原子操作的传播延迟/可见性是多少?

当前假设

我读到对内存的更改是从其他线程传播的,它们可能会变得可见:

  1. 以不同的顺序给不同的观察者,
  2. 一些延迟。

我不确定这种延迟的可见性和不一致的传播是仅适用于非原子读取,还是也适用于原子读取,这可能取决于使用的内存顺序。当我在 x86 机器上开发时,我无法在弱有序系统上测试行为。

无论操作类型和使用的内存顺序如何,所有原子读取都总是读取最新值吗?

我很确定所有读-修改-写(RMW) 操作总是读取任何线程写入的最新值,而不管使用的内存顺序如何。对于顺序一致的操作似乎也是如此,但前提是对变量的所有其他修改也是顺序一致的。据说两者都很慢,这对我的任务不利。如果不是所有原子读取都获得最新值,那么我将不得不使用 RMW 操作来读取原子变量的最新值,或者在 while 循环中使用原子读取,以我目前的理解。

写入的传播(忽略副作用)是否取决于内存顺序和使用的原子操作?

(仅当上一个问题的答案是并非所有原子读取总是读取最新值时,此问题才有意义。请仔细阅读,我在这里不询问副作用的可见性和传播。我只关心原子变量本身的值。)这意味着根据用于修改原子变量的操作,可以保证任何后续原子读取接收变量的最新值。因此,我必须在保证始终读取最新值的操作之间进行选择,或者使用宽松的原子读取,以及这种特殊的写入操作,以保证对其他原子操作的修改的即时可见性。

c++ multithreading propagation memory-visibility stdatomic

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

SwiftUI - 通过嵌套引用类型传播更改通知

我想将 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)

propagation swiftui combine observableobject

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

css hover嵌套类传播

我知道这是一个经典的但我在网上找不到答案:

我有这个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)

当指针位于第一个注释块之上时,嵌套的一个悬停效果也会被激活.我想要的是我的链接只在徘徊的评论中可见,而不是在他的父母或孩子中.

我怎样才能做到这一点?谢谢!

css nested hover propagation

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