Posts filed under ‘JBoss AS’

EJB Lookup w/ JNDI on Jboss AS 7

Hello everyone!

I was kinda busy last months, so I did not have time to publish more posts here :/

Anyway, some weeks ago i have noticed a little (big) issue on JBoss AS 7 – I couldn’t make EJB lookup using JNDI!

I had to Google a lot to find a concrete answer.

So I’d like to share a way to do it.

First of all, you must have AS 7.1.x, even if it is not at the final version yet. You can download it here.

Then, create a file named jboss-ejb-client.properties into your src folder, and add this content

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false

remote.connections=default

remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

remote.connection.two.host=localhost
remote.connection.two.port = 4447
remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

Now the disgusting part. You’ll need to make a big workaround here.
Your class is going to have lots of information. And one BIG important thing – this first example only works for Stateful EJBs. I’ll show an example for Stateless EJBs later. So remember – STATEFUL EJBs:

public class ClientMyStatefulBean {

static {
Security.addProvider(new JBossSaslProvider());
}

//STATIC BLOCK - YOU MUST HAVE THIS

public static void main(String[] args) throws NamingException {

final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);

final String appName = "";

final String moduleName = "myBeans";
// THIS IS THE NAME OF THE JAR WITH YOUR EJBs. Write its name here, without the .jar.

final String distinctName = "";
//    AS7 allows deployments to have an distinct name. If you don't use this feature, let this field empty.

final String beanName = MyBean.class.getSimpleName();
//EJB CLASS WITH THE IMPLEMENTATION (simple name)

final String viewClassName = Bean.class.getName();
// FULLY QUALIFIED NAME OF THE REMOTE CLASS (interface).

Bean bean = (Bean) context.lookup("ejb:" + appName + "/"
+ moduleName + "/" + distinctName + "/" + beanName + "!"
+ viewClassName + "?stateful");

}

}

Now for STATELESS BEANS, do this:

public class ClientMyStatelessBean {

static {
Security.addProvider(new JBossSaslProvider());
}

//STATIC BLOCK - YOU MUST HAVE THIS

public static void main(String[] args) throws NamingException {

final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);

final String appName = "";

final String moduleName = "myBeans";
// THIS IS THE NAME OF THE JAR WITH YOUR EJBs. Write its name here, without the .jar.

final String distinctName = "";
//    AS7 allows deployments to have an distinct name. If you don't use this feature, let this field empty.

final String beanName = MyBean.class.getSimpleName();
//EJB CLASS WITH THE IMPLEMENTATION (simple name)

final String viewClassName = Bean.class.getName();
// FULLY QUALIFIED NAME OF THE REMOTE CLASS (interface).

Bean bean = (Bean) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName)

//NOTICE THAT DOING LOOKUP FOR STATELESS EJBs IS DIFFERENT FROM  STATEFUL EJBs!!!

}

}

It is not over yet!
Now you must add some jars to your classpath!
You’ll need these jars:

  • jboss-transaction-api_1.1_spec-1.0.0.Final.jar
  • jboss-ejb-api_3.1_spec-1.0.1.Final.jar
  • jboss-ejb-client-1.0.0.Beta10.jar
  • jboss-marshalling-1.3.0.GA.jar
  • xnio-api-3.0.0.CR5.jar
  • jboss-remoting-3.2.0.CR6.jar
  • jboss-logging-3.1.0.Beta3.jar
  • xnio-nio-3.0.0.CR5.jar
  • jboss-sasl-1.0.0.Beta9.jar
  • jboss-marshalling-river-1.3.0.GA.jar

You can find all these jars into your Jboss AS 7 folder inside “modules” folder.
Or, to make things more simple, I’ve created this project at github ->https://github.com/hannelita/jboss-as-libs-ejb-lookup

All necessary libs are there, just include them into your classpath and things should work :)

Need more references? You can find the here:

Docs -> https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI

