Ber*_*ett 11 scala java-ee typesafe-stack
许多Java x Scala比较似乎只关注语言(语法,集合api,actor等),但是企业应用程序开发呢?
如果要使用Scala构建分布式企业系统,是否可以使用Scala语法对传统Java EE应用程序进行编码(例如,使用Scala语法的EJB兼容类)并在Java EE容器中运行它,或者是否有Java EE替换Scala生态系统?
如果是第二个,到目前为止我找到的最接近的是类型安全堆栈; 它是Scala替代Java EE容器的吗?
Akka是JMS(可能还有Session Beans)的替代品,还是Scala系统仍然会利用Java EE服务?
Mar*_*sen 23
那么,
Scala/Akka为系统开发中的许多常见缺陷提供了不同的概念.要比较几个Java EE:
=> JavaBeans:
可变数据结构只是简单的邪恶而不是线程安全的.将它们放入容器中不会改变任何东西.使用不可变数据结构,因为scala强制使用CaseClasses.
=> EJB:EJB的
组成很糟糕.实际问题是EJB需要具有高度的内聚力才能在可重用性方面发挥作用,而实际情况并非如此.将它们装入容器中不会让它变得更好.在Scala中,使用特征,对于合成,您可以通过由f-bounded多态保护的构造函数注入来使用ad-hoc组合.生活可以如此轻松.
=>事务:
是的,事务管理器已经使事情变得更好,但它仍然需要大型Java EE堆栈才能使其工作.在Scala中,只需使用akka提供的软件事务内存(STM)即可.
=>持久性:
我们真的需要ORM吗?像squeryl.org这样的项目为Scala添加了强类型LINQ.与Hibernate一样,它不是重量级的查询语言映射,而是将查询集成到scala中,由编译器完全检查.这当然只适用于关系数据库.对于no-sql,还有其他解决方案可用.
=>缩放?
集群Java EE?我需要说更多吗?
在akka中,您只需添加一些服务器,系统就可以扩展.为什么?因为远程actor被处理和访问的方式与本地actor相同,所以其他一切只需要配置分布式actor系统.Akka基于Erlang模型,因此在完全系统负载下,他们不会寻找五到九个正常运行时间,而是九九个正常运行时间.与此同时,akka非常轻松,重量轻,您可以在Android上使用它.你会尝试在Android上运行Java EE吗?
https://github.com/gseitz/DiningAkkaDroids
很明显,也许十年前,Java EE是如何构建大型企业级软件的答案,一旦Spring使其可用,它可能是当时最好的解决方案.
今天,世界已经发生了很大的变化,大多数旧的答案都不适合今天的现实.Scala,并不完美,但如果真的归结为一行,那将是这样的:
在scala中,我在Java EE和容器设置的一小部分时间内完成了我的实际编程.
即使是Spring,因为Java EE的首选框架正在向scala发展:
http://blog.springsource.org/2012/12/10/introducing-spring-scala/
从Akka的两个概念和最佳实践开始,有一本名为"Akka Essential"的手册
http://www.akkaessentials.in/2012/12/adding-turbchargers-to-jee-apps.html
Akka 确实是 JMS 的一种“替代品”。在这个想法(和你的问题)背后,它确实是范式的改变,我们必须意识到这一点,但从这个事实开始,我认为 akka 有机会在未来的多种用途中得到广泛使用,从消息传递分布式以太坊并发平台之间的集成。
类型安全堆栈是一个堆栈,所以我发现考虑 Java EE 容器是没有用的。
最后,第一个答案:如果你想使用EJB语法,请考虑使用注释,你应该有机会或多或少以与java相同的方式编写EJB,再加上一些scala的“语法糖”