<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Bahia.</title>
    <description>The latest articles on DEV Community by Gabriel Bahia. (@gabrielsantosba).</description>
    <link>https://dev.to/gabrielsantosba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F680859%2F5577be42-c3bf-4cfc-9d0a-e19992ef8efe.jpg</url>
      <title>DEV Community: Gabriel Bahia.</title>
      <link>https://dev.to/gabrielsantosba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielsantosba"/>
    <language>en</language>
    <item>
      <title>O Teorema zero é o programador moderno, como você está no home office?</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Wed, 17 Aug 2022 19:13:00 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/o-teorema-zero-e-o-programador-moderno-como-voce-esta-no-home-office-2pkd</link>
      <guid>https://dev.to/gabrielsantosba/o-teorema-zero-e-o-programador-moderno-como-voce-esta-no-home-office-2pkd</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--41CsSFLn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k775wgd6gdb0whfgxtdq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--41CsSFLn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k775wgd6gdb0whfgxtdq.jpg" alt="Image description" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então pessoal hoje trago um artigo um pouco diferente do que eu costumo escrever, esse é um pouco mais reflexivo, sim, isso mesmo, mas calma, sem muita filosofia, principalmente aquelas as baratas rsrs, vamos falar de um assunto que muitos vivemos hoje em nossos postos de trabalho que apelidamos brasileiramente de &lt;em&gt;home office&lt;/em&gt;, na gringa é (&lt;strong&gt;Work From Home&lt;/strong&gt;).&lt;br&gt;&lt;br&gt;
Vou citar um filme que talvez você já tenha assistido ou ouvido falar, “O Teorema Zero”&lt;/p&gt;

&lt;p&gt;Alguns odeiam esse filme, pois não conseguem entender a mensagem, outros como eu, acham a mensagem futurística e uma crítica muito, mas _muitoooo _interessante ao que vivemos hoje no âmbito de trabalho, principalmente quem está envolvido diretamente com tecnologia, então vem comigo, vamos lá nessa aventura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tt1xeLug--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jv4xvqymqha8bwh4k83p.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tt1xeLug--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jv4xvqymqha8bwh4k83p.jpeg" alt="Image description" width="880" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Uma Sociedade conectada com a Tecnologia, mas solitária por dentro.
&lt;/h2&gt;

&lt;p&gt;O filme começa contando a história de um programador, contador, cientista de dados, game developer, algo assim, diria até que uma mistura disso tudo, por hora vamos pensar em um programador do futuro… Ok?&lt;/p&gt;

&lt;p&gt;Bom, a primeira cena do filme mostra um ator(&lt;em&gt;o nome não importa aqui&lt;/em&gt;) principal olhando a tela do seu computador e vendo uma espécie de buraco negro, tipo aqueles de Star Trek, enfim esses buracos negros que aparecem no espaço que muitos filmes mostram, isso para exemplificar o buraco existencial que muitos hoje tem criado dentro de si, outro ponto importante logo no início do filme é que o personagem principal espera um telefone, ele acredita ser o telefonema que vai lé dar um sentindo na sua vida… Muito &lt;strong&gt;loucooooo&lt;/strong&gt;. rsrsrs.&lt;/p&gt;

&lt;p&gt;O que acontece a seguir é que esse programador busca muito trabalhar em work from home(home office), fala com seu chefe, depois até com o setor de saúde da empresa que ele trabalha, é diz que está “morrendo”, esse é um dos motivos de sua busca pelo home office, logo depois ele consegue, mas ele acaba mudando de projeto e ganha um projeto novo para trabalhar chamado de Teorema Zero, uma espécie de equação que visa comprovar a razão da existência dos homens e se a vida possui algum sentido, aqui começa à coisa toda, vem comigo que você vai entender… &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3Yl7DNM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61o823et525gn3g55zvh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3Yl7DNM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61o823et525gn3g55zvh.jpg" alt="Image description" width="880" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Você tem tido liberdade no home office?
&lt;/h2&gt;

&lt;p&gt;Esse é um assunto delicado, mas vamos lá, eu sou ousado mesmo rsrsrs, fato mostrado no filme que o chefe desse programador ao liberá-lo para o trabalho em casa, também coloca algumas câmeras para o vigiar, hoje em dia tem empresas, chefs por aí exigindo que o funcionário fique em uma sala online durante todo seu tempo de serviço, a desculpa é, “caso a gente precise é mais rápido chamar…” (quem acredita nisso? rsrs), outra coisa esse filme se passa em um futuro distante, mas baseando no que vejo hoje quando se fala em home office penso que logo algumas empresas vão querer exigir que o funcionário instale uma câmera em seu local de trampo mesmo, tudo isso por causa de uma palavrinha que tem se tornado "famosíssima", produtividade.&lt;/p&gt;

&lt;p&gt;Agora falando em produtividade, estamos sendo produtivos em nossas vidas? Realizações, sonhos, tempo com a família ou com quem amamos? &lt;/p&gt;

&lt;p&gt;Não to falando de férias uma vez por ano… Vejo muitas pessoas(até eu mesmo) sacrificando noites de sono, horário de almoço e muitas outras coisas mais para ter nossos nomes no card que fica na última coluna do Kanban( aquela cujo nome pode ser um desses Done, Finished, Concluído). &lt;/p&gt;

&lt;h4&gt;
  
  
  O tempo passa e a conta chega!
&lt;/h4&gt;

&lt;p&gt;Voltando aqui para o filme, esse programador após um tempo trampando no home office, ele acaba sendo exigido cada vez mais, toda hora sobe uma voz no seu PC dizendo “falta x horas para seu próximo upload”, poderíamos traduzir seu upload por seu push, seu merge request enfim, entrega de código, é caraca… nossa, isso é real, tá acontecendo quem nunca passou por uma equipe onde tinha um SM(Scrum Master) ou GP(Gerente de Projetos) que ficava na cola o dia todo no chat, iai ta pronto? Subiu?  Eu mesmo já vivi isso, no filme essa voz acompanha o programador até para cama rsrsrs, até na hora de dormir( vai vendo rsrs), é assim mesmo rsrsrsr.  &lt;/p&gt;

&lt;p&gt;Com um tempo ele acaba se vendo bem perturbado e recorre a uma psicóloga.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fato de surto.
&lt;/h4&gt;

&lt;p&gt;Um amigo de trabalho desse programador, seu supervisor, o convida para uma festa,( isso para nos fazer refletir, sempre tem alguém querendo nos tirar de casa), ele reluta em ir, mas acaba indo, chegando nessa tal festa todas as pessoas estão com um celular na mão curtindo a festa com fone no seu ouvido( faça me o favor rsrs, será esse o futuro?), “cada um no seu mundo”, que bizarro… &lt;br&gt;
Esse programador toda vez que alguém encosta perto dele, ele diz ”Não gostamos de ser tocados”, tem pessoas que quanto mais ficam em seus “homes” menos querem ver pessoas, cheio de não me toques, rsrsrs pior que as coisas estão ficando assim, isso me lembra de um projeto que passei, um amigo meu se envolveu tanto no trabalho, tarefas pessoais, cursos obrigatórios, tarefas da empresa, a conta para ele chegou…&lt;/p&gt;

&lt;p&gt;Ele surtou, isso mesmo, surtou, sumiu, era uma bela tarde ele estava preocupado com uma tarefa, tentei ajudar como pude, mas não foi o suficiente, do nada ele some do chat, até do zap, no dia seguinte não aparece, resolvi ligar, os familiares me falaram que esse meu colega tinha tido um surto, saiu andando sem rumo, resultado ficou numa clínica por um tempo para poder ser recuperar. &lt;/p&gt;

&lt;p&gt;No Filme o programador também surta, chega até dá uma martelada na tela do seu computador.(quem nunca sentiu esse desejo? rsrsrs). Isso traz à tona o cuidado que devemos ter com nosso dia a dia profissional, afinal de contas chegar a sentir esse desejo, esse momento de perder a cabeça por causa do trabalho, aaaa opinião minha, mas num fato desse alguma coisa tá errada.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zGVvq20y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ktdcwrccqme71kxlc0u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zGVvq20y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ktdcwrccqme71kxlc0u.jpg" alt="Image description" width="540" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Seja a resistência, não deixe a oposição te vencer.
&lt;/h2&gt;

&lt;p&gt;Sabemos que principalmente para quem tá iniciando na carreira os desafios são muitos, sim concordo é necessário dar um gás há mais, investir um pouco mais de tempo, mas saiba pisar no freio, saiba dizer NÃO, precisamos entender que temos uma vida, que as pessoas são mais importantes, não deixe a “resistência ”, vencer os seus projetos pessoais, eu mesmo fiquei um tempão levando sempre a frente melhoria de código tarefas da empresa e etc é meus projetos pessoais ficando para depois, entendamos uma coisa, nossos projetos são nossos sucessos, se deixamos para trás e para trás, a tendência é o fracasso pessoal, isso desanima de maissssss, hoje tô terminando um software próprio escrito por mim do início ao fim, porque decidi que, tais dias da semana poderia chover canivete eu iria trabalhar no meu projeto e assim eu fiz, fato que depois que eu comecei a me impor mais quanto às tarefas do dia a dia, até mesmo meus colegas de trabalho começaram a entender que eu tenha AGENDA. &lt;/p&gt;

&lt;p&gt;O filme mostra mais situações filosóficas, exalta o tanto que algumas pessoas vivem esperando encontrar um sentido para a vida, é enquanto isso a vida passa.&lt;/p&gt;

&lt;p&gt;Também mostra algumas situações trágicas que esse programador sofreu, por exemplo, ele teve uma namorada, casou com ela, logo depois ela foi embora, o filme também mostra que esse nosso cidadão se alimentava muito mau, com o tempo até os cabelos dele caíram, ficou carequinha da silva, mostra também como é fácil nossa busca por &lt;strong&gt;fast foods&lt;/strong&gt;, etc. &lt;/p&gt;

&lt;p&gt;Enfim tudo isso retrata o momento que vivemos e devemos despertar desse ritmo, eu sou fã do home office fã mesmo, sou morador do interior da Bahia, é esse estilo de trampo nossaaaaa, é muito bom para mim, mas precisamos aprender a usar bem essa liberdade, pois do contrário a nossa equação de vida será um olhar para trás e ver que o home office nos subtraiu. &lt;/p&gt;

&lt;p&gt;Então meu caro, toca teu trampo se empenha, mas lembre-se que seu trampo não é sua vida. Ok? &lt;/p&gt;

&lt;p&gt;Se animou em ver o filme, dá uma _googlada _que você encontra, &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;see you next article.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>homeoffice</category>
      <category>programador</category>
      <category>trabalharemcasa</category>
      <category>teoremazero</category>
    </item>
    <item>
      <title>Método construtor em Java, Vilão? Mocinho? Vamos entender!</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Thu, 04 Aug 2022 17:48:00 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/metodo-construtor-em-java-vilao-mocinho-vamos-entender-3pin</link>
      <guid>https://dev.to/gabrielsantosba/metodo-construtor-em-java-vilao-mocinho-vamos-entender-3pin</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--etLlEcoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AJwOUxKyrsu67ZJtc" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--etLlEcoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AJwOUxKyrsu67ZJtc" alt="" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Quem são os construtores de classe em Java?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Construtores de classe no Java existem de forma &lt;em&gt;implícita&lt;/em&gt;, ou seja, naturalmente eles são gerados, mesmo que não haja declaração por parte de nós “&lt;strong&gt;&lt;em&gt;devs&lt;/em&gt;&lt;/strong&gt;”, a mãezona &lt;strong&gt;JVM&lt;/strong&gt; trata de criar eles, isso por que precisa ser alocado um espaço na memória para esse novo objeto que você acabou de dar um &lt;strong&gt;&lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;, podemos entender assim, o construtor executa operações necessárias para inicializar a classe antes que os métodos sejam invocados ou os campos sejam acessados,( &lt;strong&gt;penso até que poderíamos pensar em um construtor como um inicializador ***), os atributos ganham valores padrões, **ex&lt;/strong&gt;: atributos do tipo String ganham valor &lt;strong&gt;&lt;em&gt;null&lt;/em&gt;&lt;/strong&gt;, primitivos do tipo número ganham valor 0.0, os construtores(&lt;strong&gt;&lt;em&gt;constructors&lt;/em&gt;&lt;/strong&gt;) são usados para gerar atomicidade, ou seja, ou cria o objeto em um estado &lt;em&gt;válido&lt;/em&gt;, ou não cria, dessa forma garante-se que para aquele objeto tenha sempre um padrão “&lt;em&gt;criacional”&lt;/em&gt;( &lt;em&gt;nem sei se essa palavra existe rsrs&lt;/em&gt;), mas você entendeu certo?&lt;/p&gt;