Issue discussion -> https://issues.jboss.org/browse/AS7-1338

Project example -> https://github.com/jaikiran/quickstart/tree/master/ejb-remote

I’d like to thank a guy called Jaikiran Pai for publishing this information into JBoss Docs! :)

Well, just to finish the topic – I think its still an ugly way to do ejb lookup. For xample, that static block and all those strings are disgusting. Hope to have a better solution for further versions! :)

December 30, 2011 at 8:40 pm 3 comments

Seam 3 – Iniciando!

Olá, pessoal! Muitas pessoas tem me pedido um tutorial full power pró de Seam 3, desde o que precisa ter no ambiente de trabalho até um exemplo de app simples.

Então vamos por etapas. =)

Ambiente de trabalho

A primeira coisa necessária é o Java (claro). De preferência o JDK 6.

Em seguida, é preciso ter o Maven 3 (tal qual descrevi em outro post – o Seam 3 é inteiramente baseado em Maven 3). Baixe o Maven 3 aqui. A instalação vai depender do seu SO, mas basicamente é só descompactar e registrar o mvn no seu PATH.

Por último, você precisa de um servidor JEE 6 (Glassfish 3, JBoss 6 ou 7) ou servlet container que suporte o Weld (Tomcat em sua última versão, por exemplo). Usarei o JBoss 6 e eventualmente o 7 em tudo que fizer aqui. Tip – Jboss 7 starta em 2 segundos. Veja você mesmo:

Jboss 7 - startup

(Dica – configure um JBOSS_HOME no seu PATH)

(Baixe o Jboss 6 ou 7 aqui)

Você também pode querer uma IDE. Eu recomendo  Eclipse Helios. Embora ainda não haja suporte do JBoss Tools para Seam 3, ainda acho que é uma boa IDE para se trabalhar. [Dica pra quem está começando - Baixe o Eclipse Helios for Java EE Developers!]

Assim que você baixar o Eclipse Helios, descompacte-o e abra-o. É preciso instalar o plugin do M2Eclipse (Maven para Eclipse).  Basta ire m Help -> Install new software:

Instalar M2Eclipse

Em seguida, encontre o link do m2eclipse, selecione o checkbox e instale o plugin:

Plugin m2eclipse

Baixando alguns exemplos

Depois de instalar o ambiente de trabalho, é interessante baixar alguns exemplos pra ver o Seam 3 em ação. Para tanto, você precisará ter o git instalado. Se você não manja nada de git, aqui há ótimas referências e tutoriais

Basta dar um

 git clone https://github.com/seam/examples.git 

Isso clonará uma série de exemplos para você.

Exemplos do Github

Comecemos pelo clássico exemplo de booking. Abra um terminal e vá até o diretório ../examples/booking.

Em seguida, digite

 mvn package jboss:hard-deploy 

Espere infinitamente o Maven baixar as dependências para você e dar deploy da app no servidor. Depois, inicie o JBoss AS (rode o ./run.sh na pasta bin do sei JBOSS_HOME), e acesse:

http://localhost:8080/seam-booking

Você deve ver algo como

Seam Booking

Coisas que podem dar errado:

  1. NÃO abra o projeto pelo eclipse e tente rodar por lá. Possivelmente vai dar merda.
  2. Se seu JBOSS_HOME falhar, no POM coloque hard-coded apenas para você ver algum resultado:

<properties>

<webapp.directory>src/main/webapp</webapp.directory>

<jboss.home>/usr/local/jboss/jboss-6.0.0.Final/</jboss.home>

<jboss.domain>default</jboss.domain>

</properties>

No próximo post, vamos criar um projeto do zero :D

Mais informções no site do Seam 3!

May 21, 2011 at 8:11 pm 4 comments

Post relâmpago – solucionando problemas nada óbvios com Jboss e Eclipse

