直截了当但令人发狂,我在RPC调用上遇到此错误:
处理此调用时抛出了IncompatibleRemoteServiceException.com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:com.milkrun.core.dto.UserBasket的类型签名无效
以下是导致问题的类:
public class UserBasket implements Serializable{
private static final long serialVersionUID = -6761554796753637352L;
public int userBasketID;
public String description;
public String userID;
public List<BasketItem> items;
public String createUserId;
public Timestamp createTs;
public String lastUpdateUserId;
public Timestamp lastUpdateTs;
public Timestamp effStartTs;
public Timestamp effStopTs;
}
Run Code Online (Sandbox Code Playgroud)
和BasketItem类型:
public class BasketItem implements Serializable {
private static final long serialVersionUID = -17764683871112216L;
public int basketItemID;
public String upc;
public String description;
public String brandName;
public BigDecimal price;
public String createUserId;
public Timestamp …Run Code Online (Sandbox Code Playgroud) 我已经搜索过任何答案,但我读到的所有内容都是关于asyncNode 中的并发 lambda 执行和关键字语法,但是我找不到有关 lambda 实例执行的信息。
这是因为我在一次聚会上,有人提到 lambda 实例(即由 AWS 托管的包含我的代码的临时容器)一次只能执行一个请求。这意味着如果我有 5 个请求进来(为了简单起见,让我们说一个已经热的实例)它们都将在一个单独的实例中运行,即在 5 个单独的容器中。
对我来说,香蕉的事情是这破坏了异步编程多年的发展。从 2009 年开始,node.js 开始普及 i/o 编程,因为对于 Mill CRUD 应用程序的无聊运行,您的大部分请求时间都花在等待外部数据库调用或其他事情上。编写异步代码允许单个执行线程看似同时执行多个请求。虽然 node 没有发明它,但我认为可以说它普及了它,并且在过去十年中一直是后端技术发展的巨大推动力。许多语言都添加了一些特性来使异步编程更容易(回调/任务/承诺/未来或任何你想调用它们的东西),并且 web 服务器已经从每个请求的单个线程转移到基于事件循环(节点、顶点、kestrel 等)去年的模型。
无论如何,历史课已经足够了,我的观点是,如果我听到的是真的,那么使用 lambdas 进行开发会将大部分内容抛之脑后。如果 lambda 运行时永远不会通过我正在运行的实例发送多个请求,那么以异步方式编程只会浪费资源。比如说我在说 C#,而我的 lambda 是用于检索小部件。然后这段代码var response = await db.GetWidgets()实际上是低效的,因为它将当前线程上下文推送到堆栈上,因此它可以在等待该调用返回时允许其他代码执行。由于在原始请求完成之前不会调用其他请求,因此以同步样式编程更有意义,除了可以进行并行调用的地方。
这样对吗?
如果是这样,我真的很震惊,它没有被更多地讨论。我在过去几年中看到了异步编程的范式转变,这完全改变了这一点。
TL;DR:lambda 真的只允许每个实例一次执行一个请求吗?如果是这样,这将结束服务器开发向异步代码的重大转变。
.NET编译器会优化这个:
public MyObject GetNewObject()
{
var newCurrentObject = myObjectFactory.CreateNew(
DateTime.Now,
"Frank",
41,
secretPassword);
return newCurrentObject;
}
Run Code Online (Sandbox Code Playgroud)
执行与此相同数量的指令/内存:
public MyObject GetNewObject()
{
return myObjectFactory.CreateNew(
DateTime.Now,
"Frank",
41,
secretPassword);
}
Run Code Online (Sandbox Code Playgroud)
或者局部变量会导致额外的时间和内存花费来创建MyObject的引用(newObject),只有当它超出范围时才会将其销毁到下一行.
我问因为,性能完全相同,我发现第一个更具可读性,因为局部变量名称通常可以给下一个开发人员一些关于我们在这里做什么的背景.
我对JPA有点绿,但我做了一些搜索,找不到这个错误代码所以我会在这里发布.
我正试着坚持这堂课:
@Entity(name = "UserBasket")
public class UserBasket extends BaseBasket implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
private static final long serialVersionUID = 1L;
public static long getSerialversionuid() {
return serialVersionUID;
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
用这个方法调用:
public Long createUserBasket(UserBasket basket) {
try{
synchronized (this) {
EntityManager em = EMFService.get().createEntityManager();
em.persist(basket);
em.close();
}
}catch(Exception ex){
//log.severe("Uh oh!" + ex.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
java.lang.IllegalArgumentException: Type …Run Code Online (Sandbox Code Playgroud)