2015-03-24 2 views
0

Я разрабатываю автономное приложение.Автономный сервер приложений Java EE

Запуск начинается как java -jar myapp.jar и нигде не используется. Мне нужно использовать встроенный сервер приложений.

До сих пор я нашел только Jetty, но он не поддерживает все функции Java EE. Есть ли другие альтернативы?

+0

Причал имеет модуль [причал-EJB] (https://github.com/jetty-project/jetty-ejb), который обеспечивает те же слои, как Java EE TomEE. Однако его не очень популярный модуль (менее 200 загрузок). –

ответ

1

Я обязательно поеду с tomee. в основном это кот с небольшим количеством стероидов j2ee: р

=============

Это код, я проверил это в моем местном ноутбуке, и он должен работает. Обратите внимание, что вам нужно загрузить tomee-embedded.jar из этого link, а также исходный код встроенной банки можно найти в here, если вы хотите понять, что именно происходит в коде.

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.net.URL; 
import java.util.Properties; 

import javax.ejb.embeddable.EJBContainer; 

import org.apache.openejb.loader.IO; 
import org.apache.tomee.embedded.EmbeddedTomEEContainer; 


public class Main { 

    public static void main(String[] args) { 
    EJBContainer container = null; 
    try { 
     System.out.println("Start"); 
     final File war = createWar(); 
      final Properties p = new Properties(); 
      p.setProperty(EJBContainer.APP_NAME, "test"); 
      p.setProperty(EJBContainer.PROVIDER, EmbeddedTomEEContainer.class.getName()); 
      p.put(EJBContainer.MODULES, war.getAbsolutePath()); 
      p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, "-1"); 

      System.out.println(war.getAbsolutePath()); 

      container = EJBContainer.createEJBContainer(p); 
      System.out.println(container); 
      System.out.println(container.getContext()); 
      final URL url = new URL("http://127.0.0.1:" + System.getProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT) + "/test/index.html"); 
      System.out.println(getOk(url, 2)); 

     } catch (Throwable e) { 
      System.err.println(e.getLocalizedMessage()); 
     e.printStackTrace(); 
    } finally { 

      if (container != null) { 
       container.close(); 
      } 
     } 
    } 
    private static String getOk(final URL url, final int tries) throws Exception { 
     try { 
      return IO.readProperties(url).getProperty("ok"); 
     } catch (final IOException e) { 
      if (tries > 0) { 
       Thread.sleep(1000); 
       return getOk(url, tries - 1); 
      } else { 
       throw e; 
      } 
     } 
    } 

    private static File createWar() throws IOException { 
     final File file = new File(System.getProperty("java.io.tmpdir") + "/tomee-" + Math.random()); 
     if (!file.mkdirs() && !file.exists()) { 
      throw new RuntimeException("can't create " + file.getAbsolutePath()); 
     } 

     write("ok=true", new File(file, "index.html")); 
     write("<beans />", new File(file, "WEB-INF/classes/META-INF/beans.xml")); 
     return file; 
    } 

    private static void write(final String content, final File file) throws IOException { 
     if (!file.getParentFile().mkdirs() && !file.getParentFile().exists()) { 
      throw new RuntimeException("can't create " + file.getParent()); 
     } 

     final FileWriter index = new FileWriter(file); 
     index.write(content); 
     index.close(); 
    } 
} 
+0

Я пытаюсь найти какой-либо внедренный пример с tomee like jetty с http://eclipse.org/jetty/documentation/current/embedded-examples.html, но не могу найти :( – corvax

+0

позже, я попробую чтобы обновить ответ с помощью кода о том, как запустить tomee embedded. На данный момент, возможно, вы можете увидеть этот [тестовый пример] (http://svn.apache.org/repos/asf/tomee/tomee/trunk/tomee/ tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java). ключ находится в методе deployPathsAsWebapp();) –

1

Посмотрите в проект весна-загрузки:

http://projects.spring.io/spring-boot/

Он предоставляет возможности для создания исполняемых баночки с внедренными серверами приложений. Гризли, Джетти, Томкат и Undertow - варианты. Сам проект spring-boot предоставляет дополнительную дополнительную поддержку, такую ​​как встроенные метрики и проверки работоспособности из коробки. Надеюсь, один из предоставленных серверов приложений удовлетворит ваши потребности.

Undertow (http://undertow.io/) предположительно может быть полным контейнером сервлетов Java EE 3.1, но я еще не работал с ним еще. Каждый проект, над которым я работал, нашел Jetty и/или Tomcat достаточным.

Смежные вопросы