Qual é a diferença entre Tomcat, JBoss e Glassfish?

445

Estou começando a olhar para o Enterprise Java e o livro que estou seguindo menciona que ele usará o JBoss. O Netbeans é enviado com o Glassfish. Eu usei o Tomcat no passado.

Quais são as diferenças entre esses três programas?

samoz
fonte
70
essas perguntas são a 'maldição' do código-fonte aberto. Às vezes, há muitas opções que fazem exatamente a mesma coisa. Para iniciantes, pode levar à paralisia pela análise. O Eclipse é o IDE dominante, mas quase todos os livros que vale a pena comprar estão usando o netbeans para desenvolver e ensinar. Ele usa o Glassfish quando vi muitas empresas usarem o Jboss na vida real. Existem curvas de aprendizado para o uso de cada contêiner, e isso pode ser muito frustrante para iniciantes.
usar o seguinte comando
Agora, o JBoss conhecido como [WildFly] ( en.wikipedia.org/wiki/WildFly ) e o JBoss foi a empresa que desenvolveu o WildFly.
Chaminda Bandara
Pergunta semelhante: Java EE Web Profile vs Java EE Full Platform
Basil Bourque 31/03

Respostas:

516

O Tomcat é apenas um contêiner de servlet, ou seja, implementa apenas os servlets e a especificação JSP. O Glassfish e o JBoss são servidores Java EE completos (incluindo itens como EJB, JMS, ...), com o Glassfish sendo a implementação de referência da pilha Java EE 6 mais recente, mas o JBoss em 2010 ainda não o suportava totalmente.

Petar Minchev
fonte
77
Nota aos leitores, o JBoss agora é certificado como Java EE 6 Full Profile como o GlassFish. Agora, o Tomcat agora é certificado em Java EE 6 Web Profile via TomEE e suporta EJB, CDI, JSF, JPA e muito mais.
David Blevins
10
@DavidBlevins então, quais são as diferenças agora?
Aldo.roman.nurena
23
@ aldo.roman.nurena Muito poucas diferenças. O GlassFish e o JBoss suportam o perfil completo do Java EE, portanto, eles têm suporte para tecnologias legadas como JAX-RPC e CORBA. Não os incluímos na versão Java EE do Tomcat, mas toda a tecnologia atual existe como JAX-RS, JAX-WS, JMS, CDI, JPA, JA, JSF, EJB, JTA etc.
David Blevins
@DavidBlevins Se queremos escolher entre JBoss e Glassfish, qual é o melhor para o ambiente de produção? Existe alguma informação de referência disponível para entender isso?
Sudhakar Chavali 10/10
1
A edição no stackoverflow é a maneira correta de corrigir respostas que se afastam da realidade muito longe.
Warren P
358

O Tomcat é apenas um servidor HTTP e um contêiner de servlet Java. O JBoss e o GlassFish são servidores de aplicativos Java EE completos, incluindo um contêiner EJB e todos os outros recursos dessa pilha. Por outro lado, o Tomcat tem um espaço de memória menor (~ 60-70 MB), enquanto esses servidores Java EE pesam centenas de megas. O Tomcat é muito popular para aplicativos Web simples ou aplicativos que utilizam estruturas como o Spring que não exigem um servidor Java EE completo. A administração de um servidor Tomcat é sem dúvida mais fácil, pois há menos partes móveis.

No entanto, para aplicativos que exigem uma pilha Java EE completa (ou pelo menos mais peças que podem ser facilmente conectadas ao Tomcat) ... JBoss e GlassFish são duas das ofertas de código aberto mais populares (a terceira é Apache Geronimo , sobre o qual a versão gratuita do IBM WebSphere é construída). O JBoss possui uma comunidade de usuários maior e mais profunda e uma base de código mais madura. No entanto, o JBoss fica significativamente atrás do GlassFish na implementação das especificações atuais do Java EE. Além disso, para aqueles que preferem um sistema de administração baseado em GUI ... O console de administração do GlassFish é extremamente liso, enquanto a maior parte da administração no JBoss é feita com uma linha de comando e editor de texto. O GlassFish vem diretamente da Sun / Oracle, com todas as vantagens que pode oferecer. O JBoss NÃO está sob o controle da Sun / Oracle, com todas as vantagens que isso pode oferecer.

