我有一个变量Object foo,它不是null.我想使用foo.bar,但只有当它不会用'没有这样的属性来轰炸我:bar for class:Whatever'时.
我该怎么做以下测试:
if (/*test-here*/) {
use(foo.bar)
}
Run Code Online (Sandbox Code Playgroud) 我们正在考虑在Java EE中开发关键任务应用程序,并且让我印象深刻的一件事是平台中缺少会话隔离.让我解释一下这个场景.
我们有一个原生的Windows应用程序(一个完整的ERP解决方案),每月从稀疏的贡献者那里获得大约2k LoC和50个bug修复.它还支持脚本,因此客户可以添加自己的逻辑,我们不知道这样的逻辑是做什么的.每个服务器节点都有一个代理和一个进程池,而不是使用线程池.代理接收客户端请求,将其排队直到池化实例空闲,向该实例发送请求,向客户端传递响应,并将实例释放回进程池.
这种体系结构非常强大,因为有这么多稀疏贡献和自定义脚本,所以部署版本有一些严重的错误,例如无限循环,长时间等待的悲观锁定,内存损坏或内存泄漏,这种情况并不少见.我们实现了内存限制,请求超时和简单的监视器.只要某个进程无法正确及时地回答,代理就会杀死它,因此看门狗会检测并启动另一个实例.如果进程在开始响应请求之前崩溃,则代理会将相同的请求发送到另一个池化实例,并且用户不知道服务器端的任何故障(管理日志除外).这很好,因为有些实例在处理请求时会被伪代码慢慢删除.因为大多数会话数据都保存在客户端或(在极少数情况下)共享存储中,所以它似乎完美无缺.
现在考虑转向Java EE,我在规范或流行的应用程序服务器上找不到类似的东西,比如Glassfish和JBoss.是的,我知道大多数集群实现都使用会话复制进行透明故障转移,但是我们有一些小公司在一个简单的双节点集群上使用我们的系统(我们也有冒险者在单节点服务器上使用该系统) .使用线程池,我理解一个错误的线程可以使整个节点关闭,因为服务器无法检测并安全地杀死它.将整个节点关闭比杀死单个进程要糟糕得多 - 我们有部署,其中每个节点有大约100个池化流程实例.
我知道IBM和SAP已经意识到了这个问题
, 分别.但基于最近的JSR,论坛和开源工具,社区上没有太多活动.
现在问题来了!
如果你有类似的场景并使用Java EE,你是如何解决的?
您是否了解即将推出的开源产品或Java EE规范中可以解决此问题的更改?
.NET有同样的问题吗?你能解释或引用参考文献吗?
您是否了解一些可以解决此问题的现代开放平台,并且值得完成ERP业务逻辑的任务?
拜托,我不得不告诉你不要做更多的测试或任何类型的QA投资,因为我们不能强迫我们的客户在他们自己的脚本上做这个.我们还有一些案例,其中紧急错误修复必须绕过QA,并且当我们强迫客户接受此时,我们不能让他接受有缺陷的软件部分会影响一系列不相关的功能.这个问题是关于健壮的架构,而不是开发过程.
感谢您的关注!
我在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->到处都是吗?
我需要快速读取blob数据.但是,似乎FetchAttributes()和OpenRead()方法都可以访问存储.我的blob非常小,所以我希望我能在一次访问中读取所有内容.那可能吗?
我唯一感兴趣的属性是ETag.我希望它能够进行高效且冲突感知的更新并删除blob内容.
在调试在Eclipse中使用反射的Java代码时,有时我需要踏入调用的方法或构造函数。但是,反射类,如java.lang.reflect.Method和java.lang.Class做内部呼叫sun.reflect.DelegatingConstructorAccessorImpl,sun.reflect.NativeConstructorAccessorImpl,sun.reflect.ReflectionFactory和其他人。这些类不在JDK随附的src.zip中。
这要求我将添加sun.reflect.*到调试器的“步骤过滤器”。否则,我将不得不在字节码视图中多次按F5(进入),而不知道何时进入我的代码。
但是,作为一个好奇的人,我希望知道发生了什么事。有人可以告诉我从哪里可以下载这些资源(如果存在这样的链接或资源库)?
.NET MemoryCache是C#对象的缓存.某些对象可能具有复杂的结构,而其他对象可能具有不安全的引用.C#是否为实现PhysicalMemoryLimit做了一些魔术,还是只计算每个对象的浅层大小?
我怀疑后者是这样的.但是,如果我在缓存中多次放置相同的对象(例如,用于跟踪缺失的项目),那么大小是一次性的,还是包含该实例的每个条目?
我有一个多平台解决方案,其中包含许多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
我有一个Java应用程序,通过JNI调用遗留应用程序的许多不同的本机方法.但是JVM在任何JNI调用之外的随机位置都会发生堆栈转储崩溃.有时它在GC期间崩溃,有时在课堂加载和其他地方崩溃.我怀疑一个或多个本机方法正在破坏JVM堆或其他一些数据结构.我需要知道这是哪个调用,所以我可以修复本机实现.
遗留应用程序是第三方DLL,我没有源代码或符号信息.为了使它可以从Java调用,我构建了一个使用JNI调用约定的包装器DLL.
完美的解决方案是扩展的JVM选项,它强制JVM在每次JNI调用后自动检查堆及其他数据结构的完整性.
你知道有什么可以帮助吗?
PS请不要告诉我在JVM和遗留应用程序之间构建套接字或管道层,因为我们的要求不允许这样做.这是关于错误检测,而不是架构设计.
我想使用Java Servlets构建无状态Web应用程序.因为它是无状态的,所以没有HttpSession.浏览器中有一个会话,但每个请求可能由群集中的其他节点处理.存储在浏览器中的会话标识符由服务器生成并加密,因此很难有人制作有效的伪会话ID并绕过登录.
最近我在这个架构中发现了一个漏洞:如果恶意(被感染的)浏览器将会话标识符发送给强盗,则会话很容易被劫持.我无法在每个请求中重新生成会话标识符,因为服务器上没有会话来跟踪预期的请求序列,这也会使异步请求的处理变得复杂.
到目前为止,我的解决方案是获取一些HTTPS会话标识符并将其包含在存储在浏览器中的加密会话ID中.标准servlet可以从HTTPS连接获取此类信息吗?
另一种选择是仅为getId()使用HttpSession,但只有当这样的ID与HTTPS会话绑定时才会起作用,这是我在servlet规范中找不到的.
其他建议是受欢迎的.
在git的结帐文档说:
--ours --theirs 当从索引检查出路径,检查阶段#2(我们)或#3(他们的)用于未合并的路径.
在合并,rebase和cherry-pick期间,"阶段#2"和"阶段#3"的含义是什么?有没有办法在运行命令之前查询这些"阶段"以确保它将检索正确的版本?