这是我对无状态对象的理解:从没有类变量的类创建的任何对象都是无状态对象.我的问题是我们什么时候应该写无状态的课程.拥有无状态对象是一个好习惯.
我只是学习Web应用程序开发的基础知识.正如我正在阅读不同的方法,如ASP.Net Web Forms,ASP.Net MVC等.在解释MVC和所有内容时,大多数教程都提到了"无状态"这个术语.我无法正确理解这个词.你能帮忙解释一下吗?
谢谢
我想知道无状态类的缺点是什么(如果有的话)?有没有人见过一个真实世界的应用程序,其中一些用例要求创建一个无状态类(No hello world please)?我认为无状态类意味着没有任何字段的类。
我是EJB的新手,我正面临着我的第一个问题.我正在尝试使用无状态EJB中包含的@Schedule方法.我希望这个方法使用一个私有成员变量,该变量将在创建bean时设置:
这是一个简短的例子:
@Singleton
@LocalBean
@Startup
public class Starter {
@PostActivate
private void postActivate() {
ScheduleEJB scheduleEjb = new ScheduleEJB("Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
和计划bean:
@Stateless
@LocalBean
public class ScheduleEJB {
private String message;
public ScheduleEJB() {
super();
}
public ScheduleEJB(String message) {
super();
this.message= message;
}
@Schedule(second="*/3", minute="*", hour="*", dayOfMonth="*", dayOfWeek="*", month="*", year="*")
private void printMsg() {
System.out.println("MESSAGE : " + message);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我的"message"变量在printMsg()方法中打印时始终为null ...实现此目的的最佳方法是什么?
谢谢你的帮助 !
我希望你能帮助我:我有一个用Eclipse创建的WebProject作为动态Web项目,在Glassfish3服务器上运行.我正在使用EJB 3.0来创建实现我的业务逻辑的无状态Façade(@stateless Annotation):
@Stateless
public class Facade {
public void test(){
System.out.println("test hat geklappt!!");
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我使用RESTRessource来提供我的REST WS,它使用我的EJB(@EJB Annotation)业务逻辑:
@RequestScoped
@Path("/prescriptions")
public class Ressource {
@EJB
private Facade facade;
public Ressource() {
super();
}
@GET
@Path("/user/{userid}")
@Produces(MediaType.APPLICATION_JSON)
public void getUser(@PathParam("userid") String userid) {
facade.test();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以进入REST WS并调用它,但我的EJB始终为null,我找不到原因.
如果你能帮助我,我将非常感激.如果您需要有关代码的更多信息或只是询问.
先谢谢,弗洛里安
PS:我的日志中总是出现以下错误:
INFO: Portable JNDI names for EJB Facade : [java:global/TestProject/Facade,java:global/TestProject/Facade!webservices.Facade]
INFO: Portable JNDI names for EJB Facade : [java:global/TestProject/Facade, java:global/TestProject/Facade!webservices.Facade]
INFO: Scanning for root resource and provider classes in the …
Run Code Online (Sandbox Code Playgroud) 我曾被告知GAE是无国籍的.我一般都理解无状态的概念,但我可以在概念上将它应用于GAE类型系统.
我特意问这个问题,因为我开发的应用程序似乎存在干扰问题.也就是说,当两个或更多人同时使用它时,它会变得混乱.(我继续进行bug测试以确认错误仅在同时使用期间发生.)我认为理论上可能存在这样的干扰的两种方式:A,错误的GQL查询获取错误的db记录(我检查了这个,nope); 或b.在服务器级别.我的问题:后者究竟有可能吗?当应用程序正在服务时,一个用户是否可以通过改变程序中变量的状态来干扰另一个用户?或者,也许,无国籍状态会阻止这种情况吗?我很困惑,可能错误地提出了这个问题.合十礼.
我发布了确切的实体:
public class Person : ContactableEntity
{
public Plan Plan { get; set; }
public int Record { get; set; }
public int PersonTypeValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码以disconected context方式更新:
public void Update(DbSet MySet, object Obj)
{
MySet.Attach(Obj);
var Entry = this.Entry(Obj);
Entry.State = EntityState.Modified;
this.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
这是我的dbContext公开的方法,这种方式调用:
PersistentManager.Update(PersistentManager.Personas,UpdatedPersona);
Run Code Online (Sandbox Code Playgroud)
问题是,EF将更新除引用的Plan对象之外的任何属性.谁能告诉我哪里出错了?事先:实体到达更新点,并正确设置所有属性.EF只是无法更新数据库中的FK(虽然没有例外)更新:尝试解决这样的问题,但它不起作用:
PersistentMgr.Contacts.Attach(Obj);
PersistentMgr.Entry(Obj).State = EntityState.Modified;
PersistentMgr.Entry(Obj.Plan).State = EntityState.Modified;
PersistentMgr.SaveChanges();
Run Code Online (Sandbox Code Playgroud) 最近,Facebook发布了一种名为Hacklang的新语言,该语言由HHVM编译为机器代码.
所以我只是想知道,Hacklang只是一种有状态的语言吗?
谢谢.
无状态 Web 应用程序似乎很有前途。如何制作一个?尤其是 Spring WebMvc?有什么指导方针吗?
以下是我的一些想法:
添加 1
我认为这不是是否保留状态信息的问题。如果你想做一些有用的事情,状态信息总是必要的。这实际上是一个在哪里/如何保留状态信息的问题。这篇文章很有用。它提到了进程内/进程外会话、数据缓存以及为什么不使用会话。
有关的:
使用 Spring MVC 进行无状态 Web 应用程序开发 (尚未响应)
http://brockallen.com/2012/04/07/think-twice-about-using-session-state/
我们的应用程序的架构文档有几个流行语,我无法直观地联系到它们
无状态可分发应用程序
可插拔安全模型
我能理解分布式意味着什么,但无国籍意味着什么呢?无状态可分发应用程序的含义是什么?你能举一个这样的申请的例子吗?
什么是可插拔安全模型?我知道可插拔API是可以插入或替换为其他实现的东西,但我认为安全性是很好地集成到应用程序中并且是其核心.可以插电吗?你能举一些关于这种方法的例子吗?