一个罐子统治一切:Apache TomEE + Shrinkwrap == JavaEE引导
警告:我不是Spring Boot的專家。 我發(fā)現(xiàn)很多事情對此非常有趣,并且當(dāng)然可以真正改善您的日常工作。 而且,我對Spring Boot沒有任何反對,也沒有開發(fā)或使用它的人。 但是我認(rèn)為社區(qū)高估了該產(chǎn)品。
一年前,我開始收到很多有關(guān)博客文章,推文和有關(guān)Spring Boot信息的鏈接。 在他的網(wǎng)站上,您可以閱讀:
通過Spring Boot,可以輕松地創(chuàng)建獨立的,生產(chǎn)級的基于Spring的應(yīng)用程序,您可以“運行”它們。
看來這件事已經(jīng)徹底改變了Java世界。
例如,Spring Boot中的Spring MVC(以及RESTful)應(yīng)用程序如下所示:
@Controller @EnableAutoConfiguration public class SampleController {@RequestMapping("/")@ResponseBodyString home() {return "Hello World!";}public static void main(String[] args) throws Exception {SpringApplication.run(SampleController.class, args);} }如您所見,魔術(shù)發(fā)生在SpringApplication類內(nèi)部,該類啟動了嵌入式Tomcat或Jetty,并使用Spring東西注冊了該控制器。 我知道令人印象深刻的幾行內(nèi)容就是您可以準(zhǔn)備使用端點。
但是我不知道自己是否可以在JavaEE世界中使用相同的方法,并且具有相同的底層和輕量級需求。 答案是絕對的。 我剛剛創(chuàng)建了一個非常小的原型/概念驗證來證明這是可能的。
另外,請不要誤會我的意思,除了自包含的應(yīng)用程序(例如監(jiān)視,執(zhí)行器或工件依賴項解析)以外,Spring Boot還提供了更多其他功能。 但是這些東西僅僅是與其他技術(shù)的集成,我的示例是在1小時半的時間內(nèi)從零開始開發(fā)的,因此不要指望可以使用Spring Boot。
首先要選擇的是要使用的應(yīng)用程序服務(wù)器,在這種情況下,毫無疑問,此任務(wù)的最佳選擇是Apache TomEE。 它是經(jīng)過認(rèn)證的Web配置文件Java EE服務(wù)器,需要1秒鐘啟動時間,并且可以使用默認(rèn)的Java內(nèi)存參數(shù)。
因此,我在pom.xml文件中添加了tomee依賴項。
<dependencies><dependency><groupId>org.apache.openejb</groupId><artifactId>tomee-embedded</artifactId><version>1.7.1</version></dependency><dependency><groupId>org.apache.openejb</groupId><artifactId>openejb-cxf-rs</artifactId><version>4.7.1</version></dependency><dependency><groupId>org.apache.openejb</groupId><artifactId>tomee-jaxrs</artifactId><version>1.7.1</version></dependency><dependency><groupId>org.jboss.shrinkwrap</groupId><artifactId>shrinkwrap-depchain</artifactId><version>1.2.2</version><type>pom</type></dependency></dependencies>在以前的嵌入式版本(1.7.1)中,您只能部署文件中包含的應(yīng)用程序,不能像在Tomcat中一樣以編程方式添加Servlet。 嵌入式tomee API在不久的將來可能會改變,但是現(xiàn)在,我們將使用ShrinkWrap以編程方式創(chuàng)建這些部署文件。
這是我們想要做的:
import javax.ejb.Stateless; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces;@Stateless @Path("/sample") public class SampleController {@GET@Produces("text/plain")public String sample() {return "Hello World";}public static void main(String args[]) {TomEEApplication.run(HelloWorldServlet.class, SampleController.class);} }請注意,我們僅導(dǎo)入JavaEE類,其數(shù)量與Spring Boot一號相比減少了。 在短短2秒鐘內(nèi)即可使用該應(yīng)用程序。 請記住,您可以使用Web配置文件規(guī)范以及JAX-RS或JMS提供的任何功能。 因此,例如,您可以使用JPA,Bean驗證,EJB,CDI等。
而且TomEEApplication里面有什么? 只有70行的課程會讓您驚訝:
public class TomEEApplication {private static void startAndDeploy(Archive> archive) {Container container;try {Configuration configuration = new Configuration();String tomeeDir = Files.createTempDirectory("apache-tomee").toFile().getAbsolutePath();configuration.setDir(tomeeDir);configuration.setHttpPort(8080);container = new Container();container.setup(configuration);final File app = new File(Files.createTempDirectory("app").toFile().getAbsolutePath());app.deleteOnExit();File target = new File(app, "app.war");archive.as(ZipExporter.class).exportTo(target, true);container.start();container.deploy("app", target);container.await();} catch (Exception e) {throw new IllegalArgumentException(e);}registerShutdownHook(container);}private static void registerShutdownHook(final Container container) {Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {try {if(container != null) {container.stop();}} catch (final Exception e) {throw new IllegalArgumentException(e);}}});}public static void run(Class> ... clazzes) {run(ShrinkWrap.create(WebArchive.class).addClasses(clazzes));}public static void run(WebArchive archive) {startAndDeploy(archive);} }如您所見,這實際上是一段簡單的代碼,例如,對應(yīng)用程序的配置或名稱進行了硬編碼,但請注意,只需進行幾處簡單的更改,就可以開始配置服務(wù)器,應(yīng)用程序等。
總而言之,Spring Boot當(dāng)然很酷,但是通過非常簡單的步驟,您就可以在JavaEE世界中擁有相同的功能。 我們(Apache TomEE貢獻者)將開始著手這一工作,并擴大這一想法。
因此,不要因為Spring Boot而低估Java EE。
翻譯自: https://www.javacodegeeks.com/2014/09/one-jar-to-rule-them-all-apache-tomee-shrinkwrap-javaee-boot.html
總結(jié)
以上是生活随笔為你收集整理的一个罐子统治一切:Apache TomEE + Shrinkwrap == JavaEE引导的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: lg耳机如何连接电脑连接电脑驱动程序(L
- 下一篇: HD4870评测(hd7470评测)