&lt;p&gt;Além do mais, em alguns casos o código fica mais (“ninitinho”) elegante(clean), outra coisa o construtor de uma classe é um método(&lt;em&gt;método construtor, método especial&lt;/em&gt;), você sacou certo? Resumindo é um método cuja finalidade é construir… Obvio rsrsr!&lt;/p&gt;

&lt;p&gt;Agora guarda essa dúvida aí, tem como destruir um objeto em Java? Se não sabe, vem comigo que vou te responder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LlZLjrLD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AqSMsEGiEAtwkVmJL" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LlZLjrLD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2AqSMsEGiEAtwkVmJL" alt="" width="480" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Como usar métodos construtores de classe em Java?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Primeiro você precisa saber que não vou aqui fazer tutorial de como criar um construtor de uma classe, isso é muito básico(&lt;strong&gt;&lt;em&gt;até a própria IDE faz&lt;/em&gt;&lt;/strong&gt;), o que vou fazer aqui é te trazer dicas básicas de onde é como usar, também algumas sacadas de cuidados na criação de um construtor de classe em Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Estamos acertados?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como você fechou negócio comigo, vamos começar pelas boas práticas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nx5SCvAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ARimJ0DO7MZZsj3w7" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nx5SCvAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2ARimJ0DO7MZZsj3w7" alt="" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Boas práticas na criação de Construtores(&lt;em&gt;Constructors&lt;/em&gt;) de classe em Java.&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Validação de objetos.
&lt;/h3&gt;

&lt;p&gt;Vamos lá, mentaliza aí uma classe &lt;strong&gt;Aluno,&lt;/strong&gt; agora pensa um cenário onde você precisa validar os dados da criação de um objeto dessa classe na sua criação, é caso a validação de algum desses dados falhar(&lt;em&gt;sei lá, o atributo nome não está passado na criação&lt;/em&gt;), então esse objeto &lt;strong&gt;não **deve ser criado, nesse caso um construtor ajuda bastante, pois logo na criação do objeto caso não atenda a definição de atributos determinada no método construtor vai ocorrer erro, (aposto que você pensou, aaa eu poderia validar com **if else, verdade, mas, sejamos elegantes sempre que possível rsrsr,&lt;/strong&gt; agora vamos pensar em outro cenário, se você tivesse que validar também o objeto (&lt;strong&gt;MensalidadeAluno&lt;/strong&gt;) somente se o objeto &lt;strong&gt;Aluno **tiver sido criado em um estado válido, **lembrando que esses objetos podem ser criados de forma independente&lt;/strong&gt;, nesse caso também usando o construtor da classe podemos controlar isso. Por que, a validação do objeto &lt;em&gt;Aluno&lt;/em&gt; irá acontecer sempre que um &lt;em&gt;new Aluno&lt;/em&gt; for chamado em qualquer parte do código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No processamento de um objeto&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Novamente mentaliza ai(mentalizou?) em quê? rsrsr, agora é sério, pensa aí em algum processamento de um objeto, pegando o &lt;strong&gt;ex&lt;/strong&gt;: acima: &lt;strong&gt;Aluno&lt;/strong&gt;, esse objeto para ser salvo na base de dados precisa estar pelo menos com sei lá três atributos inicializados, vamos pensar em (nome, telefone, tipo), usando construtores também poderíamos de forma legal validar isso para garantir que um novo objeto(Aluno) criado já esteja em um estado válido, conforme definido no método construtor, claro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mais uma… Ordem de execução.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Não sei se você conhece o pattern “&lt;a href="https://www.baeldung.com/chain-of-responsibility-pattern"&gt;Chain of Responsability&lt;/a&gt;”(Cadeia de responsabilidade), basicamente nesse pattern temos uma cadeia de objetos onde cada objeto fica responsável por validar uma regra de negócio. Fato é que em um exemplo de uso com 3 regras diferentes, então teríamos possivelmente 3 objetos para implementar esse pattern, eles devem ser chamados de forma encadeada, ou seja, primeiro chama o objeto 1 depois o segundo e assim por diante, até a regra ser validada. Agora imagina, nesse caso precisaremos que não haja falhas na ordem de execução, queremos que a ordem seja seguida certinha, 1..2..3.&lt;/p&gt;

&lt;p&gt;Nesse cenário o uso de método construtor é muito útil, pois permite determinar a ordem que cada membro que compõe esse encadeamento seja inicializado, de forma automática ou manual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tá Gabriel entendi, mas… sem o uso de método construtor como ficaria?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bom, sem nosso amigo construtor a &lt;strong&gt;JVM&lt;/strong&gt; em tempo de execução(&lt;strong&gt;&lt;em&gt;runtime&lt;/em&gt;&lt;/strong&gt;) é quem vai determinar a ordem de inicialização de cada objeto, isso poderá seguir a ordem determinada ou não, isso mesmo, não necessariamente vai seguir o fluxo que você gostaria que os objetos fossem instanciados, enfim, não fica no controle do &lt;em&gt;Dev&lt;/em&gt; sem uso de um construtor neste caso. Cá pra nós, lidar com situações que precisam de uma sequência e delegar isso para ser feito de forma automática… &lt;strong&gt;rummm é meio tenso rsrsr&lt;/strong&gt;. Agora pegando esse entendimento poderíamos também validar corretamente o fluxo de um encadeamento ou algo assim, tipo usar uma validação para se certificar que objeto 2 foi chamado após objeto 1 é assim por diante.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1aBUlUZq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A4uLjM_6raq_Np75P" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1aBUlUZq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2A4uLjM_6raq_Np75P" alt="" width="600" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;O que não é legal fazer na criação de construtores de classe?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Muitos Construtores.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esse artigo inclusive nasceu a partir do momento em que eu vi em um projeto qual eu estava atuando, algumas classes tinham construtores excessivos(&lt;strong&gt;&lt;em&gt;na minha opinião&lt;/em&gt;&lt;/strong&gt;) eram classes do tipo &lt;a href="https://en.wikipedia.org/wiki/Data_transfer_object"&gt;*DTO&lt;/a&gt;&lt;em&gt;, tinham até 4 construtores diferentes, fui implementar um desses construtores e fiquei perdido, não sabia qual construtor usar, parei naquele momento reflexivo como melhorar isso? Foi aí que parei para pensar, isso é uma boa prática? Sim, me fiz essa pergunta porque um dos recursos da programação O.O é justamente a sobrecarga de método(&lt;/em&gt;&lt;strong&gt;override method&lt;/strong&gt;&lt;em&gt;), fiz algumas pesquisas, vi até um post no *GUJ&lt;/em&gt; com vários comentários sobre o assunto(&lt;strong&gt;&lt;em&gt;tinha até comentários do Paulo Silveira&lt;/em&gt;&lt;/strong&gt;(com foto de adolescente rsrs), &lt;strong&gt;CEO da Alura&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Achei interessante a discussão, o que pude abstrair foi que todos concordavam que não fica legal vários métodos construtores de formas diferentes, li até que algumas empresas definem que deve haver apenas 2 métodos construtores, 1 vazio, é 1 com as devidos atributos, justamente para não virar bagunça, então fica a dica, nada de chuva de construtores rsrsr.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lrIkK90W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Aoq7Y7TU5wnWIfqP-" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lrIkK90W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/0%2Aoq7Y7TU5wnWIfqP-" alt="" width="400" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Muitos parâmetros estão sendo passados no construtor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outra coisa importante, com base no nosso entendimento acima, podemos entender que não faz muito sentido ter um construtor se nenhum dos parâmetros vai receber dados obrigatórios para ter um estado válido, ou então se for possível que esses valores possam ser inicializados de forma padrão, pensa comigo, imagina uma quantidade &lt;strong&gt;&lt;em&gt;monstra&lt;/em&gt;&lt;/strong&gt; de parâmetros num construtor, a manutenção de um código com várias implementações assim, fica no mínimo triste, dá canseira só de olhar.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Afinal, devo ou não devo usar métodos construtores em Java?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vamos alinhar um fato, construtores não são obrigatórios, toda classe precisa ter um construtor definido? A resposta é &lt;strong&gt;não&lt;/strong&gt;, lembrando que estamos falando da linguagem Java, em outras linguagens não sei bem ainda como funciona, pode até haver alguma que obrigue a criação, mas em Java não.&lt;/p&gt;

&lt;p&gt;Outra coisa, outro motivo que me levou a construir esse artigo é, percebi ser importante saber o porquê de criar um construtor é o por que não, em meus estudos vi uma declaração que dizia assim “&lt;strong&gt;&lt;em&gt;Se você não sabe porque está criando um construtor provavelmente está criando-o desnecessariamente&lt;/em&gt;&lt;/strong&gt;” por isso é importante entender como funciona o uso de construtor na criação de um objeto, sem esse entendimento não é possível entender quando o construtor é necessário. Agora olhando por outro ângulo, se nem mesmo passou por nossa mente que determinado objeto precisa da implementação de um construtor, que talvez seria melhor com o uso dele, bom nesse caso precisamos estudar mais, mas calma, por isso estamos aqui é por isso escrevi esse artigo, então tá tudo certo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Matando a cobra e mostrando o pau.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(&lt;/strong&gt;eu sempre quis escrever isso** &lt;strong&gt;rsrsr&lt;/strong&gt;)**&lt;/p&gt;

&lt;p&gt;No geral a preferência, &lt;strong&gt;sempre que possível&lt;/strong&gt;, é que os membros sejam ou inicializados por padrão, ou individualmente no código que vai consumi-lo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;tá, como seria essa inicialização padrão?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;variavel = valor&lt;/p&gt;

&lt;p&gt;ou&lt;/p&gt;

&lt;p&gt;Aquele velho é bom…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLASSE classe = new CLASSE();&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;classe.setNome();&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;isso é tão familiar&lt;/em&gt;… &lt;em&gt;rsrsr&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Um construtor com dados definidos deve existir se realmente ele for necessário e só deve receber os parâmetros mínimos para gerar um estado válido manipulando a menor quantidade possível de membros.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finalizando nosso papo&lt;/strong&gt;, não fique sem criar um construtor quando ele vai trazer ao código legibilidade ou mesmo vantagem, seja para manutenção futura para facilitar testes, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tenha em mente…&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Construtores nunca devem trazer efeitos colaterais&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pensando em &lt;a href="https://www.digitalocean.com/community/conceptual_articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design"&gt;**SOLID&lt;/a&gt;**, um dos princípios é justamente a questão da responsabilidade única, então um construtor só deve construir objetos válidos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Assim…. respondendo a pergunta que fiz acima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Não tem como destruir um objeto em Java.&lt;/p&gt;

&lt;p&gt;até a versão 11 que foi até onde tenho estudado, o &lt;a href="https://docs.oracle.com/javase/9/gctuning/introduction-garbage-collection-tuning.htm"&gt;**Garbage Collector&lt;/a&gt;** o cara que poderíamos invocar via código para fazer isso, não tem como chamarmos ele via código Java, por que esse bonitinho é executado quando a JVM quer, da forma que ela quer é pronto, quem manda é ela rsrsr, o que podemos fazer é ela, atribuir null para uma para o objeto em questão, e retirar todas as referências que tenha para ele, dessa forma ele será elegível para a coleta, mas…. não há como saber quando ele realmente será coletado…&lt;/p&gt;

&lt;p&gt;Tem muito mais para se aprender sobre método construtor em java: sugiro uma lida na documentação -&amp;gt; &lt;a href="https://docs.oracle.com/javase/tutorial/reflect/member/ctor.html"&gt;https://docs.oracle.com/javase/tutorial/reflect/member/ctor.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fechou? Papo meio denso mas te espero na próxima.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>spring</category>
      <category>java</category>
      <category>constructors</category>
      <category>programming</category>
    </item>
    <item>
      <title>Básico efetivo sobre Coleções e Mapas com Java</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Wed, 09 Mar 2022 19:12:25 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/basico-efetivo-sobre-colecoes-e-mapas-com-java-4bnc</link>
      <guid>https://dev.to/gabrielsantosba/basico-efetivo-sobre-colecoes-e-mapas-com-java-4bnc</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Básico efetivo sobre Coleções e Mapas com Java&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2560%2F1%2AkJuPMlHtla1OQ4kFAi-2Lw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2560%2F1%2AkJuPMlHtla1OQ4kFAi-2Lw.png" alt="Árvore, coleções e Mapas Java"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durante meu início como Dev Java me vi em situações onde precisei parar, voltar novamente a estudar para entender qual tipo de coleção Java usar, ou mesmo analisando códigos já feitos por outros devs, eu me perguntava por que usar um &lt;strong&gt;Map&lt;/strong&gt; aqui? Ou &lt;strong&gt;LinkedList&lt;/strong&gt; ali? doidera… rsrsr 🥺&lt;/p&gt;

&lt;p&gt;Para completar, andei fazendo umas entrevistas e recebi perguntas bastante interessantes acerca do assunto de coleções em Java. Vamos falar sobre aqui…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vem comigo, vamos descer essa ladeira. rsrsrs (&lt;em&gt;sem freio&lt;/em&gt;)🤣&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A2PavT1qQPHsjGMLP" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A2PavT1qQPHsjGMLP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vamos começar a entender a Diferença entre List, Set e Map.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;List&lt;/strong&gt; essa interface que é uma subinterface da interface de &lt;em&gt;Collection&lt;/em&gt; (aaa não confunda &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html" rel="noopener noreferrer"&gt;Collection&lt;/a&gt; com &lt;a href="https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html" rel="noopener noreferrer"&gt;Collections&lt;/a&gt;&lt;strong&gt;) tem 3 implementações **(ArrayList, Vector, LinkedList)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom vamos lá.&lt;/strong&gt; Seus métodos são baseados em índice para as principais operações, buscar, inserir, atualizar e excluir elementos, &lt;strong&gt;suave até aqui…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mais algumas características do List.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Importante, essa interface mantém a ordem de inserção, ou seja, da forma que foi inserido será mostrado, não tem ordenação, (do jeito que entra sai rsrs), mas isso pode ser feito com a classe &lt;em&gt;Collections&lt;/em&gt; que tem alguns métodos estáticos prontos, entre eles o método “sort”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A busca de um elemento é rápida&lt;/strong&gt; no &lt;strong&gt;List&lt;/strong&gt;, por ex: usando o &lt;strong&gt;ArrayList&lt;/strong&gt;, mas se precisar fazer grandes volumes de inserções e exclusões nesse caso essa interface não é a melhor opção, pois nesses dois últimos pontos perde em performance, (&lt;em&gt;tem umas sacadas que podem ser feitas para melhorar essa performance), mas&lt;/em&gt; por hora vamos entender que essa implementação não é a melhor para essa finalidade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outra sacada&lt;/strong&gt; é que nessa interface as inserções, exclusões são em linha, &lt;strong&gt;ou seja&lt;/strong&gt;, lineares, o tempo cresce com o aumento da estrutura da lista, (bugou? rsrs😅), calma na alma, vou te explicar…&lt;/p&gt;

&lt;p&gt;Resumindo conforme a lista vai aumentando, o tempo que o código que manipula essa lista gasta para operações de exclusão por ex, aumenta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“A mais para que isso é importante saber?&lt;/strong&gt; Pensa comigo com esse entendimento você saberá definir, (ou pelo menos já terá uma ideia) se em determinado contexto é interessante usar a interface &lt;strong&gt;List&lt;/strong&gt; e uma de suas implementações ou outro tipo de coleção com Java, ou mesmo pode ser quando uma tarefa chegue para você ou em uma entrevista para uma vaga, inclusive eu recebi uma pergunta bem interessante quanto a utilização de &lt;strong&gt;ArrayList&lt;/strong&gt; em uma entrevista para uma empresa internacional, dá, &lt;a href="https://gab-arteinfo.medium.com/perguntas-de-entrevistas-para-desenvolvedor-java-j%C3%BAnior-57a29192aa8b?source=your_stories_page----------------------------------------" rel="noopener noreferrer"&gt;uma olhada nesse artigo, aqui falo sobre isso no &lt;/a&gt;final, &lt;em&gt;inclusive está nele a “sacada da sacada” referente a performance que citei acima). rsrsrs 🥳&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AvXwgSJaXMBfqItg4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AvXwgSJaXMBfqItg4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uso recomendado do List&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A interface &lt;strong&gt;List&lt;/strong&gt; é top quando o contexto em questão necessita fazer acesso rápido aos elementos dessa lista.&lt;/p&gt;