Steve Perkins
fonte
3
Não validei, mas alguns afirmam que, para um projeto regular, um contêiner EE 6 pode usar 25% menos memória que o Spring + suas dependências.
Arjan
2
+1, resposta excelente, embora eu assine o comentário de @ Arjan: realmente a memória usada por esses servidores em si não é tão importante em comparação com a quantidade de memória que um aplicativo implantado precisará (e isso depende fortemente das tecnologias utilizadas. de um porco da memória)
Shivan Dragon 2/12
10
Heh ... a discussão de "contêineres de servlet" vs. "servidores JEE" sempre parece se transformar em discussões de "Spring" vs. "EJB / JSF". Eu uso o JEE há anos e sempre fico feliz em fazê-lo quando um cliente me paga. No entanto, meus pensamentos são: [1] a maioria das referências de ambos os lados vem de fontes tendenciosas, eu nunca notei uma grande diferença de recursos entre as duas pilhas. [2] A primavera é MUITO mais portátil que os "padrões" JEE, com os quais sempre parece doloroso para mudar de servidores, e por último mas não menos importante ...
Steve Perkins
7
... [3] as comunidades de usuários do Spring e do Hibernate superam absolutamente as das especificações JEE puras. Se você tiver problemas com o Spring e postar uma pergunta no StackOverflow, ela será lida por centenas de pessoas e você terá uma resposta sólida em minutos. Faça uma pergunta sobre o material do JEE, e ele será lido por uma dúzia de pessoas ... e na metade do tempo, a única resposta que você recebe é: "Funcionou para mim!". Os padrões JEE sempre parecem estar um dia atrasados ​​e um dólar a menos, e eu me sinto muito sozinho quando encontro problemas com eles em um aplicativo real.
Steve Perkins
1
Ummmm ... Desde o ano passado, o Tomcat tinha apenas 13 MB, GlassFish 53MB e JBoss 127 MB. Eu não consideraria esses servidores JavaEE (GlassFish e JBoss) centenas de megas. Se você está falando sobre WebLogic ou WebSphere, então estamos falando de um GB. Informações encontradas em zeroturnaround.com/rebellabs/…
j
81

Você deve usar os aplicativos corporativos do GlassFish for Java EE . Algumas coisas a considerar:

Um servidor web significa: Tratamento de solicitações HTTP (geralmente de navegadores).

Um contêiner de servlet (por exemplo, Tomcat ) significa: Ele pode manipular servlets e JSP.

Um servidor de aplicativos (por exemplo, GlassFish ) significa: * Ele pode gerenciar aplicativos Java EE (geralmente servlet / JSP e EJBs).


O Tomcat - é executado pela comunidade Apache - Código aberto e possui dois tipos:

  1. Tomcat - Perfil da Web - leve, que é apenas contêiner de servlet e não suporta recursos Java EE como EJB, JMS etc.
  2. Tomcat EE - Este é um contêiner Java EE certificado, que suporta todas as tecnologias Java EE.

Não há suporte comercial disponível (apenas suporte da comunidade)

JBoss - Run by RedHat Este é um suporte de pilha completa para JavaEE e é um contêiner Java EE certificado. Isso inclui o Tomcat como contêiner da web internamente. Isso também tem dois sabores:

  1. Versão da comunidade chamada Application Server (AS) - isso terá apenas suporte da comunidade.
  2. Enterprise Application Server (EAP) - Para isso, é possível ter uma licença baseada em assinatura (é baseada no número de Cores que você possui em seus servidores.)

