请认为我是新手,这是我创建的第一个网络应用程序。
我计划开发一个Web应用程序,我预计的流量大约有50个用户将一次访问该应用程序。
webapp是使用Vaadin(用于UI)和使用Java实现的相应业务逻辑开发的。使用的DB将是MySQL。战争将部署在Tomcat。
所以,我的问题是我是否需要修改Tomcat属性中的任何内容或任何地方将Web应用程序作为多用户应用程序(即每个用户需要访问和使用应用程序,就像他们只使用应用程序一样)? / p>
我尝试访问在Chrome和Firefox中使用Vaadin开发的原型,并且可以看到两个会话都在运行而不会影响另一个会话。
但请让我知道建议。
答案 0 :(得分:1)
如果您正确处理会话和业务逻辑,那么它不应该有任何代码更改。
可能会有一些配置更改,例如增加数据库连接池大小,这取决于您使用的连接池类型以及默认大小等。
除此之外它应该可以正常工作。
答案 1 :(得分:1)
您必须记住,即使tomcat和vaadin管理多个会话,您的服务器应用程序也只有一个实例。因此,如果您使用单例,静态方法或字段,请谨慎使用它们:它们永远不应保留与会话相关的内容。尝试在statefull上使用无状态方法。
除此之外,不应该有任何问题。
答案 2 :(得分:0)
Vaadin建立在Jakarta Servlet技术(以前称为Java Servlet)的基础上。参见维基百科。实际上,Vaadin 是一个servlet,比大多数更大,更复杂的servlet。
在Java Servlet容器(引擎)(例如Apache Tomcat或Eclipse Jetty)中,任何特定的Servlet仅运行一个实例。如果来自三个用户的三个请求同时到达,则该特定servlet的三个线程在同一实例中运行。因此,servlet本质上是一个高度线程化的环境。
如果您在这些线程之间共享任何变量或资源,则必须非常。这意味着必须对Brian Java Concurrency in Practice等人的书进行必读,重读和深入研究。
尽管Web和HTTP旨在无状态地传递单个文档,但最初的愿景已因制作Web应用程序的需求而扭曲。为了维护servlet container,Servlet会自动维护一个会话。 Vaadin在其VaadinSession
对象中表示此会话状态。为每个用户运行的所有形式的所有数据以及业务逻辑都作为该会话的一部分进行维护。
取决于您特定的Vaadin应用程序,并乘以并发用户数,这可能会增加大量内存。您应该监视服务器,以确保服务器上有足够的可用RAM。
我是否需要在Tomcat属性或任何地方进行任何修改以使Web应用程序成为多用户应用程序(即每个用户都需要访问和使用该应用程序,就像他们只是使用该应用程序的一个一样)?
否,您无需设置或启用任何内容。跟踪每个用户的请求/响应和会话是thread-safe的目的。从它启动的那一刻起,每个servlet容器都希望有多个用户。作为一个Servlet,Vaadin的构建也可以期待多个用户。唯一的窍门是编写自己的代码JDBC drivers ,因此是本书的建议。
我试图访问在Chrome和Firefox中使用Vaadin开发的原型,并且可以看到两个会话都在运行,而不会影响另一个会话。
并发问题在检测和调试方面非常困难。通常,巧合时机的随机机会会出现潜在的问题。首先,您需要专注于正确地设计代码,而不是依赖测试。再次,因此推荐书。
特别要注意的是,由于您提到使用数据库,因此请注意Gallery Saver。在Servlet环境中部署它们可能很棘手。基本上,您需要不将它们捆绑在Vaadin Web应用程序WAR文件中。相反,应在Tomcat的共享库文件夹中分别部署JDBC驱动程序。如果使用Maven驱动项目,请在POM文件中定向Maven,以使JDBC驱动程序的依存关系的范围为provided
。这与Vaadin无关,它适用于所有servlet。搜索堆栈溢出,因为此问题已得到广泛解决。