能给我一张“票”吗;“写一次永远跑”;什么是Java中的系统?

能给我一张“票”吗;“写一次永远跑”;什么是Java中的系统?,java,osgi,Java,Osgi,我知道OSGi模块可以在运行时动态添加和删除。那么,有没有可能有一个系统,我可以升级它,而不必把它取下来?(按照Erlang/OTP的思路考虑,但假设我不需要Erlang系统的容错保证)。如果不是,什么是阻碍因素?目前,我正在研究OSGi,但还没有深入挖掘 脚注 “写一次,永远跑一次”来自Erlang上的Joe Armstrong。是的,OSGi是你的答案 但是,如果您不需要最高的容错能力,“只写一次,永远运行”有什么好处?从一开始,您就为体系结构引入了很多约束 您希望在运行时更换哪种组件 编辑

我知道OSGi模块可以在运行时动态添加和删除。那么,有没有可能有一个系统,我可以升级它,而不必把它取下来?(按照Erlang/OTP的思路考虑,但假设我不需要Erlang系统的容错保证)。如果不是,什么是阻碍因素?目前,我正在研究OSGi,但还没有深入挖掘

脚注

“写一次,永远跑一次”来自Erlang上的Joe Armstrong。

是的,OSGi是你的答案

但是,如果您不需要最高的容错能力,“只写一次,永远运行”有什么好处?从一开始,您就为体系结构引入了很多约束

您希望在运行时更换哪种组件


编辑:OSGi已经超过13年了,还没有“常识”或广泛使用。

我很想说我以前的一些同事使用过的Jain。这是Ja和Nein的融合。基本上理论上你能做到,但实际上你做不到

因此,您要么使用Erlang,要么忘记这个概念


有很多地方可能出错。例如,如果您计划使用Tomcat部署您的应用程序,它就以其资源泄漏而闻名。它根本不可能永远运行。

永远运行的想法的问题在于,它假设不会出现任何错误,并且你和其他人都不会犯错误。在现实世界中,人们会犯错误。您最好开发一个允许操作员出错等情况的系统

如果您正在提供一项服务,请允许它在冗余或维护窗口中关闭并重新启动。即使使用OGSi升级软件,它仍然会在很短的时间内停止执行切换,假设每次都能工作(即,您没有引入阻止切换的错误)


OSGi在工作时非常有用,但它会给您需要考虑的所有开发过程增加开销。它对于快速开发环境并不理想。IMHO.

我想你最好忘记Java和它的调色板上常见的资源泄漏。OSGi的模块化要求所有模块的客户端都以非平凡的方式表现良好;换句话说,这只是另一种脆弱的、合作的机制。使用新功能升级模块是我目前的想法。亚当·阿罗尔德:是的!容错、分布式、并发、神经网络,一个不断发展的人工智能系统如果您希望使用JVM,而不是低级别,那么OSGi是升级模块的标准方法@亚当·阿罗尔德:还在找呢。但当我们团结起来时,我们不会被打败。。。muhahahaha…@kadaj:如果你不拿一个进化中的人工智能系统开玩笑,你会想到,看看其他语言,比如clojure。在那里,您可以在运行时修改程序。。。它在jvm中运行。还有,Tomcat只是一个诚实的人,因为所有JEE容器都有完全相同的问题。我们甚至还没有开始讨论服务器应用程序。我接受了这个答案,但我并没有完全否定这个想法。忘了雄猫吧。让我们假设使用NIO.2和高质量代码定制了一个。我认为这可以使泄漏最小化。我认为JVM本身没有资源泄漏问题。正是糟糕的应用程序代码使其如此。不?是的,我在某种程度上同意,但我没有参与JVM的实现细节来提供一个权威性的答案。我不同意你的最后一点。根据我的经验,OSGi消除了开销,并显式地支持快速开发环境,因为它能够动态地重新加载模块。这在开发中和在生产中一样有用。我们在中使用此功能可以实现非常快速的代码/测试/运行周期。@NeilBartlett我将其与能够从IDE中按run/Debug/Profile进行比较。也许有了正确的插件,这也同样容易,但我发现在OSGi应用程序中,还有很多事情需要考虑,而在核心Java应用程序中,你根本不用担心?相反地,在传统的Java应用程序中,有许多事情是你不得不考虑的,而在OSGi中你根本不用担心。“如何确保我的依赖项存在且兼容?”“如何在运行时获取此接口的实例?”等等。对于第一个问题,您部署了构建和测试的版本,对于第二个问题,您可以在google代码上使用类似“reflections”的库,但这是OSGi做得更好的地方。