Glassfish - executado pela Oracle Este também é um Java EE Container certificado para pilha completa. Este possui seu próprio contêiner da Web (não o Tomcat). Como é proveniente da própria Oracle, todas as novas especificações serão testadas e implementadas primeiro com o Glassfish. Portanto, sempre suportaria as especificações mais recentes. Não conheço seus modelos de suporte.

Jaimin Patel
fonte
2
Posso dizer que hoje em dia (1º trimestre de 2018) o Glassfish não desempenha realmente um grande papel na realidade? O JBoss padrão de fato não é?
Sócrates
14

jboss e glassfish incluem um contêiner de servlet (como tomcat), no entanto, os dois servidores de aplicativos (jboss e glassfish) também fornecem um contêiner de bean (e algumas outras coisas que eu imagino)

NimChimpsky
fonte
2
O Glassfish pode fazer qualquer coisa que o Tomcat possa, mas isso não significa que "inclua" o Tomcat. O Glassfish possui seu próprio contêiner da web.
Martin
5
Para ser mais claro, o "like tomcat" está certo, mas o JBoss realmente incorpora o Tomcat para a implementação de contêiner de servlet.
Chucky
Não @Chucky mais
Nim Chimpsky
8

O JBoss e o Glassfish são basicamente o Java EE Application Server completo, enquanto o Tomcat é apenas um contêiner de Servlet. A principal diferença entre o JBoss, o Glassfish, mas também o WebSphere, o WebLogic e outros em relação ao Tomcat, mas também ao Jetty, estava na funcionalidade oferecida por um servidor de aplicativos completo. Quando você tinha um servidor de aplicativos Java EE de pilha cheia, pode se beneficiar de toda a implementação do fornecedor de sua escolha e pode se beneficiar de EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet, é claro e assim por diante. Com o Tomcat, por outro lado, você pode se beneficiar apenas do JSP / Servlet. No entanto, atualmente, com o Framework avançado, como o Spring e o Guice, muitas das principais vantagens do uso de um servidor de aplicativos de pilha completa podem ser atenuadas, e com a suposição de que um desses frameworks seja viril com o Spring Ecosystem,

Valerio Vaudi
fonte
8

Parece um pouco desanimador usar o Tomcat quando você lê essas respostas. No entanto, o que mais deixa de mencionar é que você pode obter casos de uso idênticos ou quase idênticos com o tomcat, mas isso exige que você adicione as bibliotecas necessárias (por meio do Maven ou do sistema que você usa).

Estou executando o tomcat com JPA, EJBs com esforços de configuração muito pequenos.

user2130951
fonte
1
@MarcoOttina Na minha experiência, sim. É um servidor web altamente configurável. Eu acho que muitas pessoas que criam aplicativos da Web modernos estão usando-o juntamente com o Spring / Spring Boot. Em todos os meus anos com Java, ainda estou confuso com o ecossistema (particularmente todas as coisas do JEE), pois nunca tive nenhum requisito para isso. Daí acabar aqui hoje :)
jocull
4

O JBoss e o Tomcat são servidores de aplicativos de servlet Java, mas o JBoss é muito mais. A diferença substancial entre os dois é que o JBoss fornece uma pilha completa do Java Enterprise Edition (Java EE), incluindo o Enterprise JavaBeans e muitas outras tecnologias que são úteis para desenvolvedores que trabalham em aplicativos Java corporativos.

O Tomcat é muito mais limitado. Uma maneira de pensar é que o JBoss é uma pilha Java EE que inclui um contêiner de servlet e servidor da web, enquanto o Tomcat, na maioria das vezes, é um contêiner de servlet e servidor da web.

espartano
fonte
3

O Apache tomcat é apenas um contêiner de serverlet que não suporta o Enterprise Java Application (JEE). O JBoss e o Glassfish suportam o aplicativo JEE, mas o Glassfish é muito pesado que o servidor JBOSS: slide de referência

HOMEM MORCEGO_
fonte