让父pom将每个微服务声明为模块是一个好主意吗?所以有助于管理公共依赖项(比如在每个项目中使用lib servlet-api,删除所有项目并仅在父pom中声明它)
我的服务器使用a AsynchronousServerSocketChannel来侦听客户端连接CompletionHandler.当接受客户端连接时,将AsynchronousSocketChannel再次使用a CompletionHandler来读取,以便在没有超时的情况下接收数据.
到目前为止,我的客户端连接,写入服务器读取的数据,它能够响应通过同一个套接字将数据发送回客户端.
当我的客户端终止时,它会调用AsynchronousSocketChannel.close(),以关闭套接字.进行此调用时,服务器正在等待从套接字读取数据.
我曾期望AsynchronousSocketChannel.close()客户端上的调用转换为服务器上CompletionHandler.completed读取长度为的回调-1,表明套接字已关闭,但回调是CompletionHandler.failed以下异常:
java.io.IOException: The specified network name is no longer available.
at sun.nio.ch.Iocp.translateErrorToIOException(Iocp.java:309)
at sun.nio.ch.Iocp.access$700(Iocp.java:46)
at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:399)
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)
客户端应如何关闭套接字,以免在服务器上看到错误?
我想UITextFieldDelegate在一个独立的类中实现,UIViewController但是当我这样做时,我EXC_BAD_ACCESS在运行时得到一个异常.
那为什么这个工作:
class MyViewController : UIViewController, UITextFieldDelegate
{
...
func createUI()
{
let someTextField: UITextField = UITextField()
someTextField.delegate = self
...
}
func textFieldShouldReturn(textField: UITextField!) -> Bool
{
textField.resignFirstResponder()
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
class MyViewController : UIViewController
{
...
func createUI()
{
let someTextField: UITextField = UITextField()
someTextField.delegate = MyTextFieldDelegate()
...
}
}
class MyTextFieldDelegate : NSObject, UITextFieldDelegate
{
func textFieldShouldReturn(textField: UITextField!) -> Bool
{
textField.resignFirstResponder()
return true;
}
}
Run Code Online (Sandbox Code Playgroud) 我在一个普通的jar中有以下类:
public class Common
{
public Common(List list)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将构造函数参数从a更改List为a Collection,如下所示:
public class Common
{
public Common(Collection collection)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
重建公共jar并运行系统会NoSuchMethodError在调用构造函数时导致任何依赖类,直到我重新编译该类.
我有一些想法是什么导致这一点,沿着构造函数如何绑定在依赖类的字节码中,但我不是100%肯定.
请问有人可以了解这里发生的事情吗?
我随后做了一个快速测试并看了一下字节码:
Compiled from "Client.java"
public class Client extends java.lang.Object{
public Client();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2; //class ArrayList
3: dup
4: invokespecial #3; //Method java/util/ArrayList."<init>":()V
7: astore_1
8: new #4; //class Common
11: …Run Code Online (Sandbox Code Playgroud) 我已经开始阅读Spring in Action一书了.
我不知道JUnit,我认为我的疑问是关于.
作者提到了一个代码片段,并说它很难测试:
package com.springinaction.knights;
public classDamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
quest = new RescueDamselQuest();
}
public voidembarkOnQuest() throwsQuestException {
quest.embark();
}
}
Run Code Online (Sandbox Code Playgroud)
作者说:
为DamselRescuingKnight编写单元测试非常困难.在这样的测试中,你希望能够断言在调用骑士的embarkOnQuest()时调用任务的embark()方法.但是在这里没有明确的方法来实现这一目标.不幸的是,DamselRescuingKnight仍未经过测试.
作者的意思是什么?
为什么这里的代码难以测试?
首先是背景 - 我正在编写一些代码来解码从套接字接收到的消息。套接字的性质意味着这些作为ByteStrings接收的消息可能是完整的、截断的或与其他消息连接的。消息本身被分成一个公共头,其中包含后面的可变数据的长度。
我的计划是拥有读取消息部分的函数,例如第一次读取可以读取变量数据的长度,第二次读取变量数据本身。
当调用这些方法之一时,我希望它返回下一个操作,这可能是读取序列中的下一个逻辑操作,或者如果由于尚未接收到所需的所有数据而无法执行特定读取,则该操作可能是其本身。
在从套接字接收到的数据是完美帧的情况下,读取操作将在readLength和之间交替readData。但是,当从套接字以多个块读取数据时,读取操作可能遵循readLength,readData和readData模式。
希望这是有道理的。
我想要做的是这样的事情(由于循环引用而无法编译):
type ReadFunction = (ByteBuffer) => ReadFunction
Run Code Online (Sandbox Code Playgroud)
这样我就可以声明如下内容:
def readLength(buffer: ByteBuffer): ReadFunction = {
if (buffer.limit - buffer.position > 4) {
return readData(buffer.getInt)
}
else {
return readLength
}
}
def readData(length: Int)(buffer: ByteBuffer): ReadFunction = {
if (buffer.limit - buffer.position > length) {
val data: Array[Byte](size)
buffer.get(data)
//process data
readLength
}
else {
readData(length)
}
}
Run Code Online (Sandbox Code Playgroud)
现在我知道我可以(并且实际上已经)通过将读取操作定义为扩展共同特征并返回每个特征的类来解决这个问题,但这似乎不像 Scala。
所以我的问题是 - …