我注意到NetBeans警告我在我的Java代码中使用while循环中的Thread.sleep(),所以我已经对这个主题进行了一些研究.主要问题似乎是性能问题,当计数器仍处于休眠状态时,你的状态可能会变为真,因此在等待下一次迭代时会浪费挂钟时间.这一切都很有道理.
我的应用程序需要联系远程系统并定期轮询操作状态,等待操作完成后再发送下一个请求.目前,代码在逻辑上执行此操作:
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
Run Code Online (Sandbox Code Playgroud)
鉴于情况是检查远程操作(这是一个有点昂贵的过程,因为它运行了几秒钟),这是一个在while循环中有效使用Thread.sleep()吗?有没有更好的方法来构建这个逻辑?我已经看到了一些我可以使用Timer类的例子,但是我没有看到它的好处,因为它似乎仍然归结为上面相同的直接逻辑,但是引入了更多的复杂性.
请记住,在这种情况下,远程系统既不是我的直接控制,也不是用Java编写的,因此在这种情况下将此端更改为"合作"不是一种选择.我更新应用程序状态值的唯一选择是创建和发送XML消息,接收响应,解析它,然后提取我需要的信息.
任何建议或意见都是最受欢迎的.
我正在尝试使用Glassfish 3.1提供的jar文件在Java EE 6中使用JavaMail设置简单的日志记录测试.关于这个问题似乎有很多问题,但我还没有找到任何有帮助的答案.我的测试代码如下所示:
import java.util.logging.Logger;
public class MyClass {
private static final Logger LOGGER = Logger.getLogger("MyClass");
public static void main(String[] args) {
LOGGER.severe("This is a test");
}
}
Run Code Online (Sandbox Code Playgroud)
我的logging.properties文件包含以下内容:
com.sun.mail.util.logging.MailHandler.mail.smtp.host={my mail hub FQDN}
com.sun.mail.util.logging.MailHandler.mail.smtp.port=25
com.sun.mail.util.logging.MailHandler.mail.to={me}
com.sun.mail.util.logging.MailHandler.mail.from={support address}
com.sun.mail.util.logging.MailHandler.level=WARNING
com.sun.mail.util.logging.MailHandler.verify=local
com.sun.mail.util.logging.MailHandler.subject=Application Error
com.sun.mail.util.logging.MailHandler.formatter=java.util.logging.SimpleFormatter
Run Code Online (Sandbox Code Playgroud)
我使用以下方法构建类:
javac -cp $AS_INSTALL/glassfish/modules/javax.mail.jar:$AS_INSTALL/install/lib/external/jaxb/activation.jar:. MyClass.java
Run Code Online (Sandbox Code Playgroud)
然后我运行程序使用:
java -cp $AS_INSTALL/glassfish/modules/javax.mail.jar:$AS_INSTALL/install/lib/external/jaxb/activation.jar:. -Djava.util.logging.config.file=logging.properties MyClass
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
Sep 22, 2011 4:19:25 PM MyClass main
SEVERE: This is a test
java.util.logging.ErrorManager: 3: SEVERE: no object DCH for MIME type multipart/mixed;
boundary="----=_Part_1_26867996.1316722766145"
javax.activation.UnsupportedDataTypeException: no …Run Code Online (Sandbox Code Playgroud) 我有一个问题登录到Glassfish 3.1.2的管理控制台上,四个相同(至少是理论上)配置域在不同服务器上的一个.当我登录那个无效的那个时,我被重定向到一个空白页:
https:// {server}:{admin port}/j_security_check
它附带此日志消息:
[#|2013-02-18T09:58:02.912-0500|SEVERE|glassfish3.1.2|org.glassfish.admingui|_ThreadID=20;_ThreadName=Thread-2;|javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed; javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed; restRequest: endpoint=https://localhost:9048/management/domain/anonymous-user-enabled attrs={} method=GET|#]
Run Code Online (Sandbox Code Playgroud)
其他信息:
我启用了安全管理,并禁用了匿名用户.
我可以使用相同的用户/密码请求https:// {server}:{admin port}/management/domain,并成功启动REST接口.请求/管理/域/启用匿名用户确实会触发相同的问题(空白页,记录的错误).
我可以使用相同的用户/密码运行"asadmin -p {admin port}"并成功运行命令行命令.
我似乎记得在某一点跟踪这一点,管理控制台试图从sun.com域上的服务器提取文件,SSL证书已经过期,但我似乎无法找到我申请的解决方案当时.
我试图使用其中一个正在运行的服务器上的cacerts.jks文件,但这没有帮助.
我在keystore.jks中的s1as证书的失效日期仍然是8年.
服务器上的日期/时间设置正确.
谢谢你的任何建议.
史蒂夫
我正在使用Chrome和Firefox下的Yslow工具审查我的开发网站,其中一个建议是我gzip适当的内容.作为起点,我刚刚将"tools.gzip.on = True"添加到我的[/]配置中.我知道配置文件和块正在被正确解析,因为我还在响应头中添加了禁用缓存的选项,因为我在开发站点时经常更改文件.我在回复中看到"Expires"和"Pragma:no-cache"标题.
出于某种原因,即使在更改配置文件(并重新启动过程,这不是绝对必要的)之后,Yslow仍然报告我没有使用gzip.我也一直在使用wget并且看不到Content-Encoding标头.
任何人都可以建议我如何验证发生了什么?我想知道这个问题是否忽略了gzip设置,或者Yslow只是弄错了事实.我之前从未遇到过Yslow的麻烦,所以我倾向于前者.
我要补充一点,Yslow只报告我的外部CSS和JavaScript文件(由同一个樱桃过程提供服务)需要压缩,即使"wget -S"显示的标题甚至不显示gzip编码页面本身(动态内容).
我尝试将"tools.gzip.on = True"添加到我的[/ css]和[/ js]块中,我也尝试在所有相同的块中设置"tools.encode.on = True",想想也许编码必须启用gzip才能工作.
提前致谢.