&lt;p&gt;Um exemplo, &lt;strong&gt;deixa eu pensar…&lt;/strong&gt; pensei… Tipo assim, uma implementação que você precise criar uma vitrine, catálogo ou algo assim, com algum objeto, sei lá, filmes ou livros, e cada &lt;strong&gt;elemento&lt;/strong&gt; inserido receba um número identificador(ID) sequencial, esse número será usado para acessar esses elementos partindo do início, que como sabemos é zero, nesse caso o uso do &lt;strong&gt;ArrayList&lt;/strong&gt; é excelente, pois os seus métodos são baseados em índice e isso facilita muito na procura. Manja? rsrsr✌️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set,&lt;/strong&gt; diferentemente do &lt;strong&gt;List,&lt;/strong&gt; a interface &lt;strong&gt;Set&lt;/strong&gt; não permite elementos duplicados. As suas implementações são(&lt;strong&gt;HashSet&lt;/strong&gt;, &lt;strong&gt;LinkedHashSet&lt;/strong&gt;, &lt;strong&gt;TreeSet&lt;/strong&gt;) tem também a interface &lt;strong&gt;SortedSet&lt;/strong&gt;, que estende &lt;strong&gt;Set&lt;/strong&gt;, essa tem a função de fornecer método para a classificação natural dos elementos, como, por exemplo: ordem alfabética.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mais algumas características da interface Set.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vou falar da implementação mais usada dessa interface que a &lt;strong&gt;HashSet,&lt;/strong&gt; usada em contextos onde não se pode ter elementos duplicados na lista, é não mantêm a ordem em que os elementos foram inseridos&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Não tem método get() para recuperar elementos a partir de índice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma coisa que não citei referente ao &lt;strong&gt;ArrayList&lt;/strong&gt; da interface &lt;strong&gt;List&lt;/strong&gt;, essa fornece método &lt;strong&gt;get()&lt;/strong&gt; para chegarmos em um elemento a partir do índice, tipo get(1) mas o &lt;strong&gt;Set&lt;/strong&gt; não.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uso recomendado do Set&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa coleção é boa em contextos onde a implementação define que os elementos devem ser únicos, aaaa e a ordem não for relevante. Já usei algumas vezes em situações onde eu precisei limpar duplicados de uma lista que já havia sido instanciada com &lt;strong&gt;ArrayList, então adiciono todos os elementos a nova lista **Set&lt;/strong&gt; com o método &lt;strong&gt;addAll()&lt;/strong&gt;, na sequência limpo a lista que foi gerada com &lt;strong&gt;ArrayList,&lt;/strong&gt; usando o método &lt;strong&gt;clear(),&lt;/strong&gt; na sequência adiciono novamente todos os elementos a essa lista, claro tem alguns “&lt;strong&gt;&lt;em&gt;poremzinhos&lt;/em&gt;&lt;/strong&gt;” 🥲 rsrsrs, mas deixemos eles para outra hora. Sim, essa “&lt;em&gt;gambis” *que citei aí foi usando JDK´s abaixo do 8 tá? *Não me jogue pedra por favor rsrsr&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A-GZEySb5Mek-dIB5" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A-GZEySb5Mek-dIB5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Map&lt;/strong&gt; é importante saber que os Mapas em Java não são considerados coleções, tanto que a interface map é designada como uma segunda árvore no hall das &lt;strong&gt;Collection´s&lt;/strong&gt;, as suas classes e interface não provém de &lt;strong&gt;Collection,&lt;/strong&gt; sua interface principal e Map mesmo rsrs, como as coleções que falamos acima, o map também tem suas implementações são: &lt;strong&gt;HashMap ,&lt;a href="https://acervolima.com/hashtable-em-java/" rel="noopener noreferrer"&gt; &lt;/a&gt;HashTable , TreeMap , ConcurrentHashMap e LinkedHashMap&lt;/strong&gt;, mas, vem comigo, vamos ver suas características principais e entender melhor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vamos lá,&lt;/strong&gt; fato é que, mesmo os mapas em java não sendo considerados como coleções, ainda assim meio que são trabalhados como as coleções.&lt;/p&gt;

&lt;p&gt;Sua principal característica é &lt;strong&gt;mapear chaves para valores.&lt;/strong&gt; E tipo assim oh! Cada elemento que compõe esse mapa tem dois recursos(objetos), são eles, uma chave e um valor. Na declaração do mapa você precisa declarar via &lt;a href="https://docs.oracle.com/javase/tutorial/java/generics/types.html" rel="noopener noreferrer"&gt;generics&lt;/a&gt; os tipos de parâmetros, sei lá, String(chave) String(valor), poderia ser quaisquer outros tipos ta? Dessa forma na hora de passar os argumentos para esse mapa você então vai declarar o argumento referente a chave e o argumento referente ao valor dessa chave, só não esquece que, valores podem até ser repetidos, mas chave de jeito nenhum, &lt;em&gt;never&lt;/em&gt;.😖💩&lt;/p&gt;