Esse post super breve serve para contar algumas experiências ruins que tive nessa última semana com o Jboss AS 5.1 e a solução para os problemas que me aconteceram. Pode ser que seja o mesmo problema de alguém. As soluções para os dois casos abaixo são ridículas, mas acreditem, gastei horas com as mesmas!

Caso 1 – Jboss entrando em deploy infinitamente!

Pois é, se você tem alguma aplicação exploded no seu Jboss e mais, se essa app contiver xmls de JSF (faces-config), Spring, Seam (pages.xml) no WAR, então é provável que se você usa o jboss 5.1 já lhe aconteceu o bug bizarro do deploy infinito. Extremamente desagradável e irritante, sem contar que se você estiver em um PC ele vira uma carroça. Pois bem, depois de algumas olhadas no Google, vi umas soluções porcas, do tipo mexer no tempo que o Jboss verifica alterações e coisas do gênero.

Pois bem, não se trata de nada disso. O Jboss, em seu auge de loucura, não sei por que diabos cria, na pasta WEB-INF do seu projeto WAR (naquele mesmo local onde estão os xmls de configuração de algum framework) uns arquivos bizarros com extensões mais estranahas ainda. Por exemplo, ele cria um faces-config.xml.spadia, e uns outros arquivos com extensões loucas. A questão é que o Server pira se tiver qualquer coisa com essas extensões que não são apenas .xml  na pasta do projeto exploded. Ou seja, basta deletar da pasta exploded E da pasta do seu projeto (não sei como, mas se você usa sincronizadores tipo FileSync, esses arquivos de extensão estranha vão parar na pasta do seu projeto também. É só isso. Delete esses arquivos e reinicie o Server. Tiro e queda =)

Caso 2 – Workspace do Eclipse enlouquece totalmente com uma tal de SAXParserException e não permite que eu mexa no meu projeto que usa Maven.

Pois é, essa aí me custou muitas horas torrando os neurônios. Vou resumir o que aconteceu, talvez você já tenha passado por um aperto desses.

Estava eu dando clean install em uma aplicação que usa Maven e EJbs com Jboss Seam, quando o Eclipse trava e tive que crashá-lo na força bruta. Normal acontecer isso, especialmente se você usa PC com Windows. Quando reabri o Eclipse, se eu clicasse em qualquer item ou em qualquer módulo do projeto aparecia essa janelinha de erro de SAXParserException e eu não conseguia fazer absolutamente nada no projeto! Até tentei criar uma nova workspace e dar um Import no projeto, mas de nada adiantou, continuou com essa Exception e nada do meu projeto abrir; bateu aquele desespero e aquele peso na consciência de “ó, não, por que não dei commit pro repositório antes disso acontecer??”

Depois de muitas horas perdidas procurando a solução, finalmente encontrei. De alguma forma, meu application.xml estava em branco. Já vi casos em que ele estava incompleto, e ocasionou o mesmo erro. Esse fato gerava esse erro. O mais estranho disso foi que mesmo com o auto-build desligado, o Eclipse permanecia instável. Fui manualmente, através dos diretórios, até a pasta do application.xml e reescrevi o mesmo (num editor de texto comum, porque o Eclipse de fato se recusava a abrir qualquer arquivo do meu projeto!). Após isso dei um refresh na workspace e tudo voltou a funcionar! #win

Espero que esse post tenha sido útil para ajudá-lo caso já tenha passado por um aperto similar!

November 6, 2010 at 5:22 am 1 comment

Comparativo entre arquétipos Maven usando Jboss Seam

Escolhendo o melhor arquétipo Maven para usar com Seam

Enquanto o Seam 3 final não é lançado, uma das melhores formas de construir projetos utilizando Jboss Seam e Maven é através de arquétipos já existentes. Esse artigo lista três arquétipos que considero excelentes e as principais diferenças entre os três.

1 . Arquétipo contendo um WAR simples para ser hotdployed no Jboss AS (De preferência o Jboss AS  5.1) – Use esse arquétipo aqui – http://code.google.com/p/ctpjava/wiki/JBossSeamMavenArchetype

