昨天@headius / Charles Nutter 在推特上提出了一个非常有趣的想法:
@danny_l Gafter 犯了同样的错误;我的意思不是一个分叉的 Java,就像 Groovy 是一个分叉一样。我想要一个带有闭包的“主要是 Java”。
或@danny_l / Danny Lagrouw 的回复:
@headius 或者 BGGA 原型是否可以“固定在”任何未来版本的 Java 上?那可能有用
这也确实是我希望看到的。我们不能有某种字节码预处理器来使 BGGA 原型在任何现代 Java 版本上工作吗?我的意思是 scala、Groovy 和 JRuby 有闭包并生成有效的字节码!
我什至愿意提供帮助并为此付出努力。虽然我真的不知道从哪里开始。
(以上是我写的关于这个主题的博客文章的摘录)
其他人如何看待这个想法?
与我如何使我的JUnit测试以随机顺序运行相似?,我希望TestNG以随机顺序运行我的测试,因此无意识的依赖关系无法进入.
默认情况下,TestNG将以随机顺序运行testng.xml文件中的测试.
但是,我用一个简单的testng.xml创建了一个小测试项目:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="My suite">
<test name="Simple test">
<packages>
<package name="testngtests"></package>
</packages>
</test>
</suite>
Run Code Online (Sandbox Code Playgroud)
该软件包testngtests包含两个测试类(MyTest1,MyTest2),这些类包含一些空方法,如下所示:
@Test
public void testOne(){
}
Run Code Online (Sandbox Code Playgroud)
测试方法都是空的,只是名称不同.
当我运行它们(使用Eclipse TestNG运行程序或在命令行上)时,测试一致地以相同的顺序运行(即按字母顺序排序,首先按类排序,然后按方法名称排序).
那么文档错了吗?
或者"随机顺序"只是表示"没有保证订单"?然后,我如何让TestNG主动随机化测试订单?
是否可以使用SSL连接到站点,其中客户端只有根证书,但服务器同时具有根证书和中间证书?
我试图使用HttpUrlConnection与包含我的根的TrustManager连接,我得到通常的握手错误:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
Certificate chaining error
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
Run Code Online (Sandbox Code Playgroud)
我知道一般的解决方案是安装中间证书,但我想避免不断获得供应商X的新中间证书.
我熟悉使用接受所有内容的TrustManager,但这不是一个选项.
我正在使用as400 db2并试图在JPQL中执行一个查询,该查询将从第x行返回结果到第y行.
在sql中这是我的代码(它运行良好):
select cur.* from (
SELECT ROW_NUMBER() OVER() AS ROWNUM FROM tableName d) as cur
WHERE cur.ROWNUM > 0 AND cur.ROWNUM < 10
Run Code Online (Sandbox Code Playgroud)
如何将此SQL查询更改为JPQL?我在很多方面尝试过它,但每次我都遇到异常.
这样做的正确方法是什么?我想限制我的结果来自sql查询,而不是使用setMaxResult,setFirstResult方法.
任何帮助将是appritiates,
提前致谢.
我面临一个类似于Invalidating JPA EntityManager session 中描述的问题:
问题:获取陈旧数据
我们正在 SQL 数据库上运行 JPQL 查询,该数据库也由不同的应用程序同时更改。我们使用的是在Tomcat下运行的JSF+Spring+EclipseLink。
执行 JPQL 查询的类是一个单例 Spring bean,并使用注入的EntityManager:
@Component
public class DataRepository{
@PersistenceContext
private EntityManager entityManager;
public List<MyDTO> getStuff(long id) {
String jpqlQuery ="SELECT new MyDTO([...])";
TypedQuery<MyDTO> query = entityManager.createQuery(jpqlQuery,MyDTO.class);
return query.getResultList();
}
[...]
Run Code Online (Sandbox Code Playgroud)
(代码释义)。
问题是这段代码看不到直接对数据库执行的更改。这些更改仅在 Tomcat 实例重新启动时才可见。
我们尝试过的
我们假设此行为是由与 关联的一级缓存引起的EntityManager,如链接问题中所述。我们找到了两个解决方案:
entityManager.clear()调用之前createQuery(这是建议的链接的问题)EntityManagerFactor(使用@PersistenceUnit),然后EntityManager为每个查询创建并关闭一个新的两种解决方案都能满足我们的需求——我们获得了新的数据。
问题:
entityManager.clear()注入的 EntityManager,或者这是否会以某种方式影响也使用注入的 EntityManager 的其他代码(在相同或不同的类中)?EntityManager?我认为这一定是一个相当普遍的问题(因为它发生在多个应用程序共享一个数据库时),所以我认为必须有一个简单的解决方案......
我的UI中有一个HTML textarea(用于基于Java的Web应用程序),用户可以在其中输入任何值.保存后,它将显示在浏览器中的textarea(已禁用)中.
如果用户在textarea中输入任何脚本作为自由文本,它是否会作为脚本执行(即使值显示在textarea中,而不是作为标签/文本显示)?
正如许多地方所解释的那样(例如为什么十进制数不能用二进制数精确表示?),并非所有小数部分都可以表示为浮点值(例如存储float在Java中).
给出的典型示例是"0.2".根据这个漂亮的IEEE 754转换器,float最接近0.2的是大约0.20000000298023224,因此解析"0.2"作为a float应该产生这个结果.
但是,我注意到Java似乎能够做到这一点:
String number="0.2";
float f = Float.parseFloat(number);
System.out.println("Result of roundtrip String -> float -> String: "+f);
Run Code Online (Sandbox Code Playgroud)
打印:
往返字符串的结果 - > float - >字符串:0.2
Java如何知道我想要(舍入)输出"0.2",而不是如上所述的精确输出"0.20000000298023224"?
该的Javadoc中Float.toString()试图解释这一点:
m或a的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,并且除此之外必须有多个,但只有多少个,更多的数字才能唯一地将参数值与float类型的相邻值区分开来.
不幸的是,这让我更加困惑.为什么"打印尽可能多的数字来唯一区分参数值"允许Java打印"0.2"?
理想情况下,答案也可以解释为什么选择此打印算法.这个例子是(一些)往返工作吗?还有其他动机吗?
我遇到了JAXB拒绝解组XML元素的情况,除非相应的Java字段具有命名空间注释.此行为仅在JDK 1.8.0_111(或可能在102)中启动.早期版本的JDK 1.8可以使用.
测试用例:
Java类(缩写):
package my.package;
@XmlRootElement(name = "MyElement", namespace="myns")
public class MyElement {
@XmlElement(name = "subEl")
private String subEl;
}
Run Code Online (Sandbox Code Playgroud)
XML:
<MyElement xmlns="myns">
<subEl>text1</subEl>
</MyElement>
Run Code Online (Sandbox Code Playgroud)
package-info.java:
@XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED)
package my.package;
Run Code Online (Sandbox Code Playgroud)
解组代码:
JAXBContext jc = JAXBContext.newInstance(MyElement.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MyElement myel = (MyElement) unmarshaller.unmarshal(xmlStream);
System.out.println("Parse result: "+ myel);
Run Code Online (Sandbox Code Playgroud)
使用JDK 1.8.0_101(及更早版本)打印:
解析结果:MyElement [subEl = subEl]
使用JDK 1.8.0_111,我得到:
解析结果:MyElement [subEl = null]
所以JDK 1.8.0_111拒绝解组元素"MyElement".
如果我在字段注释上指定命名空间:
@XmlElement(name = "subEl", namespace="myns")
private String subEl;
Run Code Online (Sandbox Code Playgroud)
它在所有JDK版本中都按预期工作.
这里发生了什么?
据我所知,该设置elementFormDefault = XmlNsForm.QUALIFIED应该导致类MyElement的所有字段"继承"该类的命名空间.该 …
我正在研究的一个相当复杂的SQL查询让我思考(ANSI)SQL的局限性:
有没有办法检索关于任意排序的最大或最小记录?
换一种说法:
给出这样的查询:
SELECT * FROM mytable WHERE <various conditions> ORDER BY <order clause>
Run Code Online (Sandbox Code Playgroud)
是否可以编写一个只返回第一行的查询(可能通过将order子句转换为其他内容)?
我知道你可以使用LIMIT(MySQL)/ ROWNUM(Oracle)或类似的方法来做到这一点,但这不是标准的SQL.
我也知道你可以通过在子查询中获取你感兴趣的最大/最小值(使用MIN()/ MAX())来做到这一点,然后在主SELECT中使用该结果作为标准,即:
SELECT * FROM mytable WHERE <various conditions> AND myMaxColumn=(
SELECT MAX(myMaxColumn) FROM mytable WHERE <various conditions>
)
Run Code Online (Sandbox Code Playgroud)
但这只有在我想按单列排序时才有效.我认为没有办法将它推广到多个列(除了嵌套上面的解决方案,但这意味着当用n coluns排序时有2 ^ n个SELECT).
那么标准SQL中有一种比嵌套多个子选择更好的方法吗?
在创建SQL查询中询问相关问题以检索最近的记录.但是,那里的答案建议使用LIMIT和朋友,或使用带有MAX()的子查询,如上所述,这两个都不是我的问题的解决方案.
我正在研究一个程序,它struct在许多地方使用泛型来绕过相关的值.该结构包含一个字段char* s.
许多功能修改s; 但是,有时结构用于将信息传递给只读取它的函数.在这些情况下,用于初始化的字符串通常s是a const char*.但是,将其分配会s导致编译器警告.
虽然技术上是正确的,但这个警告感觉不对,因为该功能不会修改s.有没有办法绕过这个警告,除了扔掉const?有没有办法让函数承诺它会将struct成员视为const?
例:
#include <stdio.h>
struct mystruct{
int i;
char* s;
};
void i_only_read(const struct mystruct *m){
printf("mystruct: i=%d, s=%s\n", m->i, m->s);
}
int main(int argc, char **argv){
const char* cstr = "Hello";
struct mystruct m;
m.i=99;
/* gcc warning: assignment discards ‘const’ qualifier
* from pointer target type
*/
m.s=cstr;
i_only_read(&m);
}
Run Code Online (Sandbox Code Playgroud)
笔记
const char* s,因为大多数指向结构的函数都会修改s …