小编fer*_*olo的帖子

Groovy:如何测试属性访问是否成功?

我有一个变量Object foo,它不是null.我想使用foo.bar,但只有当它不会用'没有这样的属性来轰炸我:bar for class:Whatever'时.

我该怎么做以下测试:

if (/*test-here*/) {
  use(foo.bar)
}
Run Code Online (Sandbox Code Playgroud)

groovy properties

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

如何隔离Java EE中的用户会话?

我们正在考虑在Java EE中开发关键任务应用程序,并且让我印象深刻的一件事是平台中缺少会话隔离.让我解释一下这个场景.

我们有一个原生的Windows应用程序(一个完整的ERP解决方案),每月从稀疏的贡献者那里获得大约2k LoC和50个bug修复.它还支持脚本,因此客户可以添加自己的逻辑,我们不知道这样的逻辑是做什么的.每个服务器节点都有一个代理和一个进程池,而不是使用线程池.代理接收客户端请求,将其排队直到池化实例空闲,向该实例发送请求,向客户端传递响应,并将实例释放回进程池.

这种体系结构非常强大,因为有这么多稀疏贡献和自定义脚本,所以部署版本有一些严重的错误,例如无限循环,长时间等待的悲观锁定,内存损坏或内存泄漏,这种情况并不少见.我们实现了内存限制,请求超时和简单的监视器.只要某个进程无法正确及时地回答,代理就会杀死它,因此看门狗会检测并启动另一个实例.如果进程在开始响应请求之前崩溃,则代理会将相同的请求发送到另一个池化实例,并且用户不知道服务器端的任何故障(管理日志除外).这很好,因为有些实例在处理请求时会被伪代码慢慢删除.因为大多数会话数据都保存在客户端或(在极少数情况下)共享存储中,所以它似乎完美无缺.

现在考虑转向Java EE,我在规范或流行的应用程序服务器上找不到类似的东西,比如Glassfish和JBoss.是的,我知道大多数集群实现都使用会话复制进行透明故障转移,但是我们有一些小公司在一个简单的双节点集群上使用我们的系统(我们也有冒险者在单节点服务器上使用该系统) .使用线程池,我理解一个错误的线程可以使整个节点关闭,因为服务器无法检测并安全地杀死它.将整个节点关闭比杀死单个进程要糟糕得多 - 我们有部署,其中每个节点有大约100个池化流程实例.

我知道IBM和SAP已经意识到了这个问题

, 分别.但基于最近的JSR,论坛和开源工具,社区上没有太多活动.

现在问题来了!

  1. 如果你有类似的场景并使用Java EE,你是如何解决的?

  2. 您是否了解即将推出的开源产品或Java EE规范中可以解决此问题的更改?

  3. .NET有同样的问题吗?你能解释或引用参考文献吗?

  4. 您是否了解一些可以解决此问题的现代开放平台,并且值得完成ERP业务逻辑的任务?

拜托,我不得不告诉你不要做更多的测试或任何类型的QA投资,因为我们不能强迫我们的客户在他们自己的脚本上做这个.我们还有一些案例,其中紧急错误修复必须绕过QA,并且当我们强迫客户接受此时,我们不能让他接受有缺陷的软件部分会影响一系列不相关的功能.这个问题是关于健壮的架构,而不是开发过程.

感谢您的关注!

java session isolation java-ee

8
推荐指数
1
解决办法
1177
查看次数

有没有办法避免$ this->无处不在?

我在PHP中有一个包含许多方法和变量的类.每次我需要一个方法来调用同一个类中的另一个时,我必须添加$this->.这个(!)会产生一些非常易读的来源,例如:

$nextX = $this->calculateNextX($this->DX, $this->DY, $this->DZ);
$nextY = $this->calculateNextY($this->DX, $this->DY, $this->DZ);
$nextZ = $this->calculateNextZ($this->DX, $this->DY, $this->DZ);
$this->X = $nextX;
$this->Y = $nextY;
$this->Z = $nextZ;
Run Code Online (Sandbox Code Playgroud)

有办法避免$this->到处都是吗?

php oop class

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

Azure存储:如何在单次访问中读取blob数据和属性?

我需要快速读取blob数据.但是,似乎FetchAttributes()OpenRead()方法都可以访问存储.我的blob非常小,所以我希望我能在一次访问中读取所有内容.那可能吗?

我唯一感兴趣的属性是ETag.我希望它能够进行高效且冲突感知的更新并删除blob内容.

.net c# azure azure-storage azure-storage-blobs

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

太阳反射的来源在哪里?

