Java

Manipulando DOM de Maneira Simples com JSOUP

Postado em Atualizado em

Image

Olá,

Na semana passada precisei manipular uma página XHTML utilizando Java. A maneira mais simples que encontrei e mais efetiva foi o JSOUP que disponibiliza uma API para manipulação e extração dados utilizando o melhor do DOM.

Por exemplo se por algum requisito da aplicação for necessário adicionar um  <h:commandButton> utilizando somente Java o JSOUP é uma mão na roda.

Temos a seguinte página:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
   <title>JSF - JSOUP</title>
</h:head>
<h:body>
  <h3>Apenas Testando!!</h3>
  <h:form>
    <h:inputtext id="name" value="#{helloController.name}"></h:inputtext>
  </h:form>
</h:body>
</html>

Nessa situação por exemplo teríamos que adicionar um <h:commandButton> abaixo do input. Sendo bem “grosso” poderíamos fazer da seguinte maneira:

File input = new File("/home/mmagnani/Desktop/antes.xhtml");
Document doc = Jsoup.parse(input, "UTF-8", "");

BufferedWriter out = new BufferedWriter(new FileWriter("/home/mmagnani/Desktop/depois.xhtml"));

doc.getElementById("name").after("<h:commandButton value=\"Welcome Me\" action=\"welcome\"></h:commandButton>");

out.write(doc.html());
out.close();

Resultado Final:

<!--?xml version="1.0" encoding="UTF-8"?--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
 <h:head>
    <title>JSF - JSOUP</title>
 </h:head>
<h:body>
<h3>Apenas Testando!!</h3>
<h:form>
<h:inputtext id="name" value="#{helloController.name}"></h:inputtext>
<h:commandbutton value="Welcome Me" action="welcome"></h:commandbutton>
</h:form>
</h:body>
</html>

Espero que isso seja útil em algum momento!

Abraços

Fonte: http://jsoup.org/

Configurando HPROF no JBoss AS 7.1.2 ( JBoss EAP 6 )

Postado em

Olá amigos,

Hoje vamos aprender a configurar  o HPROF que eu considero fundamental para um administrador de instâncias JBoss. O HPROF é uma biblioteca nativa da JVM  que é carregado dinâmicamente na inicialização da mesma, tornando-se parte do processo Java. O HPROF nos fornece dados para analisar a heap do processo Java em questão e também informações relacionadas ao uso de CPU. Os dados gerados podem ser em forma de texto ou binário com isso podemos rastrear e isolar problemas de desempenho que envolvem o uso de memória e problemas com código ineficiente.

O primeiro passo é indenticar o processo alvo na JVM. Podemos monitorar um único processo que é o caso do standalone mode mas também pode ocorrer a necessidade de monitarar instâncias em domain mode e com isso também o domain process controller e host controller.

Como exemplo vamos utilizar a configuração em Standalone Mode, que é uma unica instância como nas versões anteriores do JBoss.

No Linux edite o arquivo JBOSS_HOME/bin/standalone.conf  e procure pela propriedade JBOSS_MODULES_SYSTEM_PKGS e adicione as classes do HPROF separando-as com vírgula como abaixo. Essa propriedade “diz” ao JBoss Modules para deixar as classes do HPROF acessíveis de qualquer class loader.

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,sun.tools.hprof,com.sun.tools.hat.internal.parser,com.sun.demo.jvmti.hprof"
#JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"
fi

Ainda no arquivo JBOSS_HOME/bin/standalone.conf , descomente a variável JAVA_OPTS e deixe-a como abaixo:

JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=file=myhprof.txt"

O meu JBOSS_HOME/bin/standalone.conf nessa parte ficou como abaixo:

if [ "x$JAVA_OPTS" = "x" ]; then
 JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
 JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
 JAVA_OPTS="$JAVA_OPTS -Djboss.server.default.config=standalone.xml"
 JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=file=myhprof.txt"
else
 echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

Inicie o JBoss em Standalone mode e perceba que o arquivo myhprof.txt foi criado no diretório atual.

Para utilizar o formato binário basta modificar o JAVA_OPTS como abaixo:

 JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=format=b,file=MyHeapDump.hprof"

Quando pararmos o JBoss,  o HPROF criará o dump e você verá o seguinte erro:

Dumping Java heap ...HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Missing jclass when fields needed [hprof_class.c:642]
HPROF ERROR: Trouble with unprepared classes [hprof_reference.c:379]
allocation sites ... done.

