企业级开发的思考
曾经自己一直觉得企业级开发是神圣的,是不容质疑的。虽然有时候自己也认可“多大屁股穿多大裤衩”的道理,可是那种重量级的开发模式在自己心目中占领的位置一直是不容侵犯的。直到近期公司打算要做个东西的时候才发现企业级真的非常重,重到90%以上的情况用不到。
之前考虑过EJB和Spring。自己一直觉得仅仅有EJB才是亲生的。至于Spring仅仅只是算是一个长得非常壮的野草而已。可是近期工作中遇到的问题改变了我以往的观点。
在一个纯EJB的系统中毋庸置疑得使用JPA来持久化,可是因为系统升级的须要我们不得不去更改数据库。加字段批量更新等等都非经常见,起初打算在系统启动之前直接使用jdbc来运行sql完毕升级。可是因为EntityManager有属于自己的一套管理体系,所以会导致死锁,并且这个死锁的问题是在数据库级别的,更加可怕的是使用jdbc就以为着放弃了EntityManager的事务,那么升级这个操作就仅仅能成功不能失败,否则事务回滚之后系统会起不来。权衡利弊之后决定使用JPA直接运行原生sql,在这个过程中的感受可谓难受至极啊。
这就像拿着一把AK47去当锤子用。能敲钉子吗?能。能砸死敌人吗?也能,可是它正确的用法是装子弹上膛然后射击。也就是说当前的使用方式不是这个工具设计之初所定义的那样。
JPA是用来持久化的,直接运行原生的sql虽然也能够可是这不是它的优势。所以怎么用怎么蹩脚。
近期公司打算要进军P2P了,客户是有的那么下一个任务就是迅速开发出一个原型出来,最起码要能让客户大致的了解一下界面和功能吧。
那么问题来了技术选型用什么呢?EJB的那一套?要客户等一两个月?预计那时候客户早就跑了。终于公司决定临时用Spring的东西把原型搞出来,等客户拿下之后再去依据客户要做的规模去权衡究竟是EJB还是Spring。EJB固然能够分布式。固然能够用集群来解决性能的问题可是在速度方面它的确是不如Spring,要不怎么叫重量级呢。
难道就没有一种既能高速又能扩展成为重量级的东西么?相似于“出将入相”的感觉那该多好。