Simples mas agressivo, esse arquétipo é um dos mais completos que já vi. Especialmente pra quem curte e pratica TDD, ele já vem com uma infra de testes muito boa! Deem uma olhada no POM pra ver o que ele contém em suas dependências:

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>hibernate-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>provided</scope>

</dependency></pre>
<!-- *************** Test Dependencies *************** -->

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>5.8</version>

<classifier>jdk15</classifier>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>jboss-embedded-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>jboss-embedded-api</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>thirdparty-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-api</artifactId>

<version>${javax.faces.version}</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-impl</artifactId>

<version>${javax.faces.version}</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.el</groupId>

<artifactId>el-api</artifactId>

<version>1.2</version>

<scope>provided</scope>

</dependency>

Ele já vem com o testeng (para testes de integração, especialmente) e é possível mockar o Seam de uma forma muito simples para realizar testes unitários!

Fora isso ele já vem com toda a estrutura pronta para hotdeploy, de forma que basta baixar o projeto e dar um mvn:package que a pastinha do projeto já aparece no diretório de deloy do jboss! =)

O projeto em si é extremamente bem feito, com um arquivo de properties para configuração de banco e testes. A configuração dos aspectos do Jboss se encontram no POM do arquivo principal. Bem simples:

<properties></pre>

<java.source.version>1.5</java.source.version>

<jboss.seam.version>2.2.0.GA</jboss.seam.version>

<jboss.richfaces.version>3.3.2.SR1</jboss.richfaces.version>

<jboss.jbpm-jpdl.version>3.2.3</jboss.jbpm-jpdl.version>

<jboss.embedded.version>beta3.SP9</jboss.embedded.version>

<drools.version>5.0.1</drools.version>

<javax.faces.version>1.2_12</javax.faces.version>

<icefaces.version>1.8.1</icefaces.version>

<hotdeploy.version>0.3.3</hotdeploy.version>

<cli.version>0.7</cli.version>

<jboss.server>default</jboss.server>

<jboss.server.directory>F:\Eclipse\jboss-5.1.0.GA\jboss-5.1.0.GA</jboss.server.directory>

<jboss.servers.directory>${jboss.server.directory}/server</jboss.servers.directory>

<jboss.deploy.directory>${jboss.servers.directory}/${jboss.server}/deploy</jboss.deploy.directory>

</properties>

Atenção – só consegui baixar o projeto utilizando Maven 3. Utilizando algum Maven 2.x não rolou de forma alguma.

Único ponto falho que observei no projeto é que ele poderia já vir com  FIleSync…. O hotdeploy é perfeito com o FIleSync, apesar de muitas pessoas reclamarem dele.

Os criadores do arquétipo até fizeram um vídeo explicativo: http://www.youtube.com/watch?v=Zpn-teo1l3E

Vale a pena conferir! =)

Bom, agora vamos partir pra alguma coisa mais pesada – Arquétipos de EAR, e não só com WAR. Conheço dois bons arquétipos de EAR:

2. Arquétipo de referência – RI – http://www.glxn.net/seam-maven-refimpl/doc/tutorial/01-gettingstarted.html – de cara é simples e muito eficiente.

Possui ferramentas de testes e usa o OpenEJB. Não cheguei a colocar nenhum projeto em prática com esse arquétipo, apenas baixei para ter uma idéia.  A parte chata dele é que de fato, tal qual sugere o tutorial, você vai ter que puxar o arquétipo com o Tortoise do repositório. Mas no geral é um arquétipo muito bem estruturado e limpo.

3. Arquétipo do Akquinet – http://blog.akquinet.de/2009/09/14/getting-started-with-jboss-seam-and-maven-in-10-seconds/ – esse  é pra agredir mesmo! Na minha opinião, em questão de estrutura é o mais completo, porém o menos organizado. O que chama atenção nele é o módulo de entidades. De fato,  se você já passou pela experiência de tentar criar seu próprio arquétipo Maven para Seam, deve ter sofrido com o módulo de entidades se caso ele estivesse no mesmo projeto. Incrivelmente, o projeto do Akquinet TEM UM MÓDULO DE ENTIDADES!!! E FUNCIONA =D