Mesmo com o erro acima o arquivo de dump do HPROF foi criado com sucesso. Me pareceu ser algo relacionado a referência de alguns objetos mas tenho que pesquisar e testar mais algumas vezes.

Para mais informações sobre o HPROF veja o link abaixo:

Outras fontes interessantes sobre JVM e Profile:

Abraços

Resolvendo a Exception Unsupported Major.minor Version

Postado em Atualizado em

Olá amigos

Hoje pela manhã no guj  apareçeu um problema bem comum mas que muitos ficam perdidos.  Uma pessoa estava tentando realizar o deploy e se deparou com a seguinte exception:

Service Module Loader: java.lang.UnsupportedClassVersionError: br/com/startup/s3/servlet/SairServlet : Unsupported major.minor version 51.0

Essa exception é um clásico 🙂

Em um ambiente Java isso occore quando você compila as suas classes utilizando por exemplo  Java 1.7 e depois tenta executar o programa  utilizando  Java  1.6.

Cada versão do Java tem um major source version veja abaixo:

Java Version    Major Version

Java 4                   48.0
Java 5                   49.0
java 6                    50.0
java 7                    51.0
Ou seja  se você compilar o projeto utilizando Java 1.7 ele irá criar arquivos .class com a major version 51.0, e se você executar esses arquivos com Java 1.6 ele irá lançar a exception java.lang.unsupportedclassversionerror unsupported major.minor version 51.0.
Entao chegamos a conclusão de que não conseguimos executar classes compiladas por um JDK superior em um JDK inferior.
Para resolver verifique a versão dos JDKs envolvidos utilizando o comando java -version e seja feliz.
Espero que tenha ajudado 🙂
Abraços

Utilizando PrimeFaces 3.4 com JQuery MaskMoney no JBoss AS 7.1.1

Postado em Atualizado em

E ai galera blz?

Esses dias precisei configurar um input text no meu projeto JSF 2 + Primeface para utilizar máscara com valores monetários. Pesquisando na web encontrei o MaskMoney. Trata-se de um plugin baseado em JQuery que ajuda a formatar uma máscara para campos monetários. Foi um verdadeiro inferno fazer isso funcionar. Na verdade nao consegui fazer funcionar de uma forma elegante. Vejas as quantidades de tópicos no GUJ em relacionado com isso:

Só de ver isso me dá até arrepios rsrs. Como pode um negócio tão simples gerar tanto problema?!  Acredito que isso se deve e muito aos conflitos com o PrimeFaces pois o mesmo já traz o JQuery embarcado. Eu testei uma quantidade absurda de tópicos todos utlizando html e funcionaram numa boa. Já com a página .xhtml num ia nem com reza brava 😦

A solução foi colocar o form com a propriedade prependId igual a false e colocar a configuração da  máscara no body da página.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:p="http://primefaces.org/ui"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions">

<h:head>
 <title>Test</title>
 <script type="text/javascript" src="jquery.maskMoney.js"></script>
</h:head>

<h:body>
  <h:form prependId="false">

  <h:inputText value="#{moneyMBean.contractPrice}" required="true" id="valor" styleClass="valor"  converter="com.magnani.test.converter.MoneyConverter"/>
  <script>$("#valor").maskMoney({showSymbol:true,symbol:"R$", decimal:",", thousands:".", allowZero:true});</script>

  <h:commandButton action="#{moneyMBean.getPriceValue}" value="OK"/>

  <h:outputText value="#{moneyMBean.price}" />
</h:form>
</h:body>
</html>

Vou deixar aqui também o converter utilizado 🙂

@FacesConverter("com.magnani.test.converter.MoneyConverter")
public class MoneyConverter implements Converter {

 final private Locale locale = new Locale("pt", "BR");
 final private DecimalFormat decimalFormat = new DecimalFormat("##0,00", new DecimalFormatSymbols(locale));

 public BigDecimal getAsObject(FacesContext fc, UIComponent component, String value) {

 try {

   decimalFormat.setParseBigDecimal(true);

   return (BigDecimal) decimalFormat.parse(value);
 } catch (ParseException e) {
  throw new ConverterException("Error", e);
 }

}

public String getAsString(FacesContext fc, UIComponent component, Object value) {
  DecimalFormat df = new DecimalFormat("###,###,##0.00");
  return df.format(value);
 }
}

Se alguém souber de uma solução mais interessante por favor me avise 🙂

Abraços

Fontes:

http://www.rafaelwendel.com/2012/07/mascara-para-campos-monetarios-com-jquery-maskmoney/

http://blog.caixadesolucoes.com.br/post/mascara-para-campos-monetarios-com-jquery-e-maskmoney

