许多数据库连接池库提供了测试其SQL连接以实现空闲的能力.例如,JDBC池库c3p0有一个名为的属性preferredTestQuery,它以配置的间隔在连接上执行.同样,Apache Commons DBCP也有validationQuery.
我见过的许多示例 查询都是针对MySQL的,并建议使用它SELECT 1;作为测试查询的值.但是,此查询不适用于某些数据库(例如HSQLDB,SELECT 1需要一个FROM子句).
是否存在与数据库无关的查询,该查询具有同等效率,但适用于所有SQL数据库?
编辑:
如果没有(似乎是这种情况),有人可以建议一组适用于各种数据库提供程序的SQL查询吗?我的目的是以编程方式确定我可以根据我的数据库提供程序配置使用的语句.
我ToStringBuilder.reflectionToString(class)在commons-lang中用来实现toString()简单的DTO.现在我正在尝试使用Google Guava而不是Apache commons库.我Objects.ToStringHelper在瓜瓦找到了.但如果班上有很多成员,那就太啰嗦了.例如:
@Override
public String toString() {
return MoreObjects.toStringHelper(this.getClass()).add("name", name)
.add("emailAddress", emailAddress)
.add("department", department).add("yearJoined", yearJoined)
.toString();
}
Run Code Online (Sandbox Code Playgroud)
如果我使用commons-lang则更简单:
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来实施toString()番石榴,而不是公共场所?
我正在开始一个新的项目,我有第三方XSD.我的Java应用程序需要生成符合此XSD的XML消息,并读取符合此XSD的传入XML消息.在过去,我使用了Apache XMLBeans(http://xmlbeans.apache.org/).看起来XMLBeans已经退役了.现在已经退役的XMLBeans有什么好的替代品?我在其他项目中使用过XStream,但我不记得XStream能够从XSD生成Java类,所以我认为对于这个用例,它不是XMLBeans的好选择.我在XSD中定义了数百种类型,并且非常希望不必创建数百个Java类来手动用Java表示它们.
换句话说,使用此处给出的XStream示例:http://x-stream.github.io/tutorial.html,我在XSD中定义了Person类型(以及其他99个).使用XMLBeans我可以生成Java类来表示这些对象但是使用XStream我需要手动或使用其他工具来创建Java类(例如Person).在这种情况下我应该使用什么工具?
任何帮助将不胜感激.
谢谢,约翰
为某种类型设置转换器很容易(http://x-stream.github.io/javadoc/com/thoughtworks/xstream/XStream.html给出一个例子):
xstream.registerConverter(new SqlTimestampConverter());
xstream.registerConverter(new DynamicProxyConverter());
Run Code Online (Sandbox Code Playgroud)
我想注册一个转换器,但在不同的元素名称.Converter接口不提供元素的名称.
例如:如果元素名称(属性名称)将在,则应将日期转换为详细字符串,如果在,则将其转换为<longDate>short <shortDate>.如何根据属性名称添加不同的转换器?类似于xstream.registerConverter(类classtype,propertyname,converter)之类的东西不存在,但会很好.
我知道我可以使用PrettyPrintWriter的专用版本,但这对于这个简单的工作似乎很有用.还有其他想法吗?
顺便说一句:我可以使用注释@XStreamConverter(XXX.class),但我不想使用注释.我希望我的bean没有任何注释.
上下文/背景: 客户端通过Web套接字连接.服务器在Map中存储WebSocket会话和一些其他标识符以供以后使用.服务器从队列中接收一些需要通过web-socket发送给客户端的数据.使用Map中的会话我可以将其发送到客户端.到目前为止一切都很好
这一切都适用于单个节点,但没有多个节点(不需要群集),原因是WebSocket会话不是Serializable因此deiemma :(.我希望将WebSocket会话存储在Postgresql数据库中供以后使用但是我很震惊在序列化.
我尝试了什么: 其他人在非序列化会话websocket java ee中提出了类似的问题.我尝试在Tomcat的Session周围创建一个包装器并提供readObject writeObject,但不幸的是WsSession不允许设置/读取状态.
尝试使用库https://github.com/EsotericSoftware/kryo但在序列化WsSession的包装器方面没有成功.
我的环境: JDK 1.8.0_31,Tomcat 8.0.20,Spring 4.1.5.RELEASE,Debian Wheezy.
谢谢你的帮助.
更新: 尝试使用Kryo进行序列化时,我得到以下异常
com.esotericsoftware.kryo.KryoException: java.util.ConcurrentModificationException
Serialization trace:
classes (sun.misc.Launcher$AppClassLoader)
applicationClassLoader (org.apache.tomcat.websocket.WsSession)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:101) ~[kryo-3.0.1-SNAPSHOT.jar:?]
Run Code Online (Sandbox Code Playgroud)
我也尝试了XStream http://x-stream.github.io/并且它确实序列化为xml,但是当反序列化时我得到以下异常
---- Debugging information ----
message : Could not call java.security.CodeSource.readObject()
cause-exception : java.lang.RuntimeException
cause-message : null
class : java.security.CodeSource
required-type : java.security.CodeSource
converter-type : com.thoughtworks.xstream.converters.reflection.SerializableConverter
path : /org.apache.tomcat.websocket.WsSession/applicationClassLoader/parent/defaultDomain/codesource/java.security.CodeSource
line number : 30863
class[1] : java.security.ProtectionDomain
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2] : sun.misc.Launcher$ExtClassLoader
class[3] : …Run Code Online (Sandbox Code Playgroud) 我有一个日期字段,当使用XStream转换为xml 时,以毫秒和区域给出时间.我只需将其转换或格式化为"MMMM dd, yyyy HH:mm:ss".如何使用XStream做到这一点?我不想改变吸气剂和制定者.谢谢.
我的课:
public class Datas {
private String name;
private Calendar dob;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Calendar getDob() {
return dob;
}
public void setDob(Calendar dob) {
this.dob = dob;
}
public static void main(String[] args) {
Datas datas = new Datas();
datas.setName("Ahamed");
datas.setDob(Calendar.getInstance());
XStream stream = new XStream();
System.out.println(stream.toXML(datas));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
<Datas>
<name>Ahamed</name>
<dob>
<time>1329081818801</time>
<timezone>Asia/Calcutta</timezone>
</dob> …Run Code Online (Sandbox Code Playgroud) 我有一个二进制文件,其中包含Java Serialized对象(它们是值对象),但我无法访问序列化创建这些对象的Class.没有类文件,JVM不允许我使用objectInputStreamInstance.readObject()读取对象,并正确地抛出java.lang.ClassNotFoundException.
是否有可以帮助以XML或其他标准格式提取数据的库?例如,如果下面的Person类被序列化并存储在一个文件中,我想从中提取数据:
类定义
class Person implements Serializable {
int age;
String name;
public Person(int age, int name) {
this.age = age;
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
必需的提取格式(无需访问类文件)
<Person>
<age>10</age>
<name>Name</name>
</Person>
Run Code Online (Sandbox Code Playgroud)
我还检查了以下但没有得到我想要的东西:
谢谢您的帮助.
此致,Gursev
所述XStream序列库的权利要求是在序列化健壮复杂Java对象框(例如,没有修改的对象或需要映射)的进行。特别是,根据XStream 文档,XStream 可以处理循环对象引用。
所以我写了一个测试来检查这个 - 我试图序列化一个有点复杂的数据结构(LinkedHashMultimap),其中包括对 iteself 的引用:
import com.google.common.collect.LinkedHashMultimap;
import com.thoughtworks.xstream.XStream;
public class SerializationTest {
public static void main(String[] args0) {
// Create LinkedHashMultimap to serialize
LinkedHashMultimap<String, Object> outObj = LinkedHashMultimap.create();
outObj.put("x", 1);
outObj.put("x", "abc");
outObj.put("y", outObj); // Add a self-reference
// Try to serialize
XStream xstream = new XStream();
String xml = xstream.toXML(outObj);
System.out.println(xml); // Print XML to console for a quick peek
// Try to deserialize - ERROR HERE!!!
LinkedHashMultimap<String, Object> …Run Code Online (Sandbox Code Playgroud) 是否有Java XStream包的YAML驱动程序?
我已经在使用XStream来序列化/反序列化XML和JSON.我希望能够对YAML做同样的事情.
我有两节课:
public class A {
B refToB;
}
public class B {
A refToA;
}
Run Code Online (Sandbox Code Playgroud)
它们没有唯一的ID字段(JAX-B XMLID和XMLIDREF是必需的)。
对象实例:
A a = new A();
B b = new B();
a.refToB = b;
b.refToA = a;
Run Code Online (Sandbox Code Playgroud)
我想a在存储循环/循环依赖项时编组为XML,例如:
<a id="gen-id-0">
<b>
<a ref-id="gen-id-0" />
</b>
</a>
Run Code Online (Sandbox Code Playgroud)
我发现支持此功能的框架之一是XStream:http : //x-stream.github.io/graphs.html
还有哪些其他框架支持此功能?
某些JAX-B实现是否支持它?
我写了一个类,它将被 xstream 转换为 xml 。
我添加了 @XStreamAsAttribute 来添加 xmlns 作为属性。但它被添加为输出中的嵌套标签
我的类文件如下
@XStreamAlias("GetConfigurationParametersResponse")
public class GetConfigurationParametersResponse
extends BaseResponse
{
@XStreamAlias("xmlns")
@XStreamAsAttribute
final String xmlns = "http://www.collab.net/teamforge/integratedapp";
@XStreamAlias("xmlns:ns2")
@XStreamAsAttribute
final String ns2="http://www.collab.net/teamforge/integratedapp";
@XStreamImplicit(itemFieldName="ConfigurationParameter")
protected List<ConfigurationParameter> configurationParameter;
public List<ConfigurationParameter> getConfigurationParameter() {
if (configurationParameter == null) {
configurationParameter = new ArrayList<ConfigurationParameter>();
}
return this.configurationParameter;
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下
<com.collabnet.teamforge.ia.GetConfigurationParametersResponse>
<xmlns>http://www.collab.net/teamforge/integratedapp</xmlns>
<ns2>http://www.collab.net/teamforge/integratedapp</ns2>
</com.collabnet.teamforge.ia.GetConfigurationParametersResponse>
Run Code Online (Sandbox Code Playgroud)
但我需要输出为
<com.collabnet.teamforge.ia.GetConfigurationParametersResponse xmlns="http://www.collab.net/teamforge/integratedapp" xmlns:ns2="http://www.collab.net/teamforge/integratedapp">
</com.collabnet.teamforge.ia.GetConfigurationParametersResponse>
Run Code Online (Sandbox Code Playgroud)
请帮助找出我哪里出错了。我跟着这个教程http://x-stream.github.io/annotations-tutorial.html