我想在我的JVM上尝试CompressedOops.不,我想知道它是否可以默认启用.我在debian/squeeze上运行这个jvm:
$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)
有人说它默认启用,有人说它不是:
来自:http://forums.yourkit.com/viewtopic.php?f = 3&t = 3185
是的,你是对的,我也检查了它,并且在646位Java6u21中默认没有激活Compressed Oops,我不明白为什么它在我提供的链接中这么说.
我尝试用jconsole/JMX检查它,但没有运气找到名为CompressedOops或类似的属性.
有没有人知道我在哪里获得具有默认值的特定构建的所有jvm选项的列表?
关于Janning
我们正在运行java6/hibernate/c3p0/postgresql堆栈.我们的JDBC驱动程序是8.4-701.jdbc3
我有一些关于准备陈述的问题.我读过有关准备陈述的优秀文件
但是我仍然有一个问题如何使用postgresql配置c3p0.
目前我们有
c3p0.maxStatements = 0
c3p0.maxStatementsPerConnection = 0
Run Code Online (Sandbox Code Playgroud)
根据我的理解,准备好的语句和语句池是两个不同的东西:
我们的hibernate堆栈使用预处理语句.Postgresql正在缓存执行计划.下次使用相同的语句时,postgresql会重用执行计划.这节省了DB内部的时间规划语句.
另外,c3p0可以缓存"java.sql.PreparedStatement"的java实例,这意味着它正在缓存java对象.因此,当使用
c3p0.maxStatementsPerConnection = 100时,它最多可以缓存100个不同的
对象.它节省了创建对象的时间,但这与postgresql数据库及其预处理语句无关.
对?
当我们使用大约100个不同的语句时,我会设置c3p0.maxStatementsPerConnection = 100
但是c3p0文档在c3p0中已经说明了已知的缺点
语句池的开销太高.对于未对PreparedStatements执行重要预处理的驱动程序,池化开销超过任何节省.因此,默认情况下关闭语句池.如果您的驱动程序确实预处理PreparedStatements,特别是如果它通过IPC与RDBMS这样做,您可能会通过打开语句池来看到显着的性能提升.(通过将配置属性maxStatements或maxStatementsPerConnection设置为大于零的值来执行此操作.).
那么:使用c3p0和Postgresql激活maxStatementsPerConnection是否合理?激活它真的有益吗?
亲切的问候Janning
我需要在我的软件中收集一些统计信息,我正在努力使其快速正确,这对我来说并不容易(对我而言!)
首先我的代码到目前为止有两个类,一个StatsService和一个StatsHarvester
public class StatsService
{
private Map<String, Long> stats = new HashMap<String, Long>(1000);
public void notify ( String key )
{
Long value = 1l;
synchronized (stats)
{
if (stats.containsKey(key))
{
value = stats.get(key) + 1;
}
stats.put(key, value);
}
}
public Map<String, Long> getStats ( )
{
Map<String, Long> copy;
synchronized (stats)
{
copy = new HashMap<String, Long>(stats);
stats.clear();
}
return copy;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的第二个类,一个不时收集统计数据并将它们写入数据库的收集器.
public class StatsHarvester implements Runnable
{
private StatsService statsService;
private Thread t;
public …
Run Code Online (Sandbox Code Playgroud) 最近我们搬到了Spring 3.0控制器处理,如下所示:
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.POST)
protected String onSubmit ( Form form, Errors errors) {
// handle POST
}
@RequestMapping(method = RequestMethod.GET)
protected void getForm ( Form form ) {
// handle GET
}
}
Run Code Online (Sandbox Code Playgroud)
现在,由于HEAD请求,我们在日志中获得了大量异常.
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'HEAD' not supported
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodResolver.resolveHandlerMethod(AnnotationMethodHandlerAdapter.java:621)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:422)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415)
...
Run Code Online (Sandbox Code Playgroud)
我想以与GET请求相同的方式支持HEAD请求,但当然遵守HTTP引用:
HEAD方法与GET相同,只是服务器不能
在响应中返回消息体.响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同.该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身.此方法通常用于测试超文本链接的有效性,可访问性和最近的修改. http://www.ietf.org/rfc/rfc2616.txt
有没有人有一个优雅的解决方案或甚至有一个开箱即用的弹簧解决方案?
我在网上搜索但没有找到任何答案.
我们正在使用 WebTestClient (SpringBoot) 测试我们的 GraphQL 后端,但在查看测试失败的确切原因时遇到了问题。我们的代码如下所示:
webTestClient
.post().uri(GQLKonstanten.URL)
.body(GQLRequestInserter.from(movieDeleteGQL, variables))
.exchange()
.expectBody()
.jsonPath("$.errors").doesNotExist()
.jsonPath("$.data.movie.id")
.isEqualTo(movie.getId());
Run Code Online (Sandbox Code Playgroud)
我得到的是带有以下消息的堆栈跟踪:
java.lang.AssertionError:JSON 路径“$.data.movie.id”没有值
...
引起原因:com.jayway.jsonpath.PathNotFoundException:路径 $['data']['movie'] 中缺少属性
错误消息是完全正确的。但为了真正查看这个 graphQl Exceution 命令实际返回的内容,我总是将 WebClient 执行更改为:
String responseBody = webTestClient
.post().uri(GQLKonstanten.URL)
.body(GQLRequestInserter.from(deleteMovieGQL, variables))
.exchange()
.expectStatus()
.isOk()
.expectBody(String.class)
.returnResult().getResponseBody();
System.out.print(responseBody);
Run Code Online (Sandbox Code Playgroud)
然后我看到的结果是
{"data":{"deleteMovie":{"id":7}}}
Run Code Online (Sandbox Code Playgroud)
我发现我期望的是“movie”而不是“deleteMovie”属性。所以我将测试更改为
.jsonPath("$.data.deleteMovie.id")
Run Code Online (Sandbox Code Playgroud)
总是运行两次测试并更改代码很麻烦。
有没有更好的方法让WebTestClient在测试失败时始终输出responseBody?
我使用两个配置文件:开发和生产.
开发应在默认情况下有效; 我发布时应该使用生产.
在我的pom.xml中,我有:
[...]
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<arguments>-Pproduction</arguments>
</configuration>
</plugin>
[...]
<profiles>
<profile>
<id>production</id>
<properties>
<profile.name>production</profile.name>
</properties>
[...]
</profile>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profile.name>development</profile.name>
</properties>
[...]
</profile>
[...]
Run Code Online (Sandbox Code Playgroud)
它只是不起作用.
useReleaseProfiles
也不起作用:http:
//jira.codehaus.org/browse/MRELEASE-459
开发配置文件应始终处于活动状态,但在运行时不应mvn release:perform
.你是如何实现这一目标的?
[更新]:我已经看到调试标志使用了我的生产配置文件,但也使用了开发配置文件,因为它是activeByDefault
.这个releaseProfile
论点无法改写.强制释放插件仅使用"生产"配置文件会很好.
我在ubuntu 11.10上使用OpenJDK(java版"1.6.0_22")运行最新的opensc 0.12.2
我可以阅读我的智能卡(飞天ePass PKI)
pkcs15-tool --dump
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用带有keytool的智能卡:
keytool
-providerClass sun.security.pkcs11.SunPKCS11 \
-providerArg /etc/opensc/opensc-java.cfg \
-keystore NONE -storetype PKCS11 -list
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
keytool error: java.security.KeyStoreException: PKCS11 not found
java.security.KeyStoreException: PKCS11 not found
at java.security.KeyStore.getInstance(KeyStore.java:603)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:621)
at sun.security.tools.KeyTool.run(KeyTool.java:194)
at sun.security.tools.KeyTool.main(KeyTool.java:188)
Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:696)
at java.security.KeyStore.getInstance(KeyStore.java:600)
... 3 more
Run Code Online (Sandbox Code Playgroud)
当我运行相同的命令时启用调试选项,如下所示:
keytool
-providerClass sun.security.pkcs11.SunPKCS11 \
-providerArg /etc/opensc/opensc-java.cfg \
-keystore NONE -storetype PKCS11 -list \
-J-Djava.security.debug=sunpkcs11
Run Code Online (Sandbox Code Playgroud)
它突然起作用:
... debug infos ...
Enter keystore password:
sunpkcs11: login …
Run Code Online (Sandbox Code Playgroud) 我正在使用Apache Maven 3.0 Nexus开源版,版本:1.8.0.1
这是我的pom.xml的一部分
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
<distributionManagement>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://myrepo/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的项目.当我做
mvn release:prepare
mvn release:perform
Run Code Online (Sandbox Code Playgroud)
一切顺利:
...
[INFO] [INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ simple ---
[INFO] Uploading: http://myrepo/nexus/content/repositories/releases/...pom
[INFO] 4 KB
[INFO] 5 KB
[INFO]
[INFO] Uploaded: http://myrepo/nexus/content/repositories/releases/....pom (5 KB at 1.0 KB/sec)
[INFO] Downloading: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml
[INFO] 603 B
[INFO]
[INFO] Downloaded: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml (603 B at 1.5 KB/sec)
[INFO] Uploading: http://myrepo/nexus/content/repositories/releases/.../maven-metadata.xml
[INFO] 634 B
[INFO]
[INFO] Uploaded: http://myrepo/nexus/content/repositories/.../maven-metadata.xml (634 B …
Run Code Online (Sandbox Code Playgroud) 我们的Web应用程序遇到了一些奇怪的行为.有些POST请求没有任何http正文.content-length为0.根本没有post参数.我们在我们的负载均衡器上跟踪网络流量,我们发现我们没有得到任何请求正文和我们的一些POST请求.
所有损坏的POST请求都有共同点,它们通过代理服务器到达.
我们已经在SO上找到了这个问题: 为什么POST请求中的"Content-Length:0"?
我们现在使用帧转义javascript例程,它有点帮助.似乎错误率下降.但是我们仍然有POST请求没有数据,这些数据在我们的webapp中永远不会发生.这些请求不是来自黑客或类似的.
我们经常看到webwasher作为代理.但大多数时候我们都没有看到使用了哪个代理.
在这篇PDF中,我们看到了关于使用webwasher缺少POST参数的评论
关于一些陷阱的说明
请注意,在设置透明身份验证时必须考虑一些缺陷:
如果ICAP服务器将重定向发送到身份验证服务器,则POST请求将失败.但是,这仅影响映射的更新,因为对于浏览器,请求成功,并且在最终重定向之后将不再发送POST正文.
我们想知道是否除了仅使用GET而不是POST之外还有一些解决方法.如果其他网站在POST数据丢失方面存在问题以及他们做出了哪些结论,我们也会在这里.
是否还有其他原因导致POST数据未发送?
在java(v11)中,我希望允许任何语言中的所有字符来选择用户名,例如ASCII、拉丁语、希腊语、中文等。
\n\n我们尝试了该模式\\p{IsAlphabetic}
。
但在这种模式下,像“”这样的名称是允许的。我不想让人们用这样的 unicode 字符来设计他们的名字。我希望他输入“Chris”而不是“”
\n\n应该允许将自己命名为“\xe5\xb0\xa4\xe9\x9b\xa8\xe6\xba\xaa”、“Linus”或“G\xc3\xb6del”。
\n\n如何实现正确的正则表达式不允许名称中出现奇怪的样式?
\njava ×4
c3p0 ×1
concurrency ×1
controller ×1
http ×1
http-post ×1
httprequest ×1
jvm ×1
jvm-hotspot ×1
keytool ×1
maven ×1
maven-2 ×1
maven-3 ×1
nexus ×1
pkcs#11 ×1
postgresql ×1
proxy ×1
regex ×1
smartcard ×1
spring ×1
spring-boot ×1
spring-mvc ×1
testing ×1