我目前正在考虑将使用Spring,GWT,Hibernate,Jackrabbit,Hibernate Search/Lucene(以及其他)的单租户基于Java的Web应用程序转换为完全成熟的SaaS风格应用程序.
我偶然发现了一篇文章,其中强调了以下7个"事物"作为对单个租户应用程序进行重要更改以使其成为SaaS应用程序:
我的问题是,是否有人使用与我列出的类似技术在SaaS /多租户应用程序中实现上述任何7项内容?在我走上正在考虑的道路之前,我希望得到关于最佳方法的尽可能多的意见.
作为一个开始,我很确定我能够很好地处理如何在模型级别处理多个租户.我正在考虑为所有表添加租户ID,然后使用Hibernate过滤器(以及Hibernate Search的全文过滤器)根据登录用户的所有查询的租户ID进行过滤.
然而,我对性能也有一些担忧,特别是当我们的租户数量增长很多时.
任何有关如何实施此解决方案的建议都将受到高度赞赏(如果这个问题有点过于开放,我会道歉).
我在一个Java Web应用程序上工作,该应用程序使用Spring进行依赖注入,使用JMock在我们的单元测试中模拟这些依赖项.
目前我们的团队在某一点上,我们在如何命名我们使用的某些界面方面有一些不同的意见.我们在域中命名具有多个实现的接口没有问题,这很简单.但是,当涉及到我们只有一个实现并且打算将来只有一个实现的接口时,我们遇到了障碍.
我们有这样的接口的原因纯粹是为了模拟,例如,我们有我们在单元测试中模拟的服务和存储库,这些服务将被命名为"DocumentMappingService"或存储库"EmployeeRepository".目前,一些人只是在关联的接口名称前加上"I",即"IDocumentMappingService"和"IEmployeeRepository".其他人如上所述命名接口,然后在实现类的接口名称后添加"Impl".
第三个"派系"认为这两个选项都很差.查看众所周知的"以测试为导向的面向对象的软件"这样的文献会使人们相信前面提到的两个选项都很差,并且接口名称应该明确定义合同和实现类名称应明确说明合同是如何实施的.我们发现在上面提到的情况下这很难做到.
我希望那里的某个人之前有类似的问题并且有一些建议,哪个选项是最好的,为什么.此外,如果您认为"I"和"Impl"选项都很差,那么请建议一个特定的替代惯例.
我正在构建一个需要相对不变的数据库轮询的网页组件.我可以看到两种不同的方法,我想知道其中一种是否比其他方法更好,或者我是否缺少第三种选择.
1)每隔1或2秒发送一次AJAX请求以检查更新.无论是否有新数据,每个请求都会立即返回.
2)触发单个AJAX请求,该请求在收到数据或发生超时之前不会返回.在其中任何一个发生时,它会触发下一个请求.(我认为这叫做长轮询?)
数据库查询的数量与之相同,但使用#2,从浏览器发出的请求将减少,这可以节省带宽和客户端资源.对于服务器,最好让一个PHP请求保持活动状态并在查询之间休眠,或者每隔几秒触发一次,轮询数据库,然后关闭?或者没有区别,我对此太过强调了?
编辑:我想我还应该声明这是一个更大的网络应用程序的聊天小部件.通信的轻微延迟不会杀死用户,因为聊天是次要功能.
我目前面临与GWT codesplitting相关的相当具有挑战性的问题,并希望得到一些帮助.
我目前正在研究一个大型的遗留GWT应用程序(MVP之前的日子),我期待基于"portlets"(我们称之为构建我们页面的各种复合小部件)的模块对此应用程序进行代码拆分.部分.
目前我们的模块只是由portlet所包含的软件包标识,但我愿意更改它以更好地适应声音通用的代码分离设计.
关于我如何设计此代码以指示portlet /复合属于特定"模块"然后拆分代码以便第一次加载模块X中的任何portlet /复合,整个模块X被加载的任何想法?
谢谢
从我所看到的情况来看,如果你安排一个无限期重复的警报,它将不会停止运行,直到你重启设备或卸载应用程序.
我想知道,在应用更新的情况下,这些行为如何表现?例如,您从Play商店下载该应用程序的版本1,然后运行该应用程序,此警报开始运行.然后发布版本2并执行自动或手动更新.此警报是否仍在继续运行(或者您是否必须再次启动应用程序才能启动警报)?
在我的场景中,我确实需要这样做,所以我希望答案是它会继续运行.但是,如果您在版本2中更改了警报代码,会发生什么?
我目前正在开发基于Java的Web应用程序.最近我们使用Spring创建了一些REST端点.这是因为我们开发了一个混合移动应用程序,通过这些端点与我们的主要应用程序集成.
问题是,未来我们不太确定如何处理更新.如果我们更新我们的API,例如我们更改端点方法的方法签名,或者我们更改我们作为JSON返回的DTO上的属性,那么如果我们的移动用户运行的是过时版本的移动设备,我们就会遇到问题应用程序.
我们想要实施的是强制我们的用户在应用过期时更新应用的内容.我见过很多移动应用程序都是这样做的.因此,我们考虑为我们的REST API提供API版本,然后让移动应用程序检查它使用的版本是否与我们的服务器运行的版本相同,如果没有,则强制用户进行更新.
我们遇到的问题是:
我们只有一个版本的服务器可以随时运行.那么我们如何计算我们的发布时间?如果我们发布新版API和移动应用程序但应用程序商店尚未公开最新版本,会发生什么情况.然后,用户将被迫进行更新,但更新的应用程序尚不可用.
我们如何维护API版本号?在移动应用程序上,我们可以配置它.但是在服务器上,维护版本号并不是很好.我说这个的原因是,如果我们对方法签名或DTO等进行更改,并忘记在发布之前手动更新此版本号?当然有一种更自动的方法可以根据API的当前定义生成一些独特的"API密钥"吗?然后我们可以使用它而不是API版本号.
java ×4
ajax ×1
alarmmanager ×1
android ×1
comet ×1
gwt ×1
interface ×1
long-polling ×1
multi-tenant ×1
performance ×1
php ×1
rest ×1
saas ×1