在我们上一个项目中,我基本上用 Scala 代码打了每个人的头,因为我厌倦了调试由于对 Hibernate + JBoss 缺乏了解而导致的相同问题。(真的很神奇。编写原始系统的开发人员仍然在那儿,仍然迷失在 Hibernate 细节中。)
我们所拥有的 -> 一个古怪的系统,主要由一堆无状态 EJB bean 与一些休眠代码和一些 SQL 组合在一起构建而成。(基本上,我们是一个 ASP。生产集群相当小 -> 只有大约 100 台机器。)
我所做的 -> 将各种基于 REST 的服务放在一起,我们在其中重新定义了一些服务器之间的 RPC。这使得一切都非常容易编码,此外,将公共 API 实现到一个不关注依赖关系的系统中。
到目前为止,我们已经开始在 JBoss 实例内外部署代码,没有任何实际问题。当您第一次尝试object
在 Java 中使用 Scala 时,您可能会皱起鼻子。但除此之外,没有人真正注意到。
到目前为止,距离我们真正开始已经大约 5 个月了。我们已经进行了几次重大修改,随后落后了,但该系统的测试远比过去好得多。因此,虽然我们在真正学习系统时有一些不好的想法潜入其中,但我们现在已经能够将它们全部删除,并且非常接近生产部署。总而言之,我想说典型的家伙需要 2-3 个月才能停止像 Java 程序员那样编码,并“熟悉”大多数标准库。
编写 JDBC 代码而不是 ORM 系统基本上已经排除了我们几乎所有的性能问题。速度实际上要好得多,但这主要是因为我能够用更少的实际应用程序代码完成我想做的一切。
我正在使用的工具:
- Restlet:对这个框架非常满意。我们的 restlet 层是非常琐碎的代码。
- JDBC -> 注意:我们已经调整了 wiki 中的基本内容
- XML(很快,JSON)
- buildr,我不想转换的几个项目的专家(加上 Nexus 和 Hudson)。我正在试验 sbt,这对于 scala 项目来说已经非常好了。
我们在重用任何旧的 java 库方面绝对没有问题,但我们确实倾向于将它们包装在可扩展的层中。主要是为了写更少的代码。
到目前为止,我的图书馆模式中的皮条客是最重要的一种。“蛋糕”模式很好,但您必须控制实例化,这有时不是很有用。我也在混合环境中使用过 Guice,也不是很难。但我发现混合代码的用处远没有我最初想象的那么有用,尽管这可能是因为我要替换很多非常非常糟糕的 Java 代码。
我的编辑环境主要是 OS X 上的 TextMate,但我们部署在 Linux 服务器上。
PS 是的,我知道这大约是 4 个月大,但无论如何。这是相关的,尤其是现在我们有一些经验。