jueves, 11 de mayo de 2017

JBoss 6.1 a producción

Introducción

En un ambiente de producción se deben configurar ciertas características en JBoss las cuales son cuestiones de seguridad, rendimiento y disponibilidad. Factores como compilación de JSP, Frameworks para producción, logger, parámetros de la maquina virtual, clúster, scanner de aplicaciones, eliminación de servicios innecesarios, pool de conexiones (EJB's y base de datos), seguridad de consolas, etc.

Requisitos

    JBoss 6.1 instalado correctamente
    JDK instalado correctamente
    jboss-native-2.0.9-windows-x64-ssl

*NOTA: [INSTANCIA] es considerada como "all" para esta ficha técnica y puede aplicar para aquellas instancias que contengan los servicios requeridos.

Cambiar contraseña default de HornetQ
    Agregar el usuario y contraseña al archivo:

JBOSS_HOME\server\[INSTANCIA]\deploy\hornetq\hornetq-configuration.xml

...
   <name>HornetQ.main.config</name>
   <cluster-user>HornetAdmin</cluster-user>
   <cluster-password>TU_PASSSWORD_AQUI</cluster-password>
<log-delegate-factory-class-name>org.hornetq.integration.logging.Log4jLogDelegateFactory
</log-delegate-factory-class-name>
...

  
Cambiar puerto http de 8080 a 80 y puerto https de 8443 a 443

Editar el archivo: JBOSS_HOME/server/[INSTANCIA]/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml
Localizar conector HttpConnector y cambiar la propiedad del puerto por 80

...
   <name>HornetQ.main.config</name>
   <cluster-user>HornetAdmin</cluster-user>
   <cluster-password>TU_PASSSWORD_AQUI</cluster-password>
   <log-delegate-factory-class-name>org.hornetq.integration.logging.Log4jLogDelegateFactory</log-delegate-factory-class-name>
...

    Editar el archivo: JBOSS_HOME/server/[INSTANCIA]/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml
    Localizar el conector HttpsConnector y cambiar la propiedad del puerto por 443

...
<bean class="org.jboss.services.binding.ServiceBindingMetadata">
    <property name="serviceName">jboss.web:service=WebServer</property>
    <property name="bindingName">HttpsConnector</property>
    <!-- <property name="port">8443</property>-->
    <property name="port">443</property>
    <property name="description">JBoss Web HTTPS connector socket</property>
</bean>
...

Habilitar puertos de Firewall

    JBoss 6.1 requiere de los siguientes puertos
        TCP: 1098, 1099, 4444, 4445, 8009, 8080, 8083, 8093, 1100, 1101, 1389, 3843, 3528, 3873, 4447
        UDP: 1102, 1161, 1162, 45566
    NOTA: Si se está trabajando en un servidor Windows se deben agregar estas reglas en el firewall como entradas (Inbound Rules) dependiendo del tipo de protocolo (UDP o TCP)

Clustering

    Para iniciar JBoss 6.1 como clúster es necesario ejecutar el siguiente comando en cada instancia del clúster:

JBOSS_HOME\bin\run.bat -b [IP] -c all -Djboss.messaging.ServerPeerID=[ID] -g [NOMBRE]

    Donde:
        IP - Es la ip de la máquina.
        ID - Es un identificador numérico único. Cada nodo del clúster debe tener un identificador distinto. ej. un nodo tendrá 1 y otro nodo 2 y así sucesivamente.
        NOMBRE - Es el nombre de la partición. Este valor debe ser el mismo para todos los nodos que integran el clúster.
    La consola debe mostrar la ip de los nodos involucrados en el clúster:


17:08:26,193 INFO  [org.apache.coyote.http11.Http11Protocol] Starting Coyote HTTP/1.1 on http-10.0.1.46-80
17:08:26,208 INFO  [org.apache.coyote.ajp.AjpProtocol] Starting Coyote AJP/1.3 on ajp-10.0.1.46-8009
17:08:26,208 INFO  [org.jboss.bootstrap.impl.base.server.AbstractServer] JBossAS [6.1.0.Final "Neo"] Started in 32s:920ms
17:08:26,740 INFO  [org.hornetq.core.server.cluster.impl.BridgeImpl] Connecting bridge sf.my-cluster.8623b9ae-d03f-11e0-b604-005056ab0077 to its destination [da62219f-cddf-11e0-93b2-005056ab0078]

    17:08:27,130 INFO [org.jboss.ha.framework.server.ClusterPartition.lifecycle.jboss6partition] New cluster view for partition jboss6partition (id: 1, delta: 1, merge: false) : [10.0.1.46:1099, 10.0.1.45:1099]

17:08:27,130 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] Received new cluster view: [10.0.1.46:1099|1] [10.0.1.46:1099, 10.0.1.45:1099]
17:08:27,130 INFO  [org.jboss.ha.core.framework.server.DistributedReplicantManagerImpl.jboss6partition] I am (10.0.1.46:1099) received membershipChanged event:
17:08:27,130 INFO  [org.jboss.ha.core.framework.server.DistributedReplicantManagerImpl.jboss6partition] Dead members: 0 ([])
17:08:27,146 INFO  [org.jboss.ha.core.framework.server.DistributedReplicantManagerImpl.jboss6partition] New Members : 1 ([10.0.1.45:1099])
17:08:27,146 INFO  [org.jboss.ha.core.framework.server.DistributedReplicantManagerImpl.jboss6partition] All Members : 2 ([10.0.1.46:1099, 10.0.1.45:1099])
17:08:27,255 INFO  [org.hornetq.core.server.cluster.impl.BridgeImpl] Bridge sf.my-cluster.8623b9ae-d03f-11e0-b604-005056ab0077 is connected [da62219f-cddf-11e0-93b2-005056ab0078-> sf.my-cluster.8623b9ae-d03f-11e0-b604-005056ab0077]