&lt;p&gt;Assim como a interface &lt;strong&gt;Set, Map,&lt;/strong&gt; também não mantém a posição de inserção, ou seja, pode acontecer a inserção em uma posição, mas quando for mostrado, recuperado, aparecer em outra posição. Se você se ligou, essa característica do &lt;strong&gt;Set&lt;/strong&gt; e &lt;strong&gt;Map&lt;/strong&gt; difere do &lt;strong&gt;List&lt;/strong&gt;. &lt;em&gt;Se ligou né?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Essa interface também é baseada em &lt;a href="https://pt.stackoverflow.com/questions/129605/qual-melhor-forma-de-se-fazer-uma-tabela-de-espalhamento" rel="noopener noreferrer"&gt;**tabela de espalhamento,&lt;/a&gt;** é permite chaves e valores null.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uso recomendado do Map&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O uso da interface Map é bom quando o seu contexto da aplicação indica que a ordenação não é importante com uma implementação que seja necessária registrar uma chave para cada valor específico Key(chave), agora se você decidir mudar uma implementação que já usava &lt;strong&gt;Set&lt;/strong&gt; ou &lt;strong&gt;List&lt;/strong&gt; para &lt;strong&gt;Map,&lt;/strong&gt; pensa bem e veja o trampo que vai te custar, pois, os métodos dessas duas interfaces não poderão ser mais usados, pois o &lt;strong&gt;Map&lt;/strong&gt; tem seus próprios métodos que diferem dos usados em coleções do tipo &lt;strong&gt;Set&lt;/strong&gt; ou &lt;strong&gt;List&lt;/strong&gt;. Certa vez precisei usar a interface &lt;strong&gt;Map&lt;/strong&gt; em um contexto onde eu precisava passar para um &lt;a href="https://blog.se.com/br/ecostruxure/2019/05/15/thin-clients-e-web-clients-qual-a-diferenca/" rel="noopener noreferrer"&gt;Web Client&lt;/a&gt; os dados de configuração de acesso a uma &lt;strong&gt;Api&lt;/strong&gt;, estava usando ao Apache Http na época, então tinha que passar, token, usuário senha, e um outro código lá que esqueci agora, então passava(chave) user, (valor) dados do usuário, e assim por diante, um outro exemplo seria sei lá um código que precise buscar um aluno passando o nome, então a chave seria o nome, captou?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Não confunda a interface Collection com a classe Collections&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Quando eu vi na faculdade sobre &lt;strong&gt;Collections&lt;/strong&gt; lembro que fiquei meio &lt;em&gt;bugado&lt;/em&gt; sobre quem é quem, se você ficou também, vem comigo, esclarecer isso agora, primeiro &lt;strong&gt;Collections&lt;/strong&gt; é uma classe utilitária usada para realizar algumas operações em uma &lt;strong&gt;Collection, bugou mais ainda?&lt;/strong&gt; rsrsr E tipo assim, declarei um &lt;strong&gt;ArrayList&lt;/strong&gt;, beleza, agora preciso ordenar a lista que criei em questão, iai? A interface &lt;strong&gt;List&lt;/strong&gt; que estende de &lt;strong&gt;Collection&lt;/strong&gt; não faz isso, aí que entra a &lt;strong&gt;Collections,&lt;/strong&gt; ela tem o método “sort” usado para fazer ordenação em coleções em Java, tem muitos outros como, por exemplo, “shuffle” que bagunça tudo rsrsr(embaralha), “reverse” usado para trocar a ordem, tem também os irmãos “max” e “min” para encontrar valores maiores e menores, e etc, tem mais métodos ainda nessa classe utilitária, &lt;strong&gt;sacou agora?&lt;/strong&gt; &lt;strong&gt;Não?&lt;/strong&gt; Então pega esse resumo aqui embaixo.&lt;/p&gt;

&lt;p&gt;Resumindo, &lt;strong&gt;Collection&lt;/strong&gt; é tipo assim a mãezona de todas as coleções com Java, ela é a interface que as classes que a implementam tem que seguir.🤭&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2Al5IyDHUX4BjFerWl" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2Al5IyDHUX4BjFerWl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Como saber qual interface usar na aplicação que estou fazendo ou aplicando manutenção com Java?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Bom o primeiro passo você já deu que foi procurar entender melhor sobre as características de cada uma das interfaces de coleções e suas implementações, outra parada importante para se dar bem no uso de coleções com Java e entender sobre &lt;a href="https://blog.algaworks.com/entendendo-o-equals-e-hashcode/" rel="noopener noreferrer"&gt;hashcode() e equals()&lt;/a&gt; e porquê? 😏&lt;/p&gt;

&lt;p&gt;Bom, por exemplo, se for usar um &lt;strong&gt;Set&lt;/strong&gt; da vida, tudo bem não permite duplicados aprendemos mais acima, mas você precisa definir a partir de qual atributo essa interface deve se basear para retirar duplicados, e para isso é preciso definir quem vai implementar a comparação para que seja possível a descoberta desses valores iguais, saber usar também &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html" rel="noopener noreferrer"&gt;Comparable&lt;/a&gt; e &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html" rel="noopener noreferrer"&gt;Comparator&lt;/a&gt; pode ser muito útil no uso com Coleções com Java, de forma geral, é necessário mesmo entender o contexto da implementação em questão e definir qual interface usar, pois, como já falamos, uma interface permite duplicados, outra não, outra o acesso aos dados e mais rápido a partir de um índice o caso do &lt;em&gt;List,&lt;/em&gt; em casos de tabelas hash o list perde em rapidez para que os dados sejam encontrados, mas novamente precisa entender sobre hashcode() e equals() para saber o porquê.&lt;/p&gt;

&lt;p&gt;Um conselho para vida e: &lt;strong&gt;tenha cuidado com que tipo de coleção usar principalmente naqueles casos que se tem muitos relacionamentos entre as entidades, principalmente os de tipo (Lazy), podem acontecer uns comportamentos inesperados nesses casos,&lt;/strong&gt; e assim vai, existem outras interfaces que não falei aqui, mas vou deixar o link para você dar uma aprofundada, pois apesar desse artigo ter sido feito com entusiasmo ele é básico e mais conceitual, fechou presença? rsrsr então nos vemos no próximo.&lt;/p&gt;

&lt;h3&gt;
  
  
  See you around.🖖
&lt;/h3&gt;

</description>
      <category>java</category>
      <category>arraylist</category>
      <category>beginners</category>
      <category>collections</category>
    </item>
    <item>
      <title>Perguntas de Entrevistas para Desenvolvedor Java Júnior.</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Thu, 03 Mar 2022 16:46:31 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/perguntas-de-entrevistas-para-desenvolvedor-java-junior-7lp</link>
      <guid>https://dev.to/gabrielsantosba/perguntas-de-entrevistas-para-desenvolvedor-java-junior-7lp</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Perguntas de Entrevistas para Desenvolvedor Java Júnior.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Bom pensando em ajudar alguns colegas fiz esse compilado onde trago um pouco da minha experiência adquirida ao longo de algumas entrevistas para vagas do tipo desenvolvedor júnior **JAVA&lt;/em&gt;* que participei, bora la…*&lt;/p&gt;

&lt;p&gt;Essas entrevistas aconteceram por volta de julho/2021, a dezembro desse mesmo ano, pude perceber um certo padrão nas perguntas feitas pelas equipes técnicas, não vou falar aqui muito da parte de recursos humanos RH, mas ainda assim vou deixar algumas dicas, &lt;strong&gt;por ex:&lt;/strong&gt; sobre quando te perguntam, fale sobre você, fale sobre como você entrou nesse mundo da tecnologia, essas coisas, mas o foco aqui será às perguntas técnicas mesmo, aquela que os Tech leads, Gerentes de projetos e etc fazem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bom, mas se liga, essas foram minhas experiências, pode ser que as suas sejam um pouco diferentes, mas tenho certeza que esse artigo irá te dar bons conhecimentos, let’s go.&lt;/em&gt;&lt;/strong&gt;😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9w4XrFLqHiNf07a3tvQVCA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9w4XrFLqHiNf07a3tvQVCA.jpeg" alt="Entrevista"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fale sobre sua história na tecnologia(T.I)&lt;/strong&gt;😕&lt;/p&gt;

