一个罐子统治一切:Apache TomEE + Shrinkwrap == JavaEE启动

tomee_BigCat_s

警告:我不是Spring Boot的专家。 我发现很多事情对此很有趣,当然可以真正改善您的日常工作。 而且我对Spring Boot也没有任何反对,也没有开发或使用它的人。 但是我认为社区高估了该产品。

一年前,我开始收到很多有关博客文章,推文和有关Spring Boot信息的链接。 在他的网站上,您可以阅读:

通过Spring Boot,可以轻松地创建独立的,生产级的基于Spring的应用程序,您可以“运行”它们。

看来这件事已经彻底改变了Java世界。

例如,Spring Boot中的Spring MVC(以及RESTful)应用程序如下所示:

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

如您所见,魔术发生在SpringApplication类内部,该类启动了嵌入式Tomcat或Jetty,并使用Spring东西注册了该控制器。 我知道令人印象深刻的几行内容就是您可以准备使用端点。

但是我不知道自己是否可以在JavaEE世界中使用相同的方法,并且具有相同的低级和轻量级需求。 答案是绝对的。 我刚刚创建了一个非常小的原型/概念验证来证明这是可能的。

另外,请不要误会我的意思,除了自包含的应用程序(例如监视,执行器或工件依赖项解析)以外,Spring Boot还提供了更多其他功能。 但是这些东西仅仅是与其他技术的集成,我的示例是在一个半小时内从零开始开发的,因此不要期望可以使用Spring Boot。

首先要选择的是要使用的应用程序服务器,在这种情况下,毫无疑问,最适合此任务的是Apache TomEE。 它是经过认证的Web配置文件Java EE服务器,需要1秒钟启动时间,并且可以使用默认的Java内存参数。

因此,我在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)中,您只能部署文件中包含的应用程序,不能像在Tomcat中一样以编程方式添加Servlet。 嵌入式tomee API在不久的将来可能会改变,但是现在,我们将使用ShrinkWrap以编程方式创建这些部署文件。

这就是我们要做的:

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);
    }
}

请注意,我们仅导入JavaEE类,其数量与Spring Boot一号相比减少了。 在短短2秒钟内即可使用该应用程序。 请记住,您可以使用Web配置文件规范以及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() {
      @Override
      public 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);
  }
}

如您所见,这实际上是一段简单的代码,例如,对应用程序的配置或名称进行了硬编码,但请注意,只需进行几处简单的更改,就可以开始配置服务器,应用程序等。

总而言之,Spring Boot当然很棒,但是通过非常简单的步骤,您就可以在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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值