有很多基础服务,本来可以做在webapp里面的,但有人却选择把它做在webapp外面。
比如jboss提供的log4j服务,就是一个很讨厌的东西,很容易跟你应用里面的log4j冲突。
还有些服务,比如连接池服务,被强行做成了jndi,由容器来打理,这也很讨厌。
在我看来,把可以放里面的东西丢到外面有这样几个缺点:
1. 本可以由程序员完全控制的基础设施,现在要由运维人员来分担了。jndi就是一个例子。
2. 本可以由scm工具控制的东西,现在要经常手动来管理,这在版本管理方面往往产生问题。比如那些由jca写的、丢在jboss下面的东西,没办法用maven+svn直接管理了
3. 内外冗余造成的冲突问题。如果你的应用里使用了log4j,就可能跟jboss自带的log4j产生版本冲突和class loading冲突
4. 开发环境和其它环境的不一致问题。比如你开发用Tomcat,Tomcat不提供JNDI,所以你开发时不使用jndi那一套; 但正式环境用的又是jboss + jndi。结果就是你的代码或配置要支持两种东西,开发时不搞jndi,发布时要搞jndi