Procure nos catálogos do seu Eclipse o arquétipo do akquinet. Costuma ter. Caso não tenha, basta puxá-lo digitando

mvn archetype:generate -DarchetypeGroupId=de.akquinet.jbosscc         -DarchetypeArtifactId=jbosscc-seam-archetype -DarchetypeVersion=1.2         -DarchetypeCatalog=http://seam-archetype.sourceforge.net/jbosscc-seam-archetype/1.2/archetype-catalog.xml

Como os outros arquétipos, ele oferece um bom suporte a testes:

<dependency></pre>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.8.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.easymock</groupId>

<artifactId>easymock</artifactId>

<version>2.5.2</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.easymock</groupId>

<artifactId>easymockclassextension</artifactId>

<version>2.5.2</version>

<scope>test</scope>

</dependency>

Se bem que faltou algo mais aprimorado aí…. Como o tsteNG e o OpenEJB que não estão presentes…

Outra bomba nesse projeto é a ausência de uma estruturação para hotdeploy…. É preciso configurar o projeto war no braço pra conseguir… Meu post anterior possui um tutorial que ensina a fazer isso e ensina também a usar o FileSync com esse arquétipo. Ele também poderia conter mais arquivos de properties para facilitar algumas configurações.

Mas tirando essas questões, é um projeto bem completo, atent para configurações de cachê de segundo nível, Drools, Bootstrapper de EJBs e por aí vai. Recomendo fortemente!

Uma dica para os projetos EAR que ainda não testei (mas pretendo) –  Colocar o Arquillian em um desses projetos! Ainda não conhece o Arquillian??? http://www.jboss.org/arquillian

O Arquillian na minha opinião foi um insight muito grande e é bastante promissor (pelo menos no meu ponto de vista). Seria ótimo vê-lo rodando com um desses arquétipos, mesmo que ele ainda esteja em sua versão alpha. O que acham? =)

Para aqueles que desejam construir um arquétipo do zero, a pedida é usar o Jboss Tools para dar uma mãozinha…. Vejam essa publicação: http://docs.redhat.com/docs/en-US/JBoss_Developer_Studio/4.0/html/Seam_Developer_Tools_Reference_Guide/mavenized_seam.html – A versão 3.5.1 para Eclipse Galileo e 3.5.2 para Eclipse Helios já fornecem suporte para uma integração nativa na hora de criar um projeto com Seam. Basta seguir os passos desse tutorial =)

E para quem quiser mais informações, aí vai algumas leituras que considero úteis:

É isso, pessoal, espero que aprendam algo! Até a próxima!

November 1, 2010 at 2:49 am 5 comments

Tutorial – JBoss Seam + Jboss AS + Maven + EJB + Eclipse + Jboss Tools

Olá pessoal! Post de inauguração do blog! E pra começar bem, ele traz um tutorial que explica com alguns detalhes com configurar uma aplicação com JBoss Seam + Jboss AS 5 + Maven + EJB 3 + Eclipse Galileo + Jboss Tools + Hot Deploy. Isso é algo que não é muito trivial de se fazer. Graças a um arquétipo de Maven já pré-estruturado o processo se agiliza muito =) O tutorial ficou um pouco extenso, e reúne muitas informações úteis encontradas em diversos sites. Ele se encontra na minha conta do SlideShare e pode ser baixado aqui.

=)

October 9, 2010 at 8:20 pm 1 comment


Calendar

September 2014
M T W T F S S
« Mar    
1234567
891011121314
15161718192021
22232425262728
2930  

Posts by Month

Posts by Category


Follow

Get every new post delivered to your Inbox.