我在http://example.com/v1/SomeResource上部署了RESTful Web服务.有一天,新的协议版本(不向后兼容)被部署到http://example.com/v2/SomeResource.从客户端看,此升级可能在两个HTTP请求之间的任何时间发生.
服务器如何向客户端指示它不再支持v1调用,并且客户端应该升级到v2?我可以使用适当的响应代码吗?
我想向客户提供以下信息:
我们如何组合如何在SQL中请求随机行?和SQL Server 2005中的多个随机值,使用单个纯SQL查询选择N个随机行?理想情况下,我希望尽可能避免使用存储过程.这甚至可能吗?
澄清:
http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html认为多线程GUI框架是一个失败的梦想.那么非GUI框架呢?这个经验法则是否扩展到所有事件驱动的框架?
以下是引起我注意的文章的引用:
输入事件处理的问题在于它倾向于以与大多数GUI活动相反的方向运行.通常,GUI操作从一堆库抽象的顶部开始并"向下".我在我的应用程序中运行一个由一些GUI对象表示的抽象概念,所以我从我的应用程序开始,调用高级GUI抽象,调用较低级别的GUI抽象,调用丑陋的内容.工具包,然后进入操作系统.相比之下,输入事件从OS层开始,逐步向上调度抽象层,直到它们到达我的应用程序代码.
现在,由于我们使用抽象,我们自然会在每个抽象中单独进行锁定.不幸的是,我们有经典的锁定订单噩梦:我们有两种不同类型的活动,希望获得相反订单的锁定.所以僵局几乎是不可避免的.
给定枚举,其中每个实例都与某个值相关联:
public enum SQLState
{
SUCCESSFUL_COMPLETION("00000"),
WARNING("01000");
private final String code;
SQLState(String code)
{
this.code = code;
}
}
Run Code Online (Sandbox Code Playgroud)
如何构建Map以进行有效的反向查找?我尝试了以下方法:
public enum SQLState
{
SUCCESSFUL_COMPLETION("00000"),
WARNING("01000");
private final String code;
private static final Map<String, SQLState> codeToValue = Maps.newHashMap();
SQLState(String code)
{
this.code = code;
codeToValue.put(code, this); // problematic line
}
}
Run Code Online (Sandbox Code Playgroud)
但Java抱怨道:Illegal reference to static field from initializer.也就是说,静态Map 在所有枚举值之后被初始化,因此您无法从构造函数中引用它.有任何想法吗?
为什么Map<String, ?> test = ImmutableMap.builder().build();编译失败,但Map<String, ?> test = ImmutableMap.<String, Object>builder().build();工作正常?
第一个代码片段失败:
error: incompatible types
Map<String, ?> test = ImmutableMap.builder().build();
^
required: Map<String,?>
found: ImmutableMap<Object,Object>
Run Code Online (Sandbox Code Playgroud)
我相信番石榴提交者意味着这个工作.
如何在Jersey 2.0下找出任意URI映射到的资源?在Jersey 1.x下,我使用ResourceContext.matchResource(URI).
我正在尝试做什么:我正在尝试处理通过URI引用另一个资源的传入请求.例如,这是一个将用户链接到部门的操作.
POST /departments/5
{
"user": "http://example.com/users/10"
}
Run Code Online (Sandbox Code Playgroud)
POST/departments/5解决:
class DepartmentResource
{
@POST
void linkUser() { ... }
}
Run Code Online (Sandbox Code Playgroud)
为了兑现这个请求,我需要将URI解析回UserResource并从那里解析为其数据库ID.添加@Context UriInfo到linkUser()不会帮助,因为这UriInfo相当于部门,而不是用户的URI.
更新:我在https://github.com/eclipse-ee4j/jersey/issues/2444上提交了一份错误报告
UPDATE2:发布了一个后续问题:Jersey2:从资源导航到实例
是否可以将方法引用(例如SomeClass::someMethod)转换为MethodHandle实例?我想要编译时检查的好处(确保存在类和方法)以及使用MethodHandleAPI 内省方法的能力.
用例:当且仅当请求未被特定方法触发时(以避免无限递归),我才需要执行代码.我想要一个编译时检查以确保类/方法存在但运行时检查以将调用者与方法进行比较.
所以回顾一下:是否可以将方法引用转换为MethodHandle?
我写了一个JMH基准,涉及两种方法:M1和M2.M1引用M2但由于某种原因,JMH声称M1比M2快.
这是基准源代码:
import java.util.concurrent.TimeUnit;
import static org.bitbucket.cowwoc.requirements.Requirements.assertThat;
import static org.bitbucket.cowwoc.requirements.Requirements.requireThat;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class MyBenchmark {
@Benchmark
public void assertMethod() {
assertThat("value", "name").isNotNull().isNotEmpty();
}
@Benchmark
public void requireMethod() {
requireThat("value", "name").isNotNull().isNotEmpty();
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(MyBenchmark.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,M1是assertThat(),M2是requireThat().意思,在引擎盖下assertThat()调用requireThat().
以下是基准输出:
# JMH …Run Code Online (Sandbox Code Playgroud) CompletableFuture.allOf()我想实现和的混合,CompletableFuture.anyOf()其中一旦所有元素成功完成,返回的 future 就会成功完成,或者只要任何元素异常完成,它就会异常完成(具有相同的异常)。在多个元素失败的情况下,返回其中任何一个的异常就足够了。
我有一个任务需要聚合CompletableFutures 列表返回的子结果,但是一旦其中任何一个失败,该任务就应该停止等待。我知道子任务将继续运行,这没关系。
我发现等待未来的列表最初看起来像是一个重复的问题,但接受的答案使用CompletionService需要Callable或Runnable作为输入。我正在寻找一种将已运行的CompletionStages 作为输入的解决方案。
java ×6
guava ×2
enums ×1
events ×1
java-8 ×1
jersey ×1
jersey-2.0 ×1
jmh ×1
methodhandle ×1
oop ×1
random ×1
rest ×1
scrypt ×1
sql ×1
versioning ×1