太好了!
我在8月底在丹麦的JBoss用户组进行了演讲,他们记录了我做的Seam介绍谈话
和Web Beans介绍谈话
此外,如果您还不够,还可以观看我们最近录制的Seam 2简介网络研讨会的录音。
由于时间有限,我没有机会回答网络研讨会中提出的所有问题。因此,这里列出了所有问题及其答案。在开始之前,我要感谢Dan Allen、Dan Hinojosa、Daniel Roth和Jay Balunas在回答问题方面给予我的帮助 :-)
入门
- Seam 框架是新项目的起点,或者我能否将它用于现有项目中的新实体? 我不会说这是一个好主意。如果你想使用 Seam,你可能会将你的 webapp 合并到 Seam 中,而不是反过来。
会话
- 一个原子会话能否跨越多个会话?也就是说,用户可以在一个会话中开始一个会话,推迟它,登录并继续?会话/流程能否由发起会话的用户以外的其他用户继续,或者这些问题的答案将是 jBPM? 正如你所说,jBPM 流程是实现持续超过会话时间、可以由多个人进行的
会话
的方式。一个会话通常是在 jBPM 流程中的任务。 - 那么,当我没有指定 flushMode=manual 时,一切都会在会话结束时自动刷新吗? 默认情况下,JPA 在方法边界处刷新持久化上下文。手动刷新模式意味着持久化上下文只有在您调用时才会刷新entityManager.flush().
- 我不理解为什么会话可以比事务更长?对我来说,事务是绑定到工作单元(比如会话)... 不要忘记,事务在英语中有一般意义和特定意义。一个原子会话代表了用户与应用的
事务
,并且可以跨越多个屏幕。正在进行的事务
是持久化上下文,而不是数据库。由于许多原因,系统事务(数据库事务)不能这么长 - 例如,应用不会扩展,因为您会长时间持有数据库表的读写锁。因此,想法是在用例结束时一次性刷新持久化上下文,而不是在过程中分阶段刷新,这会导致数据库中的不一致。 - 你如何将 Seam 中的会话与 Spring Web Flow 以及它们在那里实现会话的方式进行比较? 我对 Spring Webflow 的理解是,它更接近于 Seam 的 pageflows(它定义了导航状态图),而不是 Seam 的会话模型(它使用临时的导航)。但我不是 Spring Webflow 的专家。
- Seam 是否支持类似 Spring Web Flow 的定义网页导航的功能? 是的,请阅读有关 pageflow 的信息。
组件 & 上下文
- 什么是双向注入? 注入 = 容器在需要之前初始化 bean 字段,使用来自上下文(变量
云
)的上下文 状态 变量。输出 = 容器将状态变量复制回上下文。双向注入 = 注入 + 输出。这使得多个具有不同生命周期的状态组件可以临时持有其他状态组件的引用。请参阅更多内容 - EJB 3 在 Seam 中扮演什么角色? 如果你想使用 EJB3 与 Seam 一起,那么 Seam 会很高兴为你管理 EJB,提供 Seam 组件模型的全部好处。如果你不想使用 EJB3,那么你不必这么做;那么为什么要使用 EJB3?嗯,你可能想使用它的一些更
企业级
的特性,比如 MDBs。
IDEs 和工具
- 基于 Maven 的 Seam 开发的状态如何?是否有相关的插件/原型? Seam 发布 Maven poms,其中包含 Seam 的传递依赖树。目前还没有原型,但有计划。
- JBoss Studio 可用于哪些操作系统? Linux、Mac 和 Windows
- Jboss Tools项目是否拥有与Jboss Developer Studio相同的功能? 是的,Jboss Tools 包含了JBDS的大部分工具功能。我认为JBDS更像是包含JBoss Tools和Eclipse集成、集成运行时EAP(企业应用平台)以及Spring IDE的总体集。
- 是否有将旧Seam项目转换为Jboss Tools Seam项目的教程? 没有,您最好的选择是在JBDS中创建一个新的项目,然后将代码和配置文件复制进去。
- 有NetBeans插件提供Seam支持(如基于Eclipse的IDE)吗? 大部分是的。每当您使用seam-gen创建Seam项目时,都会为您创建一个nbproject文件夹,您可以在NetBeans中打开您的Seam项目。之所以答案是“大部分”,是因为NetBeans提供的插件不如Eclipse或即将到来的IntelliJ多。NetBeans的Groovy支持也仍在开发中,因此您可能会有一段时间的不愉快。Michael 在博客中提到了这一点。
- 我尝试在NetBeans 6.0中设置Seam。seam-gen插件不起作用。为什么?以下是生成的错误。C:\jboss-seam\jboss-seam-2.0.2.SP1\seam-gen\build.xml:607: C:\modules\ext未找到。您需要向NetBeans论坛询问关于NetBeans对Seam的支持。请注意,NetBeans的seam-gen插件实际上是为旧版本的Seam设计的,目前正在重新设计。
- 是否有内置的调试工具来检查实体,这个工具能做什么? Seam默认有一个调试页面,允许您不仅检查实体及其所在的范围,还可以查看您的POJO和EJB3 Action Beans、查看它们的引用和值以及查看任何适用的堆栈跟踪。您只需确保以开发配置部署并访问/debug.seam(或您自定义的扩展名)即可。
视图层
- 我注意到Seam 2.10 beta已经提供了对Wicket的一等支持。是否有计划对GWT也做同样的事情?提供的远程/GWT示例不如Wicket的示例详尽,我正在寻找两者之间更好的集成。 是的,请密切关注未来几个月内更多关于GWT的支持 :-)
- 在一个项目中混合Wicket和JSF视图层是否可能? 可能不行,但我还没有尝试。如果您隔离视图映射,它可能可以工作。试试看,让我们知道您的进展如何,在论坛上。
- 我对GWT非常熟悉。我阅读了有关RPC集成的信息。然而,如何使用Seam的其他更有用的功能,如作用域、验证器等,与GWT一起使用? 目前,GWT支持使用Seam远程交互 - 这允许您像平常一样访问Seam上下文,但没有Hibernate Validator支持。请密切关注未来几个月关于GWT的更多信息。
- 您与ICEfaces合作以改进ICEfaces的集成吗?因为我注意到许多ICEfaces的JIRA问题长时间未解决。 是的。来自ICEfaces团队的Judy维护Seam中的Seam-ICEfaces集成(在seam-gen和icefaces示例中) - Seam JIRA中的开放问题可能可以关闭,因为它们源于Judy之前的时代 ;-). 目前,ICEfaces正在重写许多seam-gen模板,以更好地利用ICEfaces的局部页面渲染功能。
测试
- 关于 seam 应用的测试怎么办?Selenium、JMeter、JSFUnit、其他 Seam 与单元测试配合得很好,因为所有内容都是 POJOs,并提供了一个测试框架来执行使用模拟 JSF 生命周期的集成测试。我们目前正在将 JSFUnit 和 Selenium 测试添加到我们的示例中 - 两者都与 Seam 工作得很好。
应用服务器互操作性
- Seam 是否能在 Oracle 的 OC4J 上运行? 是的,Seam 在 OC4J 11 上运行,并且有社区报告称它可以在 OC4J 10 上运行。
- 在 JBoss seam 中使用 toplink 替代 hibernate 是否可能?OpenEJB 呢? 使用 TopLink 的最大障碍是它不支持像 Hibernate 那样手动刷新持久化上下文。所以这更多的是一个架构限制。您目前可以使用 Seam 与 OC4J11.4g 一起使用。请参阅用户指南的 33.3 节以获取有关使用 OC4J 的更多信息。至于 OpenEJB,全球的 Seam 用户已经进行了一些实验。最好的办法是使用搜索引擎查看他们的一些工作,或者自己尝试。如果您自己尝试,请向我们报告,以便我们可以传播关于您名字的赞美。
安全性
- 为什么 seam 两次要求身份验证? 这在文档中讨论。
- Seam 2.1 是否会提供对使用 JAAS 上下文(主题、主体)的应用程序的 SSO(单点登录)的简单支持? SSO 的工作正在进行中。我们决定尽快发布 Seam 2.1.0,而不是等待其完成,因此 Seam 2.1.2 将支持 SSO。
未来
- 你对 EJB3.1 lite 和它与 Web beans 的交互有何看法? EJB 3.1 带来了许多激动人心的进展,其中之一是更简单的部署模型 - 能够在您的 WAR 中部署 EJB。WB 将与 EJB 3.1 lite 集成,就像它与正常 EJB 容器一样(假设它也在一个 web beans 容器中执行。EJB 3.1 lite 和 Web Beans 应该是一个很好的搭配。
- 当 Web Beans 出现时,Seam 的长期前景是什么?这两个之间的差异有多大,以至于它们将一起前进,还是 Seam 将仅作为维护版本,所有新功能都将包含在 Web Beans 中。 我们预见了这个常见问题解答 ;-)
- Seam 3 将支持两种模型吗?类型安全和基于字符串的方法? Seam 3 将以 WB 作为其核心。WB 是一个类型安全的组件模型和框架。如果有一个大型社区压力要支持经典、Seam 2 的核心,我们将考虑它(我们预计会有来自更喜欢动态语言的开发者的压力)。这个问题是针对 Seam 3 的(而不是 Web Beans)。
- 你将在什么时候开始开发基于 web beans 的 seam(即版本 3),2.1 是否将是 3 之前的最后一个主要版本? 当前的计划是在发布 Seam 2.1.0 后迅速推出 Seam 2.1.1 和 2.1.2。然后工作将开始于 Seam 3 - 思考初春。就像往常一样,计划可能会改变 ;-)
- 我正在启动一个将在 3 个月内发布到生产环境的新 seam 项目。我是否可以安全地使用 Seam 2.1,并确信 beta 周期将在年底完成? yes ;-) Seam 2.1.0.GA 版本将在下一个月左右可用。将会有后续版本专注于特定改进 2.1.1(提高性能)和 2.1.2(SSO 支持)。这些应该是 2.1.0 的直接替代品。
其他
- 我在验证示例中看到消息是硬编码的。我该如何国际化这个示例?您可以通过使用Seam消息包轻松地国际化消息。@Length(min=3, max=1000, message="#{messages['validate.length']}") String description;
- Seam提供了一种简单的方法来处理Web会话超时吗?我不得不创建一个解决方案来检查会话,并在会话超时时将用户重定向到起始页面。我想使用Seam来处理Web会话超时,而不是创建自己的解决方案...请查看Christan的解决方案。您还可以观察以下事件。org.jboss.seam.preDestroyContext.Session事件。
- Seam 1.x和2之间有哪些更重要的变化或增强?请查看Norman的公告
- 热部署功能是特定于JBoss AS还是Seam吗?“action”组件的热部署是Seam专门处理的功能,并在展开的WAR部署中提供。不要将其与应用程序本身的热部署混淆,后者属于应用服务器的范畴。为了启用组件的热部署,Seam使用标准的Java类加载器类型(URLClassLoader)来加载某些组件。当Seam检测到展开的WAR目录中的一个组件的新版本时,将丢弃并重新扫描“action”组件集。此功能属于Seam对组件的管理(其上下文容器)。
- Seam消息组件是否支持按需创建消息主题?Seam仅提供了一个访问JMS的简单方法,所以这取决于您底层的JMS提供程序。
- 哪个主要特性使Seam 2.0优于JSF或Visual JSF?关于哪个特性是主要的,大家的意见总是不同的。对我来说,这并不是必须创建一个JSF Managed Bean,该Bean作为哑适配器,仅仅将请求转发到业务逻辑Bean(EJB3或POJO),从而浪费大量的开发时间。
- 您可以将Seam与Action框架集成吗?目前没有与Struts或Stripes的集成,我也认为不会集成,因为action框架并不侧重于具有有状态的组件架构。但是,尽管JSF不是基于action的框架,Seam可以作为action框架 - 更多信息请查看Seam页面动作。实际上,您使用Seam动作越多,就越可能不想回到Action框架时代。
- 我们可以看到Seam如何与BPM和规则集成的示例吗?请查看Seam下载中的dvdstore示例(用于BPM)。请查看Drools集成示例。