我想使用weld-se进行单元测试CDI.但是,我坚持这个Weld无法解决bean的问题.我创建了一个小型项目来演示用于构建的gradle问题.
我在文件<project-root>夹中有以下文件:
./build.gradle
./src/main/java/cdi/Book.java
./src/main/resources/META-INF/beans.xml
./src/test/java/cdi/BookTest.java
./src/test/resources/META-INF/beans.xml
Run Code Online (Sandbox Code Playgroud)
下面列出了每个文件的内容.
的build.gradle
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.jboss.weld.se:weld-se:2.0.4.Final'
testCompile 'junit:junit:4.11'
}
Run Code Online (Sandbox Code Playgroud)
Book.java
package cdi;
public class Book {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Run Code Online (Sandbox Code Playgroud)
BookTest.java
package cdi;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class BookTest {
private static Weld weld;
private static WeldContainer weldContainer; …Run Code Online (Sandbox Code Playgroud) 这个Spock wiki页面中有代码片段,涉及双右箭头操作符(>>).例如:
setup:
subscriber.isAlive() >> true
Run Code Online (Sandbox Code Playgroud)
那么,在这种情况下,>>运算符意味着什么?非常感谢你.
我今天遇到了这种混乱.引自Weld的文档(见第9.3节),
默认情况下,禁用所有拦截器.我们需要启用拦截器.我们可以使用bean归档的beans.xml描述符来完成它.但是,此激活仅适用于该存档中的Bean.
但是,在我目前正在进行的项目中,我有一个用于分析方法的拦截器.我META-INF/beans.xml基本上是空的:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>
Run Code Online (Sandbox Code Playgroud)
然而,我仍然从该剖析拦截器获得预期的日志.那么,正如标题所示,拦截器默认是否真的被禁用了?
顺便说一句,我weld-se在项目中用于CDI功能,因为CDI是Java EE堆栈中项目所需的唯一东西.
在今天搞乱拦截器之后,我发现如果旧@Interceptors的用于指示拦截实现类,则不需要在其中指定任何内容beans.xml.但是,如果使用拦截器绑定,即使用@Interceptor注释来指示拦截器类,则必须通过向拦截器类添加拦截器类来启用拦截beans.xml.根据我的经验,CDI 1.1仍然如此,正如beans.xml上面的版本所示.顺便说一句,我org.jboss.weld.se:weld-se:2.0.4.Final在这种情况下用于CDI实现,我认为它实现了CDI 1.1.
假设我有以下代码:
private static final Logger log = LoggerFactory.getLogger( DummyTest.class );
@Test
public void test() {
log.info("dummy log");
}
Run Code Online (Sandbox Code Playgroud)
当我test()在Intellij中运行测试方法时,我没有在控制台输出中获得任何日志.但是,如果我从命令行运行测试mvn test,我将获取日志.顺便说一句,我用的是testng.
那么,我如何让Intellij显示日志呢?
我正在阅读Groovy in Action(GINA)一书.在第9章中,有这个列表:
class MyClass {
def first = 1
def getSecond() { first * 2 }
public third = 3
}
obj = new MyClass()
keys = ['first', 'second', 'third', 'class', 'metaClass']
assert obj.properties.keySet() == new HashSet( keys ) // fail
Run Code Online (Sandbox Code Playgroud)
但是,以下断言实际上是正确的断言:
keys = ['first', 'second', 'class']
assert obj.properties.keySet() == new HashSet( keys )
Run Code Online (Sandbox Code Playgroud)
那么,在GINA书之后,有关groovy类属性的变化是什么?谢谢.
根据这个页面:http:
//grails.github.io/grails-howtos/en/performanceTuning.html#s3,该grails run-app命令将为JVM本身提供一些选项,例如-XX:MaxPermSize.所以,我的问题是,grails run-app默认情况下命令提供了哪些选项?那我问这个的原因是,我做的发展模式一些基准测试,所以我想确保我真正改变的东西时,我通过GRAILS_OPTS提供JVM选项.
先感谢您.
我想在jax-rs资源类中使用分析拦截器.拦截器工作原理,但它会导致jax-rs资源类内部出现问题.我把演示代码放在github上.
这是对问题的描述.
首先,这是一个主要代码列表.
异形
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Profiled {
}
Run Code Online (Sandbox Code Playgroud)
探查
@Interceptor
@Profiled
public class Profiler {
@Inject
Logger logger;
@AroundInvoke
private Object profile( InvocationContext context ) throws Exception {
long startTime = System.currentTimeMillis();
try {
return context.proceed();
} finally {
long time = System.currentTimeMillis() - startTime;
logger.info( context.getMethod() + " took " + time + " milliseconds" );
}
}
}
Run Code Online (Sandbox Code Playgroud)
UtilsProducer
public class UtilsProducer {
@Produces
private Logger createLogger( InjectionPoint point ) { …Run Code Online (Sandbox Code Playgroud) 我是Netty的新手.我发现令人困惑的一件事是ServerBootstrap有两个方法:handler(ChannelHandler c),它继承自AbstractBootstrap,而childHandler(ChannelHandler c),它们似乎都是基于javadoc做同样的事情.那么,这是真的吗?这两种方法有什么不同吗?
我有一个使用java / netty构建的MITM代理服务器。最近,我遇到一个https网址,我的代理为此SSL握手失败,但该curl命令能够以TLS协议访问。在我的代理代码中,客户端SSL上下文使用所有信任的信任管理器。下面是我如何创建客户端SSL上下文和SSL处理程序。
public static SSLContext createClientSslContext() throws NoSuchAlgorithmException, KeyManagementException {
SSLContext context = SSLContext.getInstance("TLS");
// create a trust-all manager
TrustManager trustAllManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
log.debug("do nothing - getAcceptedIssuers");
return new X509Certificate[0];
}
};
context.init(null, new TrustManager[]{trustAllManager}, null);
return context;
}
private SslHandler createClientSslHandler() {
try {
SSLContext context = …Run Code Online (Sandbox Code Playgroud) 令人惊讶的是,似乎在java中没有简单的单行解决方案在java 8之前按降序排序int数组.例如,检查这篇文章.现在我们有了java 8,是否有一种优雅,简单,单行的方式使用java 8特性,比如stream和lambda表达式,按降序排序int数组?
编辑
我对解决方案感兴趣int[],而不是Integer[].
编辑
我对仅使用JAVA SE库的解决方案感兴趣.