小编JBT*_*JBT的帖子

如何用焊接单元测试CDI?

我想使用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)

java-ee cdi jboss-weld weld

6
推荐指数
2
解决办法
9186
查看次数

Spock中双右箭头操作符(>>)的定义是什么?

这个Spock wiki页面中有代码片段,涉及双右箭头操作符(>>).例如:

setup:
subscriber.isAlive() >> true
Run Code Online (Sandbox Code Playgroud)

那么,在这种情况下,>>运算符意味着什么?非常感谢你.

groovy spock

6
推荐指数
1
解决办法
3925
查看次数

拦截器默认是否真的禁用?

我今天遇到了这种混乱.引自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.

java-ee cdi jboss-weld weld

6
推荐指数
2
解决办法
2936
查看次数

如何在运行测试方法时使Intellij显示日志

假设我有以下代码:

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显示日志呢?

java intellij-idea maven

6
推荐指数
1
解决办法
1713
查看次数

在GINA书之后,有关groovy类属性的变化是什么?

我正在阅读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类属性的变化是什么?谢谢.

groovy

5
推荐指数
1
解决办法
53
查看次数

什么是grails run-app使用的默认JVM选项

根据这个页面:http: //grails.github.io/grails-howtos/en/performanceTuning.html#s3,该grails run-app命令将为JVM本身提供一些选项,例如-XX:MaxPermSize.所以,我的问题是,grails run-app默认情况下命令提供了哪些选项?那我问这个的原因是,我做的发展模式一些基准测试,所以我想确保我真正改变的东西时,我通过GRAILS_OPTS提供JVM选项.

先感谢您.

grails

5
推荐指数
1
解决办法
5074
查看次数

Java EE CDI拦截器无法在JAX-RS资源类中工作

我想在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)

java glassfish jersey cdi jboss-arquillian

5
推荐指数
1
解决办法
4900
查看次数

ServerBootstrap的handler(ChannelHandler c)和childHandler(ChannelHandler c)有什么区别?

我是Netty的新手.我发现令人困惑的一件事是ServerBootstrap有两个方法:handler(ChannelHandler c),它继承自AbstractBootstrap,而childHandler(ChannelHandler c),它们似乎都是基于javadoc做同样的事情.那么,这是真的吗?这两种方法有什么不同吗?

java netty

5
推荐指数
1
解决办法
2288
查看次数

使用java / netty获得了handshake_failure,但是对于相同的https url成功进行了curl

我有一个使用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 ssl netty

5
推荐指数
1
解决办法
4369
查看次数

使用java 8功能(stream,lambda等)按降序排序int数组

令人惊讶的是,似乎在java中没有简单的单行解决方案在java 8之前按降序排序int数组.例如,检查这篇文章.现在我们有了java 8,是否有一种优雅,简单,单行的方式使用java 8特性,比如stream和lambda表达式,按降序排序int数组?

编辑
我对解决方案感兴趣int[],而不是Integer[].

编辑
我对仅使用JAVA SE库的解决方案感兴趣.

java java-8

5
推荐指数
2
解决办法
2万
查看次数