在调试在Eclipse中使用反射的Java代码时,有时我需要踏入调用的方法或构造函数。但是,反射类,如java.lang.reflect.Methodjava.lang.Class做内部呼叫sun.reflect.DelegatingConstructorAccessorImplsun.reflect.NativeConstructorAccessorImplsun.reflect.ReflectionFactory和其他人。这些类不在JDK随附的src.zip中。

这要求我将添加sun.reflect.*到调试器的“步骤过滤器”。否则,我将不得不在字节码视图中多次按F5(进入),而不知道何时进入我的代码。

但是,作为一个好奇的人,我希望知道发生了什么事。有人可以告诉我从哪里可以下载这些资源(如果存在这样的链接或资源库)?

java reflection

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

.NET MemoryCache:它如何强制执行内存限制?

.NET MemoryCache是C#对象的缓存.某些对象可能具有复杂的结构,而其他对象可能具有不安全的引用.C#是否为实现PhysicalMemoryLimit做了一些魔术,还是只计算每个对象的浅层大小?

我怀疑后者是这样的.但是,如果我在缓存中多次放置相同的对象(例如,用于跟踪缺失的项目),那么大小是一次性的,还是包含该实例的每个条目?

c# memory asp.net caching garbage-collection

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

Visual Studio:如何更改编辑器使用的目标框架?

我有一个多平台解决方案,其中包含许多csproj配置文件:

<PropertyGroup>
  <TargetFrameworks>net452;netstandard1.4</TargetFrameworks>    
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.4' ">    
  <PackageReference Include="System.Net.Http" Version="4.3.0"/>
  <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net452' ">
  <Reference Include="System.Net" />
  <Reference Include="System.Net.Http" />
  <PackageReference Include="Newtonsoft.Json" Version="6.0.8" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

请注意,我没有TargetFramework元素(单数形式).我只有TargetFrameworks元素(复数形式).

编辑器假设netstandard1.4并且所有#if NET452块都变灰并且没有IntelliSense.

我怎样才能告诉Visual Studio编辑器识别特定的目标框架(net452,netstandard1.4),并至少暂时获取IntelliSense?

作为参考,我使用的是VS2017 Professional 15.2版(26430.16).

.net visual-studio .net-core visual-studio-2017 .net-standard

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

如何调试JNI堆损坏问题?

我有一个Java应用程序,通过JNI调用遗留应用程序的许多不同的本机方法.但是JVM在任何JNI调用之外的随机位置都会发生堆栈转储崩溃.有时它在GC期间崩溃,有时在课堂加载和其他地方崩溃.我怀疑一个或多个本机方法正在破坏JVM堆或其他一些数据结构.我需要知道这是哪个调用,所以我可以修复本机实现.

遗留应用程序是第三方DLL,我没有源代码或符号信息.为了使它可以从Java调用,我构建了一个使用JNI调用约定的包装器DLL.

完美的解决方案是扩展的JVM选项,它强制JVM在每次JNI调用后自动检查堆及其他数据结构的完整性.

你知道有什么可以帮助吗?

PS请不要告诉我在JVM和遗留应用程序之间构建套接字或管道层,因为我们的要求不允许这样做.这是关于错误检测,而不是架构设计.

java java-native-interface

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

Servlet可以获得HTTPS会话ID吗?

我想使用Java Servlets构建无状态Web应用程序.因为它是无状态的,所以没有HttpSession.浏览器中有一个会话,但每个请求可能由群集中的其他节点处理.存储在浏览器中的会话标识符由服务器生成并加密,因此很难有人制作有效的伪会话ID并绕过登录.

最近我在这个架构中发现了一个漏洞:如果恶意(被感染的)浏览器将会话标识符发送给强盗,则会话很容易被劫持.我无法在每个请求中重新生成会话标识符,因为服务器上没有会话来跟踪预期的请求序列,这也会使异步请求的处理变得复杂.

到目前为止,我的解决方案是获取一些HTTPS会话标识符并将其包含在存储在浏览器中的加密会话ID中.标准servlet可以从HTTPS连接获取此类信息吗?

另一种选择是仅为getId()使用HttpSession,但只有当这样的ID与HTTPS会话绑定时才会起作用,这是我在servlet规范中找不到的.

其他建议是受欢迎的.

java security https session servlets

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

git checkout:"他们的"和"我们的"的详细含义

git的结帐文档说:

--ours --theirs 当从索引检查出路径,检查阶段#2(我们)或#3(他们的)用于未合并的路径.

在合并,rebase和cherry-pick期间,"阶段#2"和"阶段#3"的含义是什么?有没有办法在运行命令之前查询这些"阶段"以确保它将检索正确的版本?

git version-control merge branching-and-merging git-branch

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