Balanceamento de Carga com Mod JK no JBoss AS 7.1.1

Postado em Atualizado em

Iniciamente devemos baixar o mod_jk, que é um módulo para balanceamento de carga da apache muito utilizado, pois possui grande diversidade de parâmetros podendo  se adequar a inúmeras situações. O mod_jk também é bem robusto e estável. Ele é customizado através de parâmetros salvos em arquivos “.conf”.

O mod_jk pode ser baixado na seguinte url: http://tomcat.apache.org/download-connectors.cgi, o arquivo tomcat-connectors-1.2.32-src.tar.gz, deverá ser baixado.

Logo em seguida devemos descompactar o arquivo, e compilar utilizando os comandos abaixo:

yum install httpd-devel
tar xvfz tomcat-connectors-1.2.32-src.tar.gz
cd tomcat-connectors-1.2.32-src/native/
./configure --with-apxs=yes
make
make install

Agora o mod_jk.so já está  no diretório modules do httpd :

ls /etc/httpd/modules

Crie em /etc/httpd/conf.d/ o arquivo mod-jk.conf e o configure-o como abaixo:

vim /etc/httpd/conf.d/mod-jk.conf

 

#### Mod JK 1.32 ####
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /application/* loadbalancer
JkMountFile conf/uriworkermap.properties
JkShmFile logs/jk.shm

<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

Edite o arquivo httpd.conf :

vim /etc/httpd/conf/httpd.conf

E  adicione o arquivo de configuração do mod-jk.conf:

Include conf/mod-jk.conf

Crie o arquivo workers.properties. No arquivo worker estão as informações relacionadas aos hosts envolvidos e  parâmetros como factor de balanceamento, protocolos, configurações de cache entre outros.

vim /etc/httpd/conf/workers.properties

 


# Define instance01
worker.instance01.port=8009
worker.instance01.host=192.168.0.160
worker.instance01.type=ajp13
worker.instance01.ping_mode=A
worker.instance01.lbfactor=1

# Define instance02
worker.instance02.port=8009
worker.instance02.host=192.168.0.170
worker.instance02.type=ajp13
worker.instance02.ping_mode=A
worker.instance02.lbfactor=1

# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=instance01,instance02
worker.loadbalancer.sticky_session=False
worker.list=loadbalancer

Crie o arquivo uriworkermap.properties, mapeando a url da sua aplicação conforme o exemplo abaixo:

/TestApp=loadbalancer
/TestApp/*=loadbalancer

No JBoss AS 7.1 edite o arquivo standalone.xml :

vim jboss-as-7.1.0.Final/standalone/configuration/standalone.xml

O “jvmRoute”  agora se chama instance-id (https://issues.jboss.org/browse/AS7-1365):

   <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="instance01" native="false">

Adicione o protocolo AJP:

   <connector name="ajp" protocol="AJP/1.3" socket-binding="ajp" enabled="true" scheme="http"/>

Em <socket-binding-group name=”standard-sockets” default-interface=”public” port-offset=”${jboss.socket.binding.port-offset:0}”>, adicione a port AJP configurada no arquivo workers.properties, que para instance01 é 8009.

<socket-binding name="ajp" port="8009"/>

Agora no outro servidor repita os procedimentos realizados em instance01 para instance02

Inicie as instâncias:

Instance01

./jboss-as-7.1.0.Final/bin/standalone.sh  -b 192.168.0.160 -bmanagement 192.168.0.160

Instance02

./jboss-as-7.1.0.Final2/bin/standalone.sh  -b 192.168.0.170 -bmanagement 192.168.0.170

Realize o deploy a aplicação no diretório: jboss-as-7.1.0.Final/standalone/deployments/  de instance01 e instance02

Acesse a url: http://ipservidor/TestApp , a sua aplicação deverá estar funcionando em conjunto com o Mod JK. Lembre-se que existem algumas configurações  que não foram abordadas nesse post.

Espero que tenha ajudado abraços!

Balanceamento de Carga no JBoss AS 6.1 – Parte 2 ( Final )

Postado em Atualizado em

Mod Cluster  é um balanceador de carga HTTP,  mas diferente do mod_jk, o mod_cluster se baseia na carga da aplicação para distribuir as requisições.Vamos utilizar o Mod Cluster 1.1.3.

O primeiro passo é baixar os binários para o sistema operacional que será utilizado. Para isso execute o comando abaixo:

   wget http://downloads.jboss.org/mod_cluster//1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x64-ssl.tar.gz
   wget mod_cluster-1.1.3.Final-linux2-x64-ssl.tar.gz

Copie os arquivos  *.so, para o diretório /etc/httpd/modules :

  • mod_slotmem.so
  • mod_manager.so
  • mod_proxy_cluster.so
  • mod_advertise.so

Edite o arquivo httpd.conf, e insira as linhas abaixo:

LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
<VirtualHost *:80>
<Directory />
  Order deny,allow
  Allow from all
</Directory>
<Location /mod_cluster_manager>
  SetHandler mod_cluster-manager
  Order deny,allow
  Allow from all
</Location>
  KeepAliveTimeout 60
  MaxKeepAliveRequests 0
  ManagerBalancerName testcluster
  AdvertiseFrequency 5
</VirtualHost>
Comente a linha LoadModule proxy_balancer_module modules/mod_proxy_balancer.so ,  para não ocorrer um conflito com LoadModule proxy_cluster_module modules/mod_proxy_cluster.so.
Incie o apache e acesse a url : http://ip/mod_cluster_manager , você deverá ver algo semelhante a imagem abaixo:
  • Mod Cluster Manager
Agora no JBoss AS 6.1, crie um novo profile , para ser utilizado no balanceamento:

  cd /opt/jboss-6.1.0.Final/server/
  cp -Rap all instance01
Para habilitar o profile instance01, edite o arquivo :
    vim /opt/jboss-6.1.0.Final/server/instance01/deploy/mod_cluster.sar/META-INF/mod_cluster-jboss-beans.xml
Altere a seguinte linha conforme abaixo:
     <property name="advertise">${jboss.mod_cluster.advertise.enabled:true}</property></div>
Outra forma é acrecentando o  parâmetro a linha de execução:
   -Djboss.mod_cluster.advertise.enabled=true
Edite o arqui server.xml :
  vim jboss-6.1.0.Final/server/instance01/deploy/jbossweb.sar/server.xml
Adicione o parâmetro para o JvmRoute :

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="${jboss.jvmRoute}">
Para finalizar, crei uma nova instância:
   cp -Rap instance01 instance02
Agora inicie as duas instâncias, utilizando os comandos abaixo:

./run.sh -b 0.0.0.0 -g mycluster -c instance01 -Djboss.service.binding.set=ports-default -Djboss.jvmRoute="instance01"  -Djboss.messaging.ServerPeerID=1

 ./run.sh -b 0.0.0.0 -g mycluster -c instance02 -Djboss.service.binding.set=ports-01 -Djboss.jvmRoute="instance02"  -Djboss.messaging.ServerPeerID=2
Acesse novamente http://ip/mod_cluster_manager ,  você deverá ver as instâncias que acabamos de inciar:
  • Mod Cluster Manager / Instances
Baixe o Java Bundles do Mod Cluster. Vamos utilizar as aplicações de demo, para realizar alguns testes:
  wget http://downloads.jboss.org/mod_cluster//1.1.3.Final/mod_cluster-1.1.3.Final-bin.tar.gz</div>
  tar -xvzf mod_cluster-1.1.3.Final-bin.tar.gz
Faça  o deploy da aplicação load-demo.war , na pasta farm de instance01 para que seja replicado para instance02.
   cp demo/server/load-demo.war /opt/jboss-6.1.0.Final/server/instance01/farm/
Veja que a aplicação já está disponível e pronto para os testes:
  • Mod Cluster Manager / Instances / Deploy
Agore execute o client, e divirta-se a vontade.
cd demo/client
./run-demo.sh
Espero que tenha ajudado 🙂

Utilizando LDAP Login Module no JBoss AS 7.1

Postado em Atualizado em

Segundo a Wikipedia LDAP Lightweight Directory Access Protocol, ou LDAP, é um protocolo para atualizar e pesquisar diretórios rodando sobre TCP/IP.

Um servidor LDAP pode fornecer uma central de informações de diretório para:

• As credenciais do usuário (login e senha)
• Informações de diretório do usuário (como nomes e endereços de correio electrônico)
• Web diretórios

Vamos instalar o OpenLDAP e criar a nossa primeira estrutura de diretórios.

Instalando e Criando a Estrutura Inicial do OpenLDAP

Para instalar o LDAP no CentOS 6.2, execute o comando abaixo:

   yum install openldap openldap-servers openldap-devel compat-openldap php-ldap openldap-clients

O próximo passo é gerar a senha root do Distinguished Name (dn) :

  /usr/sbin/slappasswd

Anote o Hash retornado:

{SSHA}lQtV0mTn20N8PLuurHjoqgkXMPe0owG3

Copie o DB_CONFIG.example para /var/lib/ldap/ :

  cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Edite o arquivo de configuração:

  vim /etc/openldap/ldap.conf

E deixe-o como abaixo:

 include /etc/openldap/schema/core.schema
 include /etc/openldap/schema/cosine.schema
 include /etc/openldap/schema/inetorgperson.schema
 include /etc/openldap/schema/nis.schema
 allow bind_v2
 pidfile /var/run/openldap/slapd.pid
 argsfile /var/run/openldap/slapd.args
 database bdb
 suffix "dc=example,dc=com"
 rootdn "cn=Manager,dc=example,dc=com"
 rootpw {SSHA}lQtV0mTn20N8PLuurHjoqgkXMPe0owG3
 directory /var/lib/ldap
 index objectClass eq,pres
 index ou,cn,mail,surname,givenname eq,pres,sub
 index uidNumber,gidNumber,loginShell eq,pres

Para iniciar o serviço execute:

  /etc/init.d/slapd start

Agora crie o arquivo LDIF, conforme a estrutura abaixo:

dn: dc=example,dc=com
objectclass: top
objectclass: dcObject
objectclass: organization
dc: example
o: MCC

dn: ou=People,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: People

dn: uid=admin,ou=People,dc=example,dc=com
objectclass: top
objectclass: uidObject
objectclass: person
uid: admin
cn: Manager
sn: Manager
userPassword: secret

dn: ou=Roles,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: Roles

dn: cn=Manager,ou=Roles,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
cn: Manager
description: the Sample group
member: uid=admin,ou=People,dc=example,dc=com

Adicione usuário ao LDAP, utilizando o comando abaixo:

  ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f users.ldif

Enter LDAP Password:
adding new entry “dc=example,dc=com”
adding new entry “ou=People,dc=example,dc=com”
adding new entry “uid=admin,ou=People,dc=example,dc=com”
adding new entry “ou=Roles,dc=example,dc=com”
adding new entry “cn=Manager,ou=Roles,dc=example,dc=com”

Se ocorrer algum problema, sigam as dicas desse link: http://www.ezylinux.com/en/red-hat-6-how-to-fixes-ldapadd-ldap_bind-invalid-credentials-49/

Configurando o JBoss AS 7.1

O primeiro passo é adicionar o “my_ldap_security_domain”  no arquivo JBOSS_HOME/standalone/configuration/standalone.xml , como abaixo:

<security-domain name="my_ldap_security_domain">
  <authentication>
     <login-module code="LdapExtended" flag="required">
       <module-option name="java.naming.factory.initial"  value="com.sun.jndi.ldap.LdapCtxFactory"/>
       <module-option name="java.naming.provider.url" value="ldap://localhost:389"/>
       <module-option name="java.naming.security.authentication" value="simple"/>
       <module-option name="bindDN" value="uid=admin,ou=People,dc=example,dc=com"/>
       <module-option name="bindCredential" value="secret"/>
       <module-option name="baseCtxDN" value="ou=People,dc=example,dc=com"/>
       <module-option name="baseFilter" value="(uid={0})"/>
       <module-option name="rolesCtxDN" value="ou=Roles,dc=example,dc=com"/>
       <module-option name="roleFilter" value="(member={1})"/>
       <module-option name="roleAttributeID" value="cn"/>
       <module-option name="throwValidateError" value="true"/>
       <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
     </login-module>
   </authentication>
</security-domain>

Adicione também  a categoria para o logging:

<logger category="org.jboss.security">
  <level name="TRACE"/>
</logger>

Agora crie uma aplicação para utilizar o dominio de segurança my_ldap_security_domain.

No jboss-web.xml , adicione o dominio de segurança:

<jboss-web>
    <security-domain>java:/jaas/my_ldap_security_domain</security-domain>
</jboss-web>

E no web.xml,  as configurações como abaixo:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>HtmlAuth</web-resource-name>
    <description>application security constraints
    </description>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>Manager</role-name>
  </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Test LDAP</realm-name>
</login-config>
<security-role>
    <role-name>Manager</role-name>
</security-role>

Faça o deploy e acesse a aplicação. Será solicitado usuário e senha, adicionados anteriormente ( users.ldif  –> admin / secret ) .

Vou deixar aqui a aplicação web criada para testar a autenticação no LDAP, o arquivo users.ldif e o standalone.xml.

Espero que tenha ajudado.
Abraços

Fonte: http://blog.javachap.com/index.php/installing-openldap-on-centos/