PROBLEMAS AL ARRANCAR

En caso de no arrancar JBoss en clúster puede deberse a:
    La documentación menciona que debe estar habilitado el multicast en la red o subred en donde se encuentran los nodos para un correcto arranque. Para probar el multicast realizar:
En el primer nodo:
        Colocarse en JBOSS_HOME/server/[INSTANCIA]/lib
        Ejecutar: java -cp jgroups.jar org.jgroups.tests.McastReceiverTest -mcast_addr 224.10.10.10 -port 5555
En el segundo nodo:
        Colocarse en JBOSS_HOME/server/[INSTANCIA]/lib
        Ejecutar: java -cp jgroups.jar org.jgroups.tests.McastSenderTest -mcast_addr 224.10.10.10 -port 5555
    El envío de mensajes se debe desplegar en la consola que recibe
    Si se está trabajando con Windows verificar que tanto el protocolo de internet versión 4 como el 6 (TCP/IPv6, TCP/IPv4) están habilitados de lo contrario JBoss mandara un WARNING indicando este problema en la consola al momento de iniciarlo
        Puertos bloqueados por algún Firewall (ver Habilitar puertos de Firewall)

Proteger consolas

    JBoss 6.1 viene por default con 3 Consolas habilitadas y sin protección alguna (a excepción de Admin console cuya contraseña es admin) y una aplicación de inicio ROOT.WAR la cual se muestra al momento de colocar la ip en el puerto en un explorador
    Admin console
        Esta consola viene ya protegida sin embargo es necesario cambiar la contraseña ya que por default es admin
        Cambiar la contraseña editando el archivo:


JBOSS_HOME\server\[INSTANCIA]\conf\props\jmx-console-users.properties


# A sample users.properties file for use with the UsersRolesLoginModule
# admin=admin
admin=NUEVACONTRASEÑA

    JMX console
        Des comentar el constraint para seguridad en el archivo:

JBOSS_HOME\common\deploy\jmx-console.war\WEB-INF\web.xml

...
   <!-- A security constraint that restricts access to the HTML JMX console
   to users with the role JBossAdmin. Edit the roles to what you want and
   uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
   secured access to the HTML JMX console.
-->
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>
  
...

    Cambiar la contraseña editando el archivo:


JBOSS_HOME\server\[INSTANCIA]\conf\props\jmx-console-users.properties

    NOTA: esta contraseña está compartida por admin-console, si ya se hizo el cambio ya no es necesario volver a cambiarla.


# A sample users.properties file for use with the UsersRolesLoginModule
# admin=admin
admin=NUEVACONTRASEÑA

    Web Service Console
        Des comentar el constraint para habilitar la seguridad en el archivo:

JBOSS_HOME\common\deploy\jbossws-console.war\WEB-INF\web.xml

...
  <!-- A security constraint that restricts access
-->

   <security-constraint>
     <web-resource-collection>
       <web-resource-name>ContextServlet</web-resource-name>
       <description>An example security config that only allows users with the
         role 'friend' to access the JBossWS console web application
       </description>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>friend</role-name>
     </auth-constraint>
   </security-constraint>
  
...

    Cambiar la contraseña editando el archivo:


JBOSS_HOME\server\[INSTANCIA]\conf\props\jbossws-users.properties


# A sample users.properties file for use with the UsersRolesLoginModule
kermit=NUEVA CONTRASEÑA
c.    Comentar la opción unauthenticatedIdentity en el archivo:
JBOSS_HOME\server\[INSTANCIA]\conf\login-config.xml
<application-policy name="JBossWS">
    <authentication>
      <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
        flag="required">
        <module-option name="usersProperties">props/jbossws-users.properties</module-option>
        <module-option name="rolesProperties">props/jbossws-roles.properties</module-option>
<!--        <module-option name="unauthenticatedIdentity">anonymous</module-option> -->
      </login-module>
    </authentication>
  </application-policy>

Instalar como servicio

    Descargar la versión jboss-native para la arquitectura deseada (x86 o x64). Las versiones están disponibles en:

Subversion/FichasTecnicas/Alejo/Software/ jboss-native-2.0.9-windows-x64-ssl (para este caso en particular)

    Descomprimir el archivo jboss-native-2.0.9-windows-x64-ssl y copiar las carpetas binv y licenses en el directorio JBOSS_HOME.
        Los archivos se debe SOBREESCRIBIR
    Configurar el servicio
        Editar el archivo (agregando y modificando) JBOSS_HOME/bin/service.bat adecuando los siguientes parámetros a lo necesario:


...
set SVCNAME=JBAS61SVC
set SVCDISP=JBoss Application Server 6.1
set SVCDESC=JBoss Application Server 6.1.0 GA/Platform: Windows x64


REM Suppress killing service on logoff event
set JAVA_OPTS=-Xrs


rem Setup JBoss specific properties
set JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxNewSize=256m -XX:NewSize=256m -XX:+DisableExplicitGC


REM Figure out the running mode

if /I "%1" == "install"   goto cmdInstall
if /I "%1" == "uninstall" goto cmdUninstall
if /I "%1" == "start"     goto cmdStart
if /I "%1" == "stop"      goto cmdStop
if /I "%1" == "restart"   goto cmdRestart
if /I "%1" == "signal"    goto cmdSignal
echo Usage: service install^|uninstall^|start^|stop^|restart^|signal

...

:cmdStart
REM Executed on service start
del .r.lock 2>&1 | findstr /C:"being used" > nul
if not errorlevel 1 (
  echo Could not continue. Locking file already in use.
  goto cmdEnd
)
echo Y > .r.lock
jbosssvc.exe -p 1 "Starting %SVCDISP%" > run.log
call run.bat -b 10.0.1.46 -c all -Djboss.messaging.ServerPeerID=2 -g jboss6partition < .r.lock >> run.log 2>&1
jbosssvc.exe -p 1 "Shutdown %SVCDISP% service" >> run.log
del .r.lock
goto cmdEnd

...

jbosssvc.exe -p 1 "Restarting %SVCDISP%" >> run.log
call run.bat -b 10.0.1.46 -c all -Djboss.messaging.ServerPeerID=2 -g jboss6partition < .r.lock >> run.log 2>&1
jbosssvc.exe -p 1 "Shutdown %SVCDISP% service" >> run.log
del .r.lock
...

    Instalar el servicio
        Abrir una consola COMO ADMINISTRADOR, colocarse en JBOSS_HOME/bin y ejecutar:


service.bat install

"5"


Encriptación de contraseña datasource

    Colocarse en JBOSS_HOME en una consola y ejectutar:


java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.SecureIdentityLoginModule TUPASSWORD

    Donde:
        TUPASSWORD: Es la clave de conexión a base de datos en el archivo *-ds.xml


    Agregar la política de seguridad en el archivo:


