贝壳大师,
我有一个bash shell脚本,我在其中启动一个后台函数,比如说foo()
,显示一个无聊和长命令的进度条:
foo()
{
while [ 1 ]
do
#massively cool progress bar display code
sleep 1
done
}
foo &
foo_pid=$!
boring_and_long_command
kill $foo_pid >/dev/null 2>&1
sleep 10
Run Code Online (Sandbox Code Playgroud)
现在,当foo
我去世时,我看到以下文字:
/home/user/script: line XXX: 30290 Killed foo
Run Code Online (Sandbox Code Playgroud)
这完全摧毁了我的,非常酷的进度条显示的令人敬畏.
我如何摆脱这条消息?
如果您尝试编组一个引用没有no-arg构造函数的复杂类型的类,例如:
import java.sql.Date;
@XmlRootElement(name = "Foo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
int i;
Date d; //java.sql.Date does not have a no-arg constructor
}
Run Code Online (Sandbox Code Playgroud)
使用JAXB实现作为Java的一部分,如下所示:
Foo foo = new Foo();
JAXBContext jc = JAXBContext.newInstance(Foo.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(foo, baos);
Run Code Online (Sandbox Code Playgroud)
JAXB将抛出一个
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions java.sql.Date does not have a no-arg default constructor
Run Code Online (Sandbox Code Playgroud)
现在,我理解为什么JAXB在解组时需要一个无参数的构造函数 - 因为它需要实例化对象.但是为什么JAXB在编组时需要一个无参数的构造函数?
另外,为什么Java的JAXB实现如果该字段为空则抛出异常,并且无论如何都不会被编组?
我在Java的JAXB实现中遗漏了一些东西,或者这些只是糟糕的实现选择?
从我的读数来看,执行命令时如下:
java -jar foo.jar
Run Code Online (Sandbox Code Playgroud)
然后忽略主类路径,并从清单文件中获取类路径.
此外,还会忽略在命令行上声明的类路径.所以在:
java -classpath /usr/local/jar/foobar.jar -jar foo.jar
Run Code Online (Sandbox Code Playgroud)
/usr/local/jar/foobar.jar被忽略.
最后,我已经读过清单文件只能在jar文件中包含相对路径.
那么,如何包含系统中存在的外部jar的绝对路径,而不是正在执行的jar文件中?
要将stdout和stderr重定向(并附加)到文件中,同时还在终端上显示它,我这样做:
command 2>&1 | tee -a file.txt
Run Code Online (Sandbox Code Playgroud)
但是,有没有其他方法可以做到这一点,以便我获得退出状态的准确值?
也就是说,如果我测试$?
,我想看到退出状态command
,而不是退出状态tee
.
我知道我可以${PIPESTATUS[0]}
在这里使用而不是$?
,但我正在寻找另一种不需要检查的解决方案PIPESTATUS
.
我有一个阻塞队列的对象.
我想写一个阻塞的线程,直到队列中有一个对象.与BlockingQueue.take()提供的功能类似.
但是,由于我不知道我是否能够成功处理对象,我想只是peek()而不是删除对象.我想删除该对象只有我能够成功处理它.
所以,我想要一个阻塞的peek()函数.目前,peek()只是在队列为空时根据javadoc返回.
我错过了什么吗?还有其他方法可以实现此功能吗?
编辑:
如果我只是使用了一个线程安全队列并且偷看和睡觉了?
public void run() {
while (!exit) {
while (queue.size() != 0) {
Object o = queue.peek();
if (o != null) {
if (consume(o) == true) {
queue.remove();
} else {
Thread.sleep(10000); //need to backoff (60s) and try again
}
}
}
Thread.sleep(1000); //wait 1s for object on queue
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我只有一个消费者线程和一个(单独的)生产者线程.我想这不如使用BlockingQueue有效......任何评论都赞赏.
我正在读这篇文章: 在SQL中获取null == null
并且一致认为,当尝试测试两个(可为空)sql列之间的相等性时,正确的方法是:
where ((A=B) OR (A IS NULL AND B IS NULL))
Run Code Online (Sandbox Code Playgroud)
当A和B为NULL时,(A = B)仍然返回FALSE,因为NULL不等于NULL.这就是需要额外检查的原因.
在测试不平等时呢?根据上面的讨论,它让我认为,为了测试不平等,我需要做一些像:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)
但是,我注意到这没有必要(至少在informix 11.5上没有),我可以这样做:
where (A<>B)
Run Code Online (Sandbox Code Playgroud)
如果A和B为NULL,则返回FALSE.如果NULL不等于NULL,那么这不应该返回TRUE吗?
编辑
这些都是很好的答案,但我认为我的问题有点模糊.请允许我改写一下:
鉴于A或B都可以为NULL,是否足以检查它们的不等式
where (A<>B)
Run Code Online (Sandbox Code Playgroud)
或者我需要明确检查它:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)
请参阅此主题以获得此问题的答案.
我有以下代码:
try {
//jaw-ws service port operation
port.login();
} catch (Exception e) {
logger.error("Caught Exception in login(): " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
当使用不正确的主机名运行上述内容时,我得到:
Caught Exception in login(): HTTP transport error: java.net.UnknownHostException: abc
Run Code Online (Sandbox Code Playgroud)
这是正确和预期的.我重新编写代码以专门捕获UnknownHostException,如下所示:
import java.net.UnknownHostException;
try {
//jaw-ws service port operation
port.login();
} catch (UnknownHostException uhe) {
//do something specific to unknown host exception
} catch (Exception e) {
logger.error(Caught Exception in login(): " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译它时,我得到:
[javac] foo.java: exception java.net.UnknownHostException is never thrown in body of corresponding try statement …
Run Code Online (Sandbox Code Playgroud) 我有以下程序:
CREATE PROCEDURE foo ()
SELECT * FROM fooBar INTO TEMP tempTable;
-- do something with tempTable here
DROP TABLE tempTable;
END PROCEDURE;
Run Code Online (Sandbox Code Playgroud)
如果在调用DROP TABLE之前发生异常会发生什么?foo退出后,tempTable还会出现吗?
如果是这样,foo可能会在下次调用时失败,因为tempTable已经存在.应如何处理.
编辑:我正在使用informix 11.5
我在wsdl中定义了以下数据类型:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0">
<xs:simpleType name="MyEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="one"/>
<xs:enumeration value="two"/>
</xs:restriction>
</xs:simpleType>
<!-- SNIP other data types -->
</xs:schema>
</wsdl:types>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)
我希望MyEnum落入自己的包中.所以,我使用了一个jaxws绑定文件,并使用XPATH遍历模式和jaxb绑定来设置包,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']">
<jxb:schemaBindings>
<jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace-->
</jxb:schemaBindings>
<jxb:bindings node="//xs:simpleType[@name='MyEnum']">
<jxb:package name="a.b.c"/> <!-- this does not work -->
</jxb:bindings>
</jaxws:bindings>
<!-- SNIP - …
Run Code Online (Sandbox Code Playgroud) java ×5
database ×3
sql ×3
bash ×2
informix ×2
jaxb ×2
null ×2
nullable ×2
classpath ×1
cxf ×1
exception ×1
jar ×1
javac ×1
jax-ws ×1
linux ×1
manifest.mf ×1
marshalling ×1
peek ×1
queue ×1
scripting ×1
shell ×1
stderr ×1
stdout ×1
tee ×1
temp-tables ×1
try-catch ×1
unix ×1
wsdl2java ×1
xml ×1