小编Vai*_*Raj的帖子

基于Netty的非阻塞REST框架

我正在开发一个需要高可伸缩性的RESTfull应用程序.我正在考虑基于Netty的RESTfull应用程序框架.我浏览了一些可用的选项,并尝试将它们作为非阻塞实现提供.以下是我的发现:

  1. rest.li - >仍处于基于Netty的NIO实施的试验阶段.所以,不准备生产.
  2. RESTEasy - >支持Netty 4.x的标准JBoss项目.但是,RESTEasy不是基于Netty的完整堆栈NIO实现,而是Netty和RESTEasy之间的缓冲交换.它没有利用Netty的优势.因此,可扩展性不如基于Netty的框架所预期的那么高.
  3. Netty-http组件 - >另一个选项是Apache Camel集成,同时使用Netty-http组件作为端点,用于将请求路由到bean中公开的服务.我认为它与RESTEasy相同,只有Netty-http组件使用基于Netty的NIO功能,而系统的其余部分将使用旧的IO.我不认为我会在获得scalabiltiy方面帮助太大.
  4. RESTExpress - >它声称是基于Netty的RESTFull应用程序框架.但是,对于需要高度安全性的企业应用程序而言,它既没有一个像样的社区,也没有可信任(因为它是非常新的).

在得到上述发现之前,我想使用一些随时可用的框架并更快地完成工作.

我知道这是一个基于意见的问题.但是,我仍然非常需要帮助为我的应用程序选择正确的框架.如果以防万一,没有基于Netty的REST框架:在我的应用程序中使用基于Netty的低级NIO代码是否明智?任何帮助赞赏.提前致谢.

java rest nio resteasy netty

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

如何在java.util.concurrent.atomic包中定义的类中实现原子性?

我正在浏览java.util.concurrent.atomic.AtomicInteger的源代码,以了解如何通过类提供的原子操作实现原子性.例如AtomicInteger.getAndIncrement()方法源如下

public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法理解在无限for循环中编写操作序列的目的.它在Java Memory Model(JMM)中是否有任何特殊用途.请帮我找一个描述性的理解.提前致谢.

java concurrency atomic thread-safety java.util.concurrent

8
推荐指数
2
解决办法
1632
查看次数

JUnit测试不执行测试中创建的所有线程

我写了一个简单的线程示例,它为从1到20的数字生成表.当我用main方法测试它时,它执行所有线程(打印所有消息),而所有线程都没有运行(所有消息都不是在使用JUnit测试时,大多数时候(有时它会运行所有线程).我认为在产出方面应该没有任何差别.

这是使用main方法的类:

public class Calculator implements Runnable {

    private int number;

    Calculator(final int number){
        this.number = number;
    }

   @Override
   public void run() {
        for(int i = 1; i <= 10; i++){
            System.out.printf("%s : %d * %d =  %d \n", Thread.currentThread().getName(), number, i, number * i);
        }

   }

    public static void main(String[] args){
        Calculator calculator = null;
        Thread thread = null;
        for(int i = 1; i < 21; i ++){
            calculator = new Calculator(i);
            thread = new Thread(calculator);
            System.out.println(thread.getName() + " …
Run Code Online (Sandbox Code Playgroud)

multithreading junit4

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

Java语言规范:符号的含义| S |

我将通过JLS 7来理解类型转换第5.5.1节.

它说:给定编译时引用类型S(源)和编译时引用类型T(目标),如果由于以下规则没有发生编译时错误,则从S到T存在转换转换.如果S是类类型:

  • 如果T是类类型,则为| S | <:| T |,或| T | <:| S | .否则,发生编译时错误.

他们说得很清楚,如果S和T有两种类型的第4.10节,然后

  • S:> T表示S是超类型的T.
  • S>Ť表示S被的T,这意味着一个适当的超类型S:>ŤS =Ť! .

我无法找到| S |的含义 .请帮助我理解| S |的含义 ?它是指属性的数量和类型还是其他东西.我试图在JLS中搜索它,但找不到它的含义.提前致谢.

java types casting type-conversion jls

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

Android如何通过服务器端的数字资产链接验证深层链接

我想为我的Android应用程序启用深层链接。根据我对“ 处理应用程序链接”中提供的描述的理解,需要进行以下更改才能为Android应用程序启用深层链接:

  1. 在服务器端发布数字资产链接。
  2. 添加意图过滤器以获得深层链接支持。
  3. 如果我们不想看到应用程序建议,请在上述意图过滤器中将autoVerify设置为true。

我有以下未解决的问题:

  • Android如何使用服务器上发布的数字资产链接来验证深层链接?
  • 每次用户单击在意图过滤器中声明的链接时,此验证是否需要请求https://example.com/.well-known/assetlinks.json
  • Android是否在安装应用程序时下载了assetlinks.json文件,并且所有进一步的验证都在本地完成,而无需访问服务器?

感谢您在理解验证过程中的帮助。

免责声明:我刚刚开始Android编程。

android deep-linking

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

Spring data mongodb:文本搜索“短语或短语中的单词”

我需要在名为blog的集合中搜索文档,该集合具有为标题、标签、摘要和正文定义的文本索引:

@Document(collection="blog")
public class Blog {
    @Id
    private String id;
    @TextIndexed(weight = 10)
    private String title;
    @TextIndexed(weight = 9)
    private String tags;
    @TextIndexed(weight = 8)
    private String summary;
    @TextIndexed(weight = 7)
    private String body;
    @TextScore
    private Float score;

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要根据以下条件对博客集合进行文本搜索:

  1. 检查用户输入是否包含多个单词。
  2. 如果 searchKey 是单个单词,则执行文本搜索并根据权重返回排序的响应。
  3. 如果 searchKey 包含多个单词,则搜索完整的 PHRASE 或 PHRASE 中的任何单词。

对于第二种情况TextCriteria定义如下:

TextCriteria criteria = TextCriteria.forDefaultLanguage().matching("SingleWord");
Run Code Online (Sandbox Code Playgroud)

对于第三种情况,如何在单个查询中编写组合的条件定义:

query 1: db.articles.find( { $text: { $search: "\"coffee cake\"" } } ) //phrase search
query …
Run Code Online (Sandbox Code Playgroud)

java mongodb spring-data-mongodb

3
推荐指数
1
解决办法
1万
查看次数

java.lang.IndexOutOfBoundsException:没有组1 | 模式匹配

我试图从Accept标题中提取版本的值,可以是形式

"vnd.example-com.foo+json; version=1.1" 
Run Code Online (Sandbox Code Playgroud)

这是我提取版本的代码

val resourceVersionPattern: Pattern = Pattern.compile("(?<=version=).*")

def getResourceVersion(acceptHeader: String): String = {
            import java.util.regex.Matcher
            val matcher: Matcher = resourceVersionPattern.matcher(acceptHeader)
            if(matcher.find()) ("v" + matcher.group(1)).trim() else "v1.0"
    }
Run Code Online (Sandbox Code Playgroud)

当我调用上述用于提取版本的函数时(例如可以是v1.0或v1.5或v2.5的形式)

 getResourceVersion("vnd.example-com.foo+json; version=1.1")
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

java.lang.IndexOutOfBoundsException: No group 1
at java.util.regex.Matcher.group(Matcher.java:487)
at .getResourceVersion(<console>:12)
at .<init>(<console>:11)
at .<clinit>(<console>)
at .<init>(<console>:11)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

我认为我在我的正则表达式中做错了或者输入字符串有一些非法的字符,我无法用我对正则表达式的有限知识来识别.帮我找出原因.

java regex scala

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