JBOSS_HOME\server\[INSTANCIA]\conf\login-config.xml
    <application-policy name="NOMBRE_POLITICA">
            <authentication>
                  <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
        <module-option name="username">USUARIO_BD</module-option>
        <module-option name="password">PASSWORD_ENCRIPTED</module-option>
        <module-option     name="managedConnectionFactoryName">jboss.jca:name=NOMBRE_JNDI_BD,service=LocalTxCM</module-option>
                  </login-module>
           </authentication>
        </application-policy>

    Donde:


    NOMBRE_POLITICA: Cualquier nombre que se le desea dar a la política
    USUARIO_BD: Nombre de usuario de acceso a la base de datos
    PASSWORD_ENCRIPTED:  Contraseña encriptado, es el resultado del paso 1
    NOMBRE_JNDI_BD: Nombre JNDI de la conexión a base de datos

    Modificar el archivo JBOSS_HOME\server\[INSTANCIA]\deploy\*-ds.xml de tal forma que ya no contenga ni el usuario ni la contraseña, como se muestra a continuación:


<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
        <jndi-name>siac</jndi-name>
        <connection-url>jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)(host=148.204.14.111)(port=1521)))(connect_data=(SERVER=DEDICATED)(service_name=DESCENAC)))</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <security-domain>NOMBRE_POLITICA</security-domain>
    </local-tx-datasource>
</datasources>


    Donde:
        NOMBRE_POLITICA: Nombre que se le dio a la política en el archivo login-config.xml


Datasource con Oracle Real Application Clusters (RAC)
Ejemplo de conexión a RAC:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
    <jndi-name>JNDI_NAME</jndi-name>
    <connection-url>jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)(address=(protocol=tcp)(host=10.0.2.205)(port=1521))(address=(protocol=tcp)(host=10.0.2.206)(port=1521))(address=(protocol=tcp)(host=10.0.2.207)(port=1521)))(connect_data=(service_name=IPN)(failover_mode=(type=select)(method=basic))))</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>USER_NAME</user-name>
        <password>PASSWORD</password>
    </local-tx-datasource>
</datasources>

Logger

    Modificar el archivo: JBOSS_HOME\server\[INSTANCIA]\deploy\jboss-logging.xml para que solo envíe mensajes de nivel WARNING en adelante. Dado que los INFO no son importantes en un ambiente de producción, mucho menos los TRACE y DEBUG.


...
   <periodic-rotating-file-handler
         file-name="${jboss.server.log.dir}/server.log"
         name="FILE"
         autoflush="true"
         append="true"
         suffix=".yyyy-MM-dd">  <!-- To roll over at the top of each hour, use ".yyyy-MM-dd-HH" instead -->

      <error-manager>
         <only-once/>
      </error-manager>

      <level name="WARN"/>

      <formatter>
         <!-- To revert back to simple stack traces without JAR versions, change "%E" to "%e" below. -->
         <!-- Uncomment this to get the class name in the log as well as the category
         <pattern-formatter pattern="%d %-5p [%c] %C{1} (%t) %s%E%n"/>
         -->
         <!-- Uncomment this to log without the class name in the log -->
         <pattern-formatter pattern="%d %-5p [%c] (%t) %s%E%n"/>
      </formatter>
   </periodic-rotating-file-handler>
...


Documento original 

miércoles, 1 de abril de 2015


Luego de dañar flashplayer en ubuntu 14, lo solucione de la siguiente manera.

sudo add-apt-repository ppa:skunk/pepper-flash
sudo apt-get update
sudo apt-get install pepflashplugin-installer
sudo mkdir -p /opt/google/chrome/PepperFlash
sudo ln -s /usr/lib/pepflashplugin-installer/libpepflashplayer.so /opt/google/chrome/PepperFlash

Luego

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install freshplayerplugin

En esta dirección esta detallado

http://askubuntu.com/questions/521234/my-flashplugin-doesnt-work-on-firefox

martes, 31 de marzo de 2015

JSF EL Operadores relacionales


Se utiliza estos operadores con la finalidad de evitar referencias de entidad en las sintaxis XML


  • == and eq
  • !=  and ne
  • <   and lt
  • >   and gt
  • <= and le
  • >= and ge



martes, 18 de marzo de 2008