- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个变量——“protected static Context jndi;”在我的类(class)中,“上下文”是一个接口(interface)。当我尝试以下面提到的方法访问它时,它会生成标题中提到的声纳违规
public JMSQueueResource createQueueResource(String queueBindingName, String qcfBindingName, boolean messagePersisted, boolean autoAcknowledge, boolean nonJMS) throws JMSException, NamingException {
JMSQueueResource qResource = new JMSQueueResource();
try {
jndi = createInitialContext();
if (queueConnectionFactory == null) {
queueConnectionFactory = (QueueConnectionFactory) lookup(jndi, qcfBindingName);
}
qResource.theQueueConnection = queueConnectionFactory.createQueueConnection();
if (autoAcknowledge) {
qResource.theQueueSession = qResource.theQueueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
}
else {
qResource.theQueueSession = qResource.theQueueConnection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
}
Queue queue = (Queue) lookup(jndi, queueBindingName);
//if (nonJMS && queue instanceof com.ibm.mq.jms.MQQueue) {
// com.ibm.mq.jms.MQQueue q = (com.ibm.mq.jms.MQQueue) queue;
// q.setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
//}
qResource.theQueueSender = qResource.theQueueSession.createSender(queue);
if (messagePersisted) {
qResource.theQueueSender.setDeliveryMode(DeliveryMode.PERSISTENT);
}
else {
qResource.theQueueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
}
qResource.theQueueConnection.start();
}
catch (JMSException jmse) {
throw jmse;
}
catch (NamingException ne) {
throw ne;
}
finally {
if(jndi != null){
jndi.close();
}
}
return qResource;
}
我可以看到有人建议使用 Atomic Integer 包装器。这个问题的最佳解决方法是什么?
最佳答案
声纳违规是有效的,因为从实例方法改变静态变量会导致一些非常困惑的行为,例如:
createQueueResource
方法访问该字段时会发生什么情况?关于 Java documentation ,使它成为静态的并可能被多个线程访问是一个坏主意:
An InitialContext instance is not synchronized against concurrent access by multiple threads. Multiple threads each manipulating a different InitialContext instance need not synchronize. Threads that need to access a single InitialContext instance concurrently should synchronize amongst themselves and provide the necessary locking.
按照建议使用局部变量似乎是避免警告和相关问题的第一种合理方法。
上下文的构建是否昂贵还取决于用于提供它的工厂。
首先你需要担心程序的正确性,然后当你可以测试真正的瓶颈在哪里时,你就可以优化。
编辑:此链接应该提供对 Spring 应用程序上下文的更多见解,以及如何利用 Spring 容器的依赖注入(inject)来使用上下文而不是将其存储在类中的变量中 https://spring.io/understanding/application-context
关于java - 声纳违规 : Dodgy - Write to static field from instance method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476889/
与其说这是一个技术问题,不如说是一个政策问题。 开发应用程序时,如果附属机构提供的链接构成您内容的一部分,您是否可以显示该链接?例如,专门用于从 Affiliate Window 查找特定流派黑胶唱片
我是一名优秀的程序员,十分优秀!