&lt;p&gt;Bom essa pergunta é clássica de Recursos Humanos(RH), aconteceu em quase todos os processos seletivos que participei, até mesmo nos internacionais, primeira coisa que precisamos entender, todos nós temos uma história e temos que ser verdadeiros ao contar sobre nossa própria história, seja ela triste ou mesmo que você pense que não tenha graça, é importante saber que do outro lado existe uma pessoa que muitas vezes já ouviu várias histórias não adianta tentar imitar a história de outro alguém ou mesmo querer adotar a técnica de se fazer de sofrido(a), muitas vezes os profissionais de RH já sabem decifrar esses padrões e não vão dar pontos positivos para quem adota esse caminho, pelo contrário, como diz o ditado, “o tiro pode sair pela culatra”(risos), além disso, precisamos ser fiéis a nossas marcas, nossas histórias, não importa qual seja! Já existem muitas cópias nesse mundo de T.I, &lt;strong&gt;sejamos autênticos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Precisamos saber contar a nossa história.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outro dia vi uma entrevista do &lt;strong&gt;Luciano Santos&lt;/strong&gt; autor do livro (&lt;strong&gt;Seja Egoísta com Sua Carreira&lt;/strong&gt; na tv. Ele dizia mais ou menos assim, “todos temos uma história precisamos apenas saber contar a nossa história, e isso pode ser treinado”, achei essa declaração fascinante, pois me lembrei que eu a cada processo seletivo sabia contar melhor minha história, contava melhor cada momento, acontecimento importante, foi ficando cada vez mais coerente, fato é que às vezes não sabemos contar os fatos temporalmente de forma correta e isso causa confusão para quem ouve, mas treinando conseguimos ter uma visão do que estamos falando com base na época que aquilo aconteceu, qual eram os seus sentimentos naquele momento, etc. Treine a forma de contar sua história!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Aproveite e pense, quais acontecimentos você quer escrever nos próximos capítulos da sua história?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEe7AltNTIHCUfLZ82Zf1vg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEe7AltNTIHCUfLZ82Zf1vg.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom, mas vamos às perguntas técnicas.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A primeira é bem simples, vem da cartilha primária do Java: &lt;strong&gt;Qual a diferença entre a comparação com == e o equals?&lt;/strong&gt; Legal que muitas vezes sabemos usar, usamos até inconsciente muito bem, mas explicar para alguém que sabemos que está nos avaliando é difícil em?&lt;/p&gt;

&lt;p&gt;Parece que o entrevistador está com um revólver apontado para você e dizendo: ou responde certo, ou já era… &lt;strong&gt;rsrsr&lt;/strong&gt; 😂&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas essa é simples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Um exemplo com Strings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Resumindo &lt;strong&gt;equals&lt;/strong&gt; valida o “valor” o que há na variável independente se for instâncias iguais ou diferentes de String, já o &lt;strong&gt;==&lt;/strong&gt;compara o valor de duas referências a objetos para verificar se elas se referem à mesma instância String&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom ponto para nós… Mas pegando esse exemplo com as Strings acima, sabe explicar o porquê disso tudo?&lt;/strong&gt;😕&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Em uma das entrevistas um entrevistador me questionou sobre isso,&lt;/strong&gt; bom como já sabemos, String em Java é uma classe, diferente de outras linguagens que String é do tipo primitivo, com isso entendemos que os objetos (String) criados seguem o mesmo padrão de armazenamento na memória, mesmo sendo variáveis Strings de outras classes. O tal do &lt;a href="https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html" rel="noopener noreferrer"&gt;heap&lt;/a&gt;… &lt;strong&gt;as variáveis do tipo String referenciam essas áreas da memória no **heap&lt;/strong&gt; onde ficam os objetos, e nesse exemplo as referências do local de armazenamento serão iguais, &lt;a href="https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html" rel="noopener noreferrer"&gt;*vale aprofundar nesse &lt;/a&gt;* assunto, mas por hora basta sabermos disso, se ligou? Não? Então morde o dedo. risos&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Uma pergunta simples, mas que já gera um papo bom em?&lt;/em&gt;&lt;/strong&gt;😏&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fale sobre as camadas do padrão MVC, o que cada letra quer dizer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bom simples falar sobre essas siglas, Model (modelo) View (visão) e Controller (Controle) que facilita a troca de informações entre a interface do usuário aos dados no banco e tal tal tal, já sabemos de tudo isso, mas aí começam a profundar as perguntas para testar seu nível de profundidade em cada assunto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por ex:&lt;/strong&gt;* onde se inicia todo esse processo no padrão MVC?* &lt;strong&gt;Claro sabemos que:&lt;/strong&gt; começa com o usuário na camada View, enviando uma requisição, aí o controlador(Controller) recebe essa informação e envia para o Model que fica responsável tratar esses dados, validar as regras de negócio e transmitir uma resposta, o controlador novamente envia a camada de visão que mostra ao usuário a resposta(response), mas vem cá, &lt;strong&gt;será que podemos adicionar mais uma camada nesse padrão MVC?&lt;/strong&gt; Essa também foi uma pergunta que vi sendo feita a mim em várias das entrevistas, sabemos que adicionar mais camadas pode trazer mais complexidade a aplicação, mas sim podemos, afinal hoje temos muito a utilização de no mínimo mais uma camada &lt;strong&gt;por ex:&lt;/strong&gt; a camada &lt;strong&gt;service&lt;/strong&gt;, que ajuda justamente na organização separando regras de negócio.&lt;/p&gt;

&lt;p&gt;Essas foram perguntas que recebi dos entrevistadores referente a esse assunto. Só mais uma coisa, &lt;strong&gt;como podemos utilizar o padrão MVC com Spring?&lt;/strong&gt; Bom responde ai o entrevistador tá esperando. risos&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quais os módulos do Spring você conhece?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outra perguntinha bastante feita, no geral eu sempre procurei conhecer bastante sobre os módulos do Spring, afinal essa é uma de suas principais características, ser modular, então os módulos que eu entendo serem principais para quem tá numa entrevista júnior são, o Spring WEB, Spring Data JPA &lt;em&gt;**nossa uma mão na roda, *&lt;/em&gt;&lt;em&gt;Spring Boot,&lt;/em&gt;** ***Spring Security e Spring Batch, esse último não muito, mas os outros considero essenciais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para não estender muito vou deixar apenas o tópico de outras perguntas muito comuns..&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fale sobre o Spring Boot, o que ele traz de benefícios para um projeto?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quais as vantagens de usar o Spring Data?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O que você entende sobre &lt;strong&gt;REST?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pensando em uma API Rest com Spring em qual camada você colocaria regras de negócio? (&lt;strong&gt;Model&lt;/strong&gt;, &lt;strong&gt;CController, Repository&lt;/strong&gt;, &lt;strong&gt;Service&lt;/strong&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Descrever sobre polimorfismo e herança.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O que o Inner Join faz em se tratando de SQL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fale sobre o que entende de CI/CD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Essa é meio que obrigação, &lt;strong&gt;o que você sabe sobre uso do GIT? (commit,&lt;/strong&gt; &lt;strong&gt;clonar, merge&lt;/strong&gt;) enfim isso não tem para onde correr é obrigatório saber em qualquer nível de técnico.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Perguntas de algumas entrevistas Internacionais&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para ser sincero foram apenas 2, pois o meu nível de inglês é bem básico então somente 2 empresas me aceitaram no processo seletivo, uma para Portugal e outra para atuar remoto mesmo aqui no Brasil com possibilidade de intercâmbio em uma de suas sedes na Europa.&lt;/p&gt;

&lt;p&gt;Nessas entrevistas internacionais fui questionado sobre coisas mais profundas no que tange estrutura de dados e etc, lembro que a empresa Portuguesa me disse que não sabia muito bem sobre essa diferença de nível que temos aqui no Brasil, Júnior, Pleno e Sênior, isso já me deixou meio em *&lt;em&gt;alerta, *&lt;/em&gt;&lt;em&gt;pensei eles vão perguntar coisas profundas,&lt;/em&gt; muitos risos(de nervoso), isso me deixou animado, mesmo sabendo que eu poderia sair da entrevista com a sensação de ter tomado um soco no estômago rsrsr.&lt;/p&gt;

&lt;p&gt;Esses processos internacionais tiveram também algumas dessas perguntas que coloquei acima, porém com um ++.&lt;/p&gt;

&lt;p&gt;Por ex: &lt;strong&gt;Falar sobre as coleções em Java.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Citar diferenças entre usar o &lt;strong&gt;ArrayList, LinkedList, HashSet?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nesse ponto sugiro uma boa estudada, pois varia as características de tipo de implementação entre as listas, você verá que tudo depende da necessidade de implementação dessa lista, confesso que fiquei meio desconfortável, pois conforme respondia, outras perguntas surgiam pedindo para separar coleções de listas, mapas e etc, talvez não tenha me saído muito bem nessas perguntas, apesar de que desses 2 processos eu acabei passando em 1, e outro até hoje to esperando retorno rsrsrs.🤣&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Me recordo de uma pergunta que foi bem interessante na época, eu guardei para estudar,&lt;/strong&gt; foi a seguinte:&lt;/p&gt;

&lt;p&gt;Tenho um &lt;strong&gt;ArrayList&lt;/strong&gt; que sei que vai crescer até chegar a 1000 o tamanho, esses valores serão inseridos na base de dados, logo na hora da instanciação da lista existe uma forma de fazer com que isso fique fácil de ser trabalhado pela &lt;a href="https://docs.oracle.com/javase/9/vm/java-virtual-machine-technology-overview.htm#JSJVM-GUID-982B244A-9B01-479A-8651-CB6475019281" rel="noopener noreferrer"&gt;JVM(máquina virtual Java)&lt;/a&gt;? Já que sabemos o tamanho máximo que pode chegar essa lista.&lt;/p&gt;

&lt;p&gt;Bom eu não sabia ter a possibilidade de já definir na criação de um List o tamanho que a mesma pode chegar, foi interessante que após isso eu fui estudar sobre o assunto, e a &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; me ensinou sobre isso muitas coisas mas, aqui tá um ponto legal das entrevistas, interessante também por isso, são vários novos assuntos que o mercado está pedindo que mesmo que você não passe, gera conhecimento para a próxima, sem falar no aprendizado obtido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom, mas o que aprendi sobre isso foi que…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma lista pode ter alguns tipos de implementação, como falei acima, o que diz qual implementação usar e a sua vontade rsrsr(brincadeira), na verdade, e a necessidade mesmo, tem casos onde não podemos ter elementos duplicados, outros caso queremos mais performance na pesquisa, outros casos e mais importante performance nas inserções, como ficará na memória os dados, enfim cada caso é um caso, etc.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;ArrayList&lt;/strong&gt;, ele cria um array padrão daquele objeto em questão(não consegui ver na documentação se já é gerado um tamanho padrão), mas já li em algum canto que é inicialmente criado com tamanho 10.&lt;/p&gt;

&lt;p&gt;Mas sim, em um &lt;strong&gt;ArrayList&lt;/strong&gt; é possível especificar o tamanho inicial da lista usando o construtor que recebe um inteiro que indica essa capacidade, a documentação se referência como &lt;strong&gt;minCapacity&lt;/strong&gt;, isso traz um benefício ao fluxo dessa lista, pois vai reduzir a quantidade de **realocação incremental, **ou seja, não será necessário ficar incrementando novo tamanho a lista a cada inserção.&lt;/p&gt;

&lt;p&gt;Ficaria assim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;List lista = new ArrayList(40);&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tendeu?&lt;/strong&gt; É importante sim umas entrevistas, e uma forma de se medir em relação ao mercado e também aprender mais, mas claro isso deve ser feito com consciência, não acho justo sairmos fazendo entrevistas em um monte de lugares sem a intenção de talvez caso ache válido aceitar a vaga, no meu caso estava sim, pensando em uma mudança profissional e passei a pesquisar algumas vagas aceitar alguns convites, passei em muitos desses processos, mas por N motivos acabei não mudando de empresa, mas o aprendizado ficou… Outra coisa caso você não passe, calma sem desespero nem sempre o entrevistador consegue avaliar o real potencial de um candidato, então reavalie-se pratique o autoconhecimento com isso as chances de passar na próxima já aumentam em no mínimo 40%, tenha fé em Deus, “tenha fé porque fé até no lixão nasce flor”. (Racionais MC´s).&lt;/p&gt;

&lt;p&gt;Te desejo sucesso!🖖&lt;/p&gt;

</description>
      <category>java</category>
      <category>spring</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>JAX-WS. A Api “Coroa” do Java. Introdução ao Soap!</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Fri, 29 Oct 2021 21:01:32 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/jax-ws-a-api-coroa-do-java-introducao-ao-soap-1hed</link>
      <guid>https://dev.to/gabrielsantosba/jax-ws-a-api-coroa-do-java-introducao-ao-soap-1hed</guid>
      <description>&lt;p&gt;&lt;strong&gt;Como sempre, vamos voltar um pouco às origens, mas antes porque decidi escrever um artigo sobre tal tecnologia?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Percebi que alguns colegas que começaram a pouco tempo na área como dev Java em algumas entrevistas, vez ou outra são pegos e perdem pontos quando são perguntados sobre &lt;strong&gt;SOAP&lt;/strong&gt; e etc, como já vivenciei essa tecnologia entendo que para facilitar o entendimento o primeiro passo seria falar sobre alguns caras importantes desse meio antes de chegar no SOAP propriamente dito. Então logo de início iremos falar sobre &lt;strong&gt;JAX-WS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Lembrando que esse artigo antecede o próximo a ser escrito sobre uma introdução com implementação do SOAP em uma aplicação.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Outra coisinha, minha intenção com os artigos que escrevo e mostrar como funciona tal tecnologia, suas bases e etc, aprender a lidar mesmo nós só vamos no dia a dia, por mais que o tutorial seja hiper mega &lt;strong&gt;Step By Step&lt;/strong&gt;. De Acordo? &lt;strong&gt;Então Bora&lt;/strong&gt;!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Conta comigo 1,2,3 o que significa &lt;strong&gt;JAX-WS?&lt;/strong&gt; Simples, &lt;strong&gt;Java API para XML Web Services&lt;/strong&gt; trata-se de uma tecnologia para construir &lt;strong&gt;Web Service&lt;/strong&gt;, define regras para a comunicação com a implementação &lt;strong&gt;SOAP&lt;/strong&gt; por exemplo, essa e feita via arquivo XML, mais uma coisa, essa tecnologia fornece varias anotações que facilitam no desenvolvimento. &lt;em&gt;Fácil não?&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Por que Nasceu?&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Então la atrás há muito tempo, quando os primeiros Web Services nasceram as bibliotecas para tal serviço ficava a cargo dos servidores de aplicação, isso significa ser necessário conhecimento nos servidores. Ai já viu, a humanidade sempre buscando facilitar, eis que com a chegada do Java 1.6 novas bibliotecas foram criadas para &lt;strong&gt;Web Services&lt;/strong&gt; e embutidas na JRE, ai começam a ganhar popularidade os Web Services com &lt;strong&gt;SOAP&lt;/strong&gt;, aqui que entra o &lt;strong&gt;JAX-WS&lt;/strong&gt;, esse carinha se trata, na verdade, de uma especificação para Web Services, a comissão do Java sempre procurou padronizar as coisas para não virar a casa da mãe Joana, ai que surge o &lt;strong&gt;JAX-WS&lt;/strong&gt; para especificar um padrão a ser seguindo na construção de &lt;strong&gt;Web Services&lt;/strong&gt;, tipo com o que aconteceu com a &lt;strong&gt;JPA&lt;/strong&gt; lá no início, outra especificação que surgiu para padronizar as suas implementações.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2AOL0iAxL8P7BHyy5y" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2AOL0iAxL8P7BHyy5y" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas Antes, Vamos Sanar de Vez a Dúvida entre &lt;em&gt;Web Service&lt;/em&gt; e &lt;em&gt;API&lt;/em&gt;.
&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Application Programming Interface&lt;/strong&gt; ou comumente falada API, é uma interface que conecta dois programas, realizando a comunicação entre eles e ditando (especificando) como dois ‘softwares’ em questão devem se conversar(integrar). Então esse e o principal (não o único) sentido para definição do termo API, e por meio dessa ponte que as empresas podem utilizar serviços terceirizados e trocar dados.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5svt2q0oviy7g4p6mqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5svt2q0oviy7g4p6mqt.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Já os &lt;strong&gt;Web Services&lt;/strong&gt; se comunicam através de redes e podem ser combinados para a execução de operações complexas, utilizando principalmente (&lt;strong&gt;XML, SOAP, HTTP, WSDL&lt;/strong&gt; etc…) com o intuito de interagir com outros softwares da Web trocando dados.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2AElz2lo-s94fzv90V" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2AElz2lo-s94fzv90V" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A mesma coisa que API?&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Rolou um bug ai?&lt;/strong&gt;&lt;/em&gt; Se vc pensou que… Então todo Web Service é considerado uma API, sim você acertou! Web Services são os caras que vieram antes desse modelo de integrações que temos hoje, o nome meio que mudou hoje falamos em Web API´s, mas não viaje não, por que tenho que ressaltar uma parada importante que, nem toda API pode ser considerada como um Web Service.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Mais ai, qual a diff?&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Tanto APIs quanto &lt;strong&gt;Web Services&lt;/strong&gt; podem trabalhar em máquinas ou redes, mas existem alguns pontos diferentes para cada um. Vamos la…&lt;/p&gt;

&lt;p&gt;Com as APIs, o cliente que consome os dados não precisa saber qual método chamar no servidor, o próprio sistema que recebe essa chamada já sabe o que fazer, e já encaminha para o devido processamento. Além disso, as APIs são consideradas mais flexíveis porque os sistemas do cliente e do servidor podem se comunicar mesmo que cada um utilize linguagens diferentes na implementação, com Web Services também dá, mas tem lá suas complexidades há mais, pois temos na comunicação do Web Service com Soap um contrato o WSDL, esse geralmente escrito e definido em uma linguagem(no nosso caso aqui Java) e o cliente precisa desse contrato para implementar a integração do seu lado, dai surge a complexidade com linguagens diferentes.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Também deve-se considerar o esforço empregado para que os dados sejam empacotados e desempacotados, a tal da &lt;br&gt;
&lt;br&gt;&lt;a href="https://www.oracle.com/br/technical-resources/articles/java/serialversionuid.html" rel="noopener noreferrer"&gt;&lt;strong&gt;serialização/desserialização&lt;/strong&gt;&lt;/a&gt; em uma API e em um, Web Service.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2A9jphvSoX-inOqx8x" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1000%2F0%2A9jphvSoX-inOqx8x" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; Basicamente, a grosso modo e nosso contexto aqui, a &lt;strong&gt;serialização&lt;/strong&gt; é o processo onde é feita a conversão da estrutura de dados para ser possível compartilhar esses dados… no meu &lt;em&gt;“baianês”&lt;/em&gt;, &lt;strong&gt;se ligue mermão&lt;/strong&gt;, e o que acontece quando enviamos um objeto e nossa aplicação converte para JSON, XML ou o inverso.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Quando a &lt;strong&gt;serialização&lt;/strong&gt; e realizada por uma API, esse processo é menos trabalhoso, por isso as APIs são ótimas em fluxos onde envolvem dispositivos móveis.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Já os parrudos &lt;strong&gt;Web Services&lt;/strong&gt; funciona de maneira mais eficiente quando a solução em questão acontece de máquina para máquina. Como hoje em dia tudo e Web e Mobile entendemos então o porquê da popularização das API´s. Pois, como vimos aqui essas bonitinhas trabalham melhor no nível de software para software.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Agora Vamos Voltar Para o JAX-WS…
&lt;/h5&gt;

&lt;h3&gt;
  
  
  Você pode estar se perguntando, como funciona então esse tal de &lt;strong&gt;SOAP&lt;/strong&gt;?
&lt;/h3&gt;

&lt;p&gt;Bom como falei antes esse artigo antecede o próximo artigo onde iremos implementar um &lt;strong&gt;Web Service&lt;/strong&gt; com &lt;strong&gt;SOAP&lt;/strong&gt;, mas vamos falar a grosso modo como seria esse funcionamento até para te introduzir no assunto.&lt;/p&gt;

&lt;p&gt;Tipo assim, uma requisição a uma operação do Web Service é representada por um protocolo baseado em XML, nesse caso o SOAP. O &lt;a href="https://dev.to/gabrielsantosba/implementando-um-servico-com-soap-http-e-xml-2j9o"&gt;&lt;strong&gt;SOAP&lt;/strong&gt;&lt;/a&gt; define a estrutura do envelope, essas requests e responses são transmitidas como mensagens SOAP (arquivos XML) sobre HTTP, (sim o HTTP está nesse meio), por baixo dos panos tem mais umas techs que funcionam ali a ex em alguns casos o JAX-B, responsável por converter objeto em XML e o inverso também, ou seja, empacota e desempacotam, a tal da desserialização e serialização que falamos acima, fazendo uma analogia ao Spring MVC seria como o que a biblioteca Jackson faz. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bom deu para entender não e? Se não deu fica tranquilo o próximo post sobre &lt;a href="https://dev.to/gabrielsantosba/implementando-um-servico-com-soap-http-e-xml-2j9o"&gt;SOAP ta aqui.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  E o Tal do Jax-RS, onde entra nessa história toda?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/javaee/7/api/javax/ws/rs/package-summary.html" rel="noopener noreferrer"&gt;&lt;strong&gt;JAX-RS&lt;/strong&gt;&lt;/a&gt; — API Java para Web Services RESTful. Meio que a modernização do &lt;strong&gt;Jax-WS&lt;/strong&gt; os serviços da web, são representados como recursos e podem lidos por &lt;a href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier" rel="noopener noreferrer"&gt;&lt;strong&gt;URI&lt;/strong&gt; (Uniform Resource Identifiers)&lt;/a&gt;. A chamada remota, é representada como uma solicitação HTTP direta, não como o exemplo que falamos acima, onde tinha o &lt;strong&gt;SOAP&lt;/strong&gt; chamando HTTP por baixo, outra diferença e que o Jax-WS precisa de um arquivo &lt;strong&gt;WSDL&lt;/strong&gt; para gerar código executável que os clientes usam para chamar o Web Service, mais uma coisinha o Jax-RS também e mais flexível, pode usar vários tipos MIME diferentes . Muito usado na conversação de dados XML ou troca de dados JSON (JavaScript Object Notation) …&lt;/p&gt;

&lt;h4&gt;
  
  
  Agora Você Já Sabe Sobre a Especificação(JAX-WS), Vamos Colocar a Mão na Implementação(SOAP) e Implementar.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://dev.to/gabrielsantosba/implementando-um-servico-com-soap-http-e-xml-2j9o"&gt;&lt;strong&gt;Vamos ao próximo post. Me acompanhe…&lt;/strong&gt;&lt;/a&gt;    &lt;/p&gt;

</description>
      <category>java</category>
      <category>webservice</category>
      <category>jaxws</category>
      <category>api</category>
    </item>
    <item>
      <title>Implementando um Serviço com SOAP, (HTTP e XML).</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Fri, 29 Oct 2021 20:59:04 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/implementando-um-servico-com-soap-http-e-xml-2j9o</link>
      <guid>https://dev.to/gabrielsantosba/implementando-um-servico-com-soap-http-e-xml-2j9o</guid>
      <description>&lt;h2&gt;
  
  
  Implementando um Serviço com SOAP, (HTTP e XML).
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bom, já que estamos aqui que tal batermos um papo?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Então, lembrando que esse artigo curto e prático é uma extensão do artigo anterior onde iniciamos nossos trabalhos sobre “SOAP”, nele falamos mais sobre a especificação JAX-WS, volta um pouco a fita e caso não tenha lido volta lá pois é muito importante essa leitura antes de colocar a mão nessa implementação aqui com SOAP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2560%2F1%2AwP3_SRIkmtzwKMK0A1v8-g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2560%2F1%2AwP3_SRIkmtzwKMK0A1v8-g.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Let´s Go…&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AjQJp2ioJqWGJBd_y" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AjQJp2ioJqWGJBd_y"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simbora para os requisitos&lt;/strong&gt;, rsrsr…. O quêeeee?😱 Você não estava querendo colocar logo a mão no código sem saber dos requisitos correto? rsrsrs Esse é um vício de muitos de nós, inclusive meu, negligenciar os requisitos e partir logo para o “código”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; Já tenho uma aplicação simples feita na especificação &lt;strong&gt;Java EE&lt;/strong&gt;(geralmente é o padrão das aplicações que usam service soap), front bem simples com &lt;strong&gt;Primefaces&lt;/strong&gt;, mas isso não é importante, afinal vamos tratar de um serviço, essa aplicação está sendo deployada no middleware &lt;strong&gt;WildFly 20&lt;/strong&gt;, e bd &lt;strong&gt;PostgresSQL&lt;/strong&gt; 13, vou deixar o link do repo desse (app) também, aaa já iria esquecendo JDK 8, e minha IDE favorita Eclipse, versão &lt;strong&gt;Eclipse IDE for Java EE Developers&lt;/strong&gt;, também vamos precisar de um client Soap para fazer os testes, vou usar o &lt;strong&gt;Soap UI&lt;/strong&gt; por já ter bastante familiaridade com o mesmo, por ser um dos mais famosos no mundo Java, você pode usar outro se quiser inclusive qualquer versão até o seguinte presente.&lt;/p&gt;

&lt;p&gt;Nesse processo vamos vê algumas classes e XML, na época a grande proposta era criar um meio de integração que não necessitasse ser desenvolvido um novo protocolo, isso estava fora de questão, foi então que surgiu a ideia de usar Http com XML e nasceu o &lt;strong&gt;SOAP&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos entender melhor sobre o SOAP!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Comunicação entre sistemas&lt;/strong&gt;, essa foi a principal motivação para a criação do &lt;strong&gt;SOAP&lt;/strong&gt; que quer dizer no nosso bom portuga, Protocolo de Acesso a Objetos Simples, a exemplo: recentemente atuei em um projeto onde a empresa em questão tem um grande sistema que faz uma determinada coisa, (já tem regras de negócios bem definidas lá) e por meio de um, &lt;strong&gt;Web Service&lt;/strong&gt; seguindo a especificação &lt;a href="https://dev.to/gabrielsantosba/jax-ws-a-api-coroa-do-java-introducao-ao-soap-1hed"&gt;&lt;strong&gt;JAX-WS&lt;/strong&gt;&lt;/a&gt; então e disponibilizado um serviço para os clientes poderem acessar esse grande sistema e assim poder usar dessas regras de negócios que já existe la, assim facilitando mão de obra tempo dinheiro e tudo mais, isso é possível também graças a implementação &lt;strong&gt;SOAP&lt;/strong&gt;, que disponibiliza uma definição onde os sistemas externos irão saber quais métodos chamar(requisitar) para cada determinada ação que precisem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;É isso que vamos fazer nesse atrigo disponibilizar um serviço com SOAP. &lt;br&gt;
Vem comigo, colocar mão na massa!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zoom-in:&lt;/strong&gt; lembrando que você pode usar uma aplicação que já tenha ai para esse exemplo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando o Primeiro Serviço com SOAP.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2ALE6CfFAlC3yBkUE6" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2ALE6CfFAlC3yBkUE6"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos então a classe em questão “Alunos” expressivamente coloquei no pacote &lt;strong&gt;ServicoSOAP&lt;/strong&gt;, nos sistemas das empresas em geral, fica apenas no pacote de serviço, lá tem cada classe referente a cada serviço.&lt;/p&gt;

&lt;p&gt;Bom, mas vamos falar da nossa classe, a anotação mais importante encontra-se na linha 16, bastaria ela para eu dizer tenho um &lt;strong&gt;@WebService&lt;/strong&gt; anotação essa do pacote &lt;strong&gt;javax.jws.WebService&lt;/strong&gt;, essa anotação então irá fornecer o contrato que precisamos para poder ter acesso ao nosso serviço através de um client, a mesma irá fazer com que nosso método entenda que deve trabalhar com &lt;strong&gt;HTTP&lt;/strong&gt; e &lt;strong&gt;XML&lt;/strong&gt;, esse contrato que citei acima chama-se &lt;strong&gt;WSDL&lt;/strong&gt;, vamos falar sobre ele mais a baixo, por hora vamos voltar a nossa classe que representa então nosso serviço &lt;strong&gt;Alunos&lt;/strong&gt;. (Sobre as anotações &lt;strong&gt;@Webresult&lt;/strong&gt;, e &lt;strong&gt;@WebMethod&lt;/strong&gt;, não se preocupem elas servem apenas para deixar o resultado final do XML mais digamos assim amigável). Vou deixar links para estudos sobre no fim deste post.&lt;/p&gt;

&lt;p&gt;Da linha 20 até a linha 25 trata-se apenas de código necessário para a parte de persistência funcionar corretamente, temos ali o famosíssimo &lt;strong&gt;EntityManager&lt;/strong&gt;, &lt;strong&gt;Dao&lt;/strong&gt; e etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indo ao que interessa:&lt;/strong&gt; Deixe eles lá, concentre-se nas linhas 27 a 38, pois aqui onde definimos então 2 métodos que serão disponibilizados através do nosso serviço que estamos desenvolvendo, simples assim, somente com essas linhas nós já definimos nosso &lt;strong&gt;Web Service&lt;/strong&gt; com &lt;strong&gt;SOAP&lt;/strong&gt;, já temos um contrato, e com isso temos também dois métodos que podem ser acessados de forma externa e retornam dados de nossa aplicação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uauuuu…. melhor que isso só um HelloWord rsrsr&lt;/strong&gt; 😎&lt;/p&gt;

&lt;p&gt;Agora precisamos publicar nosso &lt;strong&gt;Web Service&lt;/strong&gt;, para isso temos que definir em qual &lt;strong&gt;URL&lt;/strong&gt; ele ficará disponível e bem como também quais os tipos de retorno (Classe de Implementação) que ele deverá entender.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Não conta para ninguém mas… Isso é absurdamente simples de se fazer. Simbora!&lt;/em&gt;🥳&lt;/p&gt;

&lt;h2&gt;
  
  
  Publicando Nosso Serviço com SOAP.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2ARrmpsiAu-RfmwhYP" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2ARrmpsiAu-RfmwhYP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos então a classe em questão &lt;strong&gt;PublishServiceAlunos&lt;/strong&gt;, também no pacote &lt;strong&gt;ServicoSOAP&lt;/strong&gt;, essa classe tem um método &lt;strong&gt;main&lt;/strong&gt;, (não estamos usando Spring rsrsr), e dentro desse método então na linha 9 estou definindo o tipo de implementação que esse &lt;strong&gt;endpoint&lt;/strong&gt; irá trabalhar(retornar) e também a URL que ele deve usar para publicar, na linha 13 então usando a classe do &lt;a href="https://dev.to/gabrielsantosba/jax-ws-a-api-coroa-do-java-introducao-ao-soap-1hed"&gt;&lt;strong&gt;JAX-WS&lt;/strong&gt;&lt;/a&gt;, classe &lt;strong&gt;Endpoint&lt;/strong&gt;, que tem o método &lt;strong&gt;publish&lt;/strong&gt;, método esse que recebe dois parâmetros, a &lt;strong&gt;URL&lt;/strong&gt; e a &lt;strong&gt;classe de implementação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voilà:&lt;/strong&gt; Simples assim está pronto, já temos um serviço com &lt;strong&gt;SOAP&lt;/strong&gt; publicado e prontinho para ser acessado por terceiros, quartos e quintos etc. kkk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AsTMNf8FhEvEYX2JB" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AsTMNf8FhEvEYX2JB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se ligou? Não é muito simples, agora vamos ao que interessa né, testar tudo isso, afinal &lt;strong&gt;&lt;em&gt;não tá pronto até ser testado.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Antes Vamos Olhar o Contrato? WSDL.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Como citei rápido acima, precisamos de um contrato para que aplicações externas possam acessar esse nosso serviço, nas integrações mais modernas de hoje em dia seria como a &lt;em&gt;url de uma api, *a grosso modo falando&lt;/em&gt;&lt;em&gt;kk, esse contrato e definido por uma carinha que e o **WSDL(Web Services Description Language)&lt;/em&gt;*, como o próprio nome sugere esse e o cara que descreve como aquele web service deve ser acessado, em sua assinatura podemos observar que ele tem bastante “coisas”, tudo definições, não se preocupe com isso agora, basta saber que dessa forma os clientes externos saberão qual método deve ser chamado para determinada situação, assim nossa aplicação recebe essa requisição naquele método específico, levanta(invoca) um &lt;a href="https://dev.to/gabrielsantosba/servlets-quem-sao-onde-vivem-como-usar-4lb6"&gt;servlet&lt;/a&gt;, então aciona o método chamado trazendo o retorno solicitado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zoom-out&lt;/strong&gt;: Você pode se perguntar por que não usar JSON? Por que como falamos acima essa estratégia de integração foi criada na época onde o rei era o XML, foi antes de o JSON fazer sucesso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agora Vamos Testar.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como falei acima estou usando middleware &lt;strong&gt;WildFly&lt;/strong&gt;, porquê? Eu gosto dele, mas vc pode usar qualquer outro, saliento ainda que esse exemplo pode ser feito com uma aplicação Spring, lembre-se que nesse caso deve colocar no pom a dependência do javax referencia &lt;strong&gt;jsr250-api&lt;/strong&gt;, siga-me, subindo o WildFly aqui…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AYorbiN_KaVTzB-Cu" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AYorbiN_KaVTzB-Cu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui no meu console lindo ele já me mostra algumas informações referentes ao serviço que acabei de criar, perceba no parâmetro &lt;strong&gt;address&lt;/strong&gt; a &lt;strong&gt;url&lt;/strong&gt; que definimos na classe &lt;strong&gt;PublishServiceAlunos&lt;/strong&gt;. Vou copiar e jogar ela no browser!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AYyUcMVC5Vge8qz89" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AYyUcMVC5Vge8qz89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Joguei no browser e deu ruim, o que será?
&lt;/h3&gt;

&lt;p&gt;Bom um serviço &lt;strong&gt;SOAP&lt;/strong&gt; deveria ser usado sempre com o protocolo Http do tipo &lt;strong&gt;POST&lt;/strong&gt;, toda via jogando direto no browser por padrão e feito um &lt;strong&gt;GET&lt;/strong&gt; a mensagem de erro é clara, &lt;em&gt;HTTP GET não é compatível&lt;/em&gt;, agora entra em cena nosso client soap, o Soap UI, nele poderemos baixar o contrato(&lt;strong&gt;WSDL&lt;/strong&gt;) e com isso o mesmo irá reconhecer os métodos que temos para esse endpoint no &lt;strong&gt;Web Service&lt;/strong&gt; em questão.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Mas Antes Como Acessar o Contrato, Onde Fica Isso?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bom na (&lt;strong&gt;URL&lt;/strong&gt;) que definimos eu havia dito que ali já teríamos um contrato e não foi mentira, porem por convenção para acessarmos esse contrato devemos adicionar ao fim da &lt;strong&gt;URL&lt;/strong&gt;o seguinte parâmetro: &lt;strong&gt;?wsdl”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ex:&lt;/strong&gt; &lt;a href="http://localhost:8080/Academax/AlunosAcademia?wsdl" rel="noopener noreferrer"&gt;http://localhost:8080/Academax/AlunosAcademia?wsdl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora indo no Browser novamente temos acesso ao contrato do nosso serviço, perceba que os métodos que criamos também estão descritos lá, e assim que as aplicações externas acessam nosso &lt;strong&gt;Web Service&lt;/strong&gt;, o &lt;strong&gt;WSDL&lt;/strong&gt; fornece as informações importantes para quem externo for acessar aquele determinado &lt;strong&gt;endpoint&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A22G8R3ePbH_DkBTC" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2A22G8R3ePbH_DkBTC"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bom ta ficando quente em…
&lt;/h3&gt;

&lt;p&gt;Agora vamos jogar no SoapUI nosso client soap e fazer um teste mais concreto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AkYN41hlsYo8xubvU" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AkYN41hlsYo8xubvU"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicando na opção &lt;strong&gt;SOAP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AjxRQcSP66sIK382I" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AjxRQcSP66sIK382I"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos acesso a essa telinha, no campo Initial WSDL, será onde nós vamos colocar nossa (URL), poderíamos também procurar o arquivo WSDL baixado, alguns casos é enviado apenas o arquivo ao cliente para ele poder ter acesso aos recursos do endpoint em questão.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AoTGegL4fD7oYevID" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AoTGegL4fD7oYevID"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jogando a URL no Soap Ui, ele já reconhece o nome do &lt;strong&gt;Web Service&lt;/strong&gt; e agora e só da um velho e bom OK.&lt;/p&gt;

&lt;p&gt;Após isso olha que coisa magica, lembra os dois métodos que eu havia descrito na classe Alunos? Então…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AgA4B0x9Asxn_I1QE" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AgA4B0x9Asxn_I1QE"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olha os bonitinhos ai, com suas devidas requests prontas só precisando apertar um play para funcionar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2134%2F0%2AnpGQNeITf4Z1uDHs" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2134%2F0%2AnpGQNeITf4Z1uDHs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olha ali o método &lt;strong&gt;TodosAlunos&lt;/strong&gt;, esse responsável por trazer todos os alunos cadastrados na base, vamos testar, vamos aperta o play que está ali encima aquele “verdinho” e vê se pega fogo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2144%2F0%2A0IIcDY790jGOJRPi" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2144%2F0%2A0IIcDY790jGOJRPi"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pegou fogo mesmo rsrsr&lt;/strong&gt;, retornou bonitinho da base, ou seja, nosso serviço está &lt;strong&gt;Ok&lt;/strong&gt;, funfando, retornou o XML com as tags e dentro dela os dados, nesse caso cadastro de alunos que por sinal é tudo “Gabriel” rsrsr&lt;/p&gt;

&lt;p&gt;Agora o método &lt;strong&gt;buscarPorID,&lt;/strong&gt; esse necessita que seja passado um parâmetro dentro da tag arg0, caso eu quisesse deixar mais semântico, poderia usar a annotation @WebResult e especificar no parâmetro name = “id”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Vamos ao retorno.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2084%2F0%2AOGIh4xSc-WxWPOAT" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2084%2F0%2AOGIh4xSc-WxWPOAT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Retorno:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2080%2F0%2AyB4XPhfDRXJGfVHu" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2080%2F0%2AyB4XPhfDRXJGfVHu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prontinho tudo lindo, com isso concluímos que o nosso &lt;strong&gt;Web Service&lt;/strong&gt; está funcionando, claro tem mais algumas especificações algumas anotações que não falamos aqui, a exemplo a &lt;a href="https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlRootElement.html" rel="noopener noreferrer"&gt;@XMLElementRoot&lt;/a&gt;, a anotação &lt;a href="https://docs.oracle.com/javaee/5/api/javax/jws/WebResult.html" rel="noopener noreferrer"&gt;@WebResult&lt;/a&gt;, &lt;a href="https://docs.oracle.com/javase/7/docs/api/javax/jws/WebMethod.html" rel="noopener noreferrer"&gt;@WebMethod&lt;/a&gt;, essas duas ultimas servem para deixar mais bonitinho, personalizar o XML, nos links você pode se aprofundar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Que legal você que me acompanhou até aqui!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AMnoovMBCbC2Ccd_v" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F0%2AMnoovMBCbC2Ccd_v"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aprendemos e falamos sobre uns assuntos da hora. Claro essa e uma implementação bem simplista, introdutoria, não tira a necessidade de estudos mais avançados, indico a &lt;a href="https://www.alura.com.br/curso-online-web-services-soap?gclid=CjwKCAjwzt6LBhBeEiwAbPGOgSv6TRN1dLfZtSh2AVUEDVoy48VgPI_xmrO1EUuzVi0pzEUjzUDJoxoC-5MQAvD_BwE" rel="noopener noreferrer"&gt;Alura, tem cursos completos para tal&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Vimos que &lt;strong&gt;Web Services&lt;/strong&gt; foram criados para integrar sistemas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aprendemos também que o SOAP funciona com o XML e ali por baixo dos panos usa o protocolo Http.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Descobrimos também sobre o contrato utilizado com &lt;strong&gt;SOAP&lt;/strong&gt;o &lt;strong&gt;WSDL&lt;/strong&gt;, que serve para descrever os métodos e os dados necessários para poder acessar um &lt;strong&gt;Web Service&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Por enquanto é isso, vamos aos próximos episódios e não deixe de estudar, foco no foco e Deus te Abençoe!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>soap</category>
      <category>webservice</category>
      <category>java</category>
      <category>servicesoap</category>
    </item>
    <item>
      <title>Servlets quem são? Onde vivem? Como usar?</title>
      <dc:creator>Gabriel Bahia.</dc:creator>
      <pubDate>Fri, 06 Aug 2021 18:42:47 +0000</pubDate>
      <link>https://dev.to/gabrielsantosba/servlets-quem-sao-onde-vivem-como-usar-4lb6</link>
      <guid>https://dev.to/gabrielsantosba/servlets-quem-sao-onde-vivem-como-usar-4lb6</guid>
      <description>&lt;p&gt;Esse é um artigo conceitual com uma pitadinha de técnica, coisa básica, mas que irá te proporcionar conhecimentos valiosos, vem comigo, vamos bater um papo bem legal? Falar de código.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Porque foram criados os Servlets?
&lt;/h2&gt;

&lt;p&gt;Bom falar de Servlet nos leva automaticamente a requisitar o protocolo HTTP(sacou? risos), afinal ele é a base para a programação web. Agora falando de aplicações web com Java não é necessário criar classes que suportem o HTTP. Nosso idioma Java tem em suas bibliotecas uma API topzera com o nome de Servlet que seria (servidorzinho). Assim entendemos o porquê foram criados os Servlets, receber requisições HTTP, interpretá-las, processar e devolver uma resposta (response) a quem requisita.&lt;br&gt;
&lt;strong&gt;Fácil em? Bora que tem mais…&lt;/strong&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;""Há e nem venha falando, para que eu preciso saber disso? Coisa antiga, tra lá lá, o fato é que devemos cada vez mais buscar ser além da média, buscar se destacar e não ser mais 1 no meio desse mundo lotado de devs rsrsr, então muitas vezes compreender sobre a base das “coisas” nos ajudam a entender e resolver melhor problemas, Me acompanhe…""&lt;/em&gt; &lt;strong&gt;#NãoSejaMedia&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h3&gt;
  
  
  Foi assim que tudo começou…
&lt;/h3&gt;

&lt;p&gt;No mundo Java, essa história de gerar páginas dinâmicas nasceu com a tecnologia &lt;strong&gt;Servlets&lt;/strong&gt;, a primeira e principal tecnologia capaz de passar do padrão de páginas meramente estáticas que tinha na época, os servlets apareceram lá no ano de 1997. Nesse mesmo ano rolou a segunda edição do &lt;a href="https://en.wikipedia.org/wiki/JavaOne"&gt;JavaOne&lt;/a&gt; (&lt;em&gt;um dia e vou…&lt;/em&gt;), atraiu em torno de 8.000 devs, para a época foi a maior conferência de desenvolvimento de software do mundo,😱 uauu! Isso trouxe bastante visibilidade para os servlets e contribuiu muito para a sua disseminação. Hoje, a última versão disponível é a versão 4.0.3 lançada em agosto de 2019. E só para você saber, o Java EE está na versão 8, lançada em setembro de 2017, só para te situar, &lt;strong&gt;vamos à frente que atrás vem gente…&lt;/strong&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Como Usamos Servlets no Desenvolvimento Web com Java?
&lt;/h2&gt;

&lt;p&gt;Então… Na versão Java EE 5 criar Servlets era um processo de configuração um tanto quanto chato, envolvia arquivo XML, o web.xml, e sempre que tinha-se a necessidade de criar um novo servlet, novamente mais configuração, era um processo. Com o tempo isso fica bem chato, afinal queremos meter mão no código e não ficar fazendo configurações. Mas aí na especificação Java EE 6, chegou então Servlets 3.0, haaa ficou legalzinho implementar servlets, a configuração então fica bem programática, utilizando apenas simples anotações. O que isso quer dizer? Chega de configurar Servlets no web.xml, agora basta apenas usar a anotação &lt;a href="https://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebServlet.html"&gt;@WebServlet&lt;/a&gt;.😎&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fiquei empolgado que vou até te mostrar…&lt;/em&gt;😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ssVJ-a5c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oocvmkt78lv8dcxktkhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ssVJ-a5c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oocvmkt78lv8dcxktkhb.png" alt="Servlet criado com anotação"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas se liga, já parou para pensar que hoje em dia nós nem precisamos especificar servlet nenhum em nossas aplicações? 🤔&lt;/p&gt;

&lt;p&gt;Tipo assim, quando jogamos nossos desenvolvimentos nos servidores de aplicações, então toda essa “mágica” fica a cargo deles, citando a exemplo o WildFly, de forma simples, por baixo dos panos, então quando a requisição é feita pelo lado cliente, a mesma é recepcionada por um &lt;strong&gt;ServletContainer&lt;/strong&gt;, que então invoca(&lt;em&gt;kuchiyose no jutsu rsrs&lt;/em&gt;) o servlet com base nas implementações, envia a classe java que deve controlar as regras necessárias, então processa os dados e gera uma resposta(response). Basicamente assim o funcionamento.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Servlets são escaláveis&lt;/strong&gt;? Os servlets são eficientes e sim são escaláveis, ​​porque não criam novos processos sempre que requisitados, em vez disso, os mesmos são tratados por threads separados no processo do servidor web.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v4m2ptEw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cwrliefubryywi15txo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v4m2ptEw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cwrliefubryywi15txo.png" alt="Esquema básico usando Servlet"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Algo que eu ainda não havia entendido…🤔
&lt;/h3&gt;

&lt;p&gt;Fiquei pensando, hoje onde trabalho é usado o middleware WebSphere da IBM nas aplicações que tenho atuação, mas já usei também o JBoss, Wildfly e outros, esses que citei são bem pesados vamos dizer assim, em relação ao conhecidíssimo Tomcat. Então fui estudar e entendi a questão, a resposta é simples, o famosinho TomCat ele é basicamente um ServletContainer(&lt;em&gt;falamos sobre lá encima&lt;/em&gt;) já os outros que citei, eles têm a funcionalidade do TomCat(ServletContainer) e ainda tem mais alguns módulos que em umas aplicações são necessários, por isso o TomCat é mais leve, arquivo de download menor, etc.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Que tal entender melhor sobre as funcionalidades de um Servlet. Bora?🤩&lt;br&gt;&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Então, chegou a hora de descer um pouco mais a camada…&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A API Servlet tem uns métodos bem interessantes já prontos, precisamos apenas sobrescrever e adequar as nossas necessidades, por exemplo, o método &lt;strong&gt;doGet()&lt;/strong&gt;, que recupera dados, representa claro o método Http GET(&lt;em&gt;Que novidades rsrs&lt;/em&gt;), e o método &lt;strong&gt;doPost()&lt;/strong&gt;, que faz então a inserção de dados, esse representa qual método Http? Bom não precisa responder né.&lt;br&gt;
Estamos evoluindo, &lt;strong&gt;vamos estender mais o papo!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7KMMZ1sN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/famh6vnp7ybyx2m1q8rl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7KMMZ1sN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/famh6vnp7ybyx2m1q8rl.png" alt="Servlet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Implementamos um servlet, fácil né criar uma classe e herdar de &lt;strong&gt;HttpServlet&lt;/strong&gt;, ou você pode criar direto um servlet, vou mostrar um exemplo via Eclipse.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U-TtVoOF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsbt8d0jqyzz34iisdso.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U-TtVoOF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsbt8d0jqyzz34iisdso.png" alt="Servlet Eclipse IDE"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom servlet criado, mas como encontramos esse servlet a partir de uma página HTML? Ou seja, como eu envio os dados para ele processar e me devolver uma resposta? Então, uma pagina que chama um servlet pode usar o “/”+nome do servlet na url, dessa forma irá encontrar encontra-lo.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vamos fazer um exemplo bem básico…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m-ioiKKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssgh5vrv6bvi8j6707qv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m-ioiKKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssgh5vrv6bvi8j6707qv.png" alt="Formulario HTML"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como batizamos nosso servlet de formulario, então vamos direcionar para ele fazer o processamento dos dados do nosso formulário de login(bem basicão) e para isso inserimos ali no fim da url o nome do servlet(/formulario).&lt;/p&gt;

&lt;p&gt;Perceba que na página HTML a requisição é feita usando o método Http POST, então na classe servlet temos que implementar um método que consiga receber esses dados, qual é esse método? Claro ele mesmo &lt;strong&gt;doPost()&lt;/strong&gt;, usando a classe &lt;a href="https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html"&gt;HttpServletRequest&lt;/a&gt; para ter acesso aos dados da requisição, vamos usar um dos métodos já prontinho dessa classe, o &lt;strong&gt;getParameter()&lt;/strong&gt;, ele vai permitir pegar o valor do input na requisição, só precisa informar qual o nome do parâmetro do formulário da página HTML que queremos receber o valor.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Implementação… Simulando uma tentativa de login.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kqCaIJy---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftox4m77p257qax3va3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kqCaIJy---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftox4m77p257qax3va3f.png" alt="Servlet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nota: Como não iremos utilizar o método &lt;strong&gt;doGet()&lt;/strong&gt; vamos retirar ele de cena.&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Temos a seguinte implementação.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L-JtiFfM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbzyvmdek0i49aujlmqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L-JtiFfM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbzyvmdek0i49aujlmqp.png" alt="Tela HTML"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Pagina redirecionada após o processamento do &lt;strong&gt;Servlet&lt;/strong&gt;🥳🥳&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IGu-NzYB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5779kviqzz4v2l7y79r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IGu-NzYB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5779kviqzz4v2l7y79r.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bom esse foi só um exemplo basicão, claro os Servlets são muito mais poderosos e te convido a ir além, vou deixar uma imagem bem legal de um fluxo bem mais detalhado do uso de um servlet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ae5osElp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w8rrna9ivh3x85c7usmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ae5osElp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w8rrna9ivh3x85c7usmk.png" alt="Esquema Servlet"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Perceba que tem alguns métodos interessantes que não falamos aqui nesse artigo básico, mas que você encontra fácil na documentação todas as instruções necessárias para aprofundar seu aprendizado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.oracle.com/java/technologies/instant-tutorial.html"&gt;Artigo da Oracle&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Para esses testes usei a seguinte stack&lt;/p&gt;

&lt;p&gt;Middleware WildFly versão 20&lt;br&gt;
JDK Oracle 1.8&lt;br&gt;
Eclipse IDE for Java EE&lt;br&gt;
Maven versão 3.3.9&lt;/p&gt;

&lt;p&gt;Enfim espero que eu tenha lhe ajudado, estou te esperando para batermos mais um papo bem interessante e produtivo no próximo artigo, te desejo sucesso e para isso tenha coragem com muita fé. Aguardem… ✌️ 🤞 🤟&lt;/p&gt;

</description>
      <category>servlet</category>
      <category>java</category>
      <category>javaee</category>
      <category>servidor</category>
    </item>
  </channel>
</rss>
