Ahora tenemos configurado el jboss para trabajar con conexiones jta de oracle, ahora creare un proyecto Maven, la gracia de trabajar con maven es agregar las dependencias y librerias de forma semi automatica editando un archivo pom.xml este archivo tiene una estructura que definiendo unos arquetipos maven es capaz de obtener de sus repositorios todas las dependencias de librerias necesaria para formar un proyecto java para utilizando varias tecnologias.
La diferencia de una aplicacion J2EE estandar es que no utiliza Ant para construir el classpath y poder compliar las clases java, por lo que en algunos estandares o empresas no esta bien aceptado este metodo, por lo que eh tenido problemas para armar aplicaciones con Maven, lo cual tuve que volver a armar un proyecto web dinamico y agregando manualmente todos los jar al proyecto.
En la imagen siguiente agregaremos el nombre base de los artefactos a construir:
La estructura inicial del archivo pom.xml sera:
4.0.0EjemploEjemplo0.0.1-SNAPSHOTEjemploEjemplo
Agregaremos los tag properties que se utlizan para agregar variables comunes para todos los artefactos que agregaremos:
Como se ve estamos agregando al repositorio las versiones de Spring y richfaces que utilizaremos al hacer referencia al tag "version" se llamara al properties que contiene este valor.
Ahora empezaremos agregar dependencias al archivo:
Antes de comenzar la guia repasare la estrucutrua del servidor, lo que queremos hacer es agregar un nuevo modulos al Jboss que se capaz de comunicarnos con una Base de datos Oracle 11G. El servidor cuenta con varios modulos ya integrados como x ej , hibernate , richfaces, etc.
Estos modulos forman parte de una estructura de directorios y librerias que vienen alojados en el servidor con un archivo de configuracion "module.xml" que describe de donde tiene que obtener las librerias para cargar el modulo en el servidor.
Ahora un ejemplo del modulo de hibernate seria el siguiente:
Si queremos agregar un nuevo modulo debemos agregarlo en un classpath definido en "modules".
Un el archivo de configuracion del modulo tiene este contenido:
Cabe destacar que el jboss viene preparado para soportar hibernate por lo que si queremos usarlo solo debemos crear el JNDI en la consola de admisntracion o directamente en el archivo standalone.xml.
Ahora procederemos a crear un modulo para conectarnos a una BD Oracle 11G:
El archivo .index se crea cuando se carga el modulo con el jboss al primer reinicio.
El archivo Module.xml tiene este contenido:
Ahora configuraremos el driver con una conexion JTA en el servidor jboss, para ello debemos editar el archivo standalone.xml:
Dentro del TAG "data-sources" agregaremos lo siguiente:
En realidad es la:
Spring Tool Suite
Version: 3.3.0.RELEASE
Build Id: 201307092139
pasos a seguir:
En el eclipse marketplace buscar y instalar la herramienta JBOSS TOOLS que trae la suit completa de administracion del servidor de aplicaciones de redhat, ahora cabe destacar que deben elegir bien la version de eclipse que tiene instalada.
Luego de instalarla ir a: el menu windows -> preferencias:
En la pestaña runtime environments , elegimos un nuevo servidor:
elegir el servidor Jboss 7.0:
Descargar el jboss:
Ahora cabe destacar que la version certificada para Java EE6 es la 6 Final. Desde la version 7.X no estan certificadas por lo que no respeta el standart, ya que estas traen muchas librerias incluidas en jaboss que no forman parte del standart de J2EE6.
Despues de descargar aparece en la lista de servidores :
Ahora todas estas configuracion son editables via consola de administracion, (que a decir verdad es bien rustica en comparacion con la de WEBLOGIC solucion privativa de Oracle), esta condiguracion esta disponible en un archivo de configuracion .XML en mi caso ubicado en:
Ahora que se tiene instalador como se puede configurar una conexion JTA con Oracle o Sql server?, utilizar hibernate, Spring , Maven, etc en el proximo post Parte 2.
Importante es identificar el tipo de señal a programar, aveces no son las mismas que Linux, si la excepcion no esta programada, da una salida por defecto, ej:
Si la rutina no esta programa este proceso da un core al finalizar el proceso. Ej señal tratamiento de señales.
Ahora la funcion que captura la señal y realiza la accion al caputar la señal 31 es:
/*funcion que cambia el valor de la configuracion de parametros adicionales*/
void apps_parametros(int v)
{
int cola_WRITE;
char temp[256];
int f=0;
//struct sigaction act, oact;
//act.sa_handler = SIG_IGN;
//sigemptyset(&act.sa_mask);
//act.sa_flags = 0;
//sigaction(SIGXFSZ, &act, &oact);
if (transaccion == 1) {
interpretaREQ(texto_resp);
sprintf(temp, "%s", mensajeOUT);
cola_WRITE = creacola(COLA_ESCRITURA);
if (strcmp(InMsg.szTipoIPC, "IPC_Input") != 0)
insertacola(cola_WRITE, temp, tipo);
}
if(strcmp(DatosAdicionales,"off")==0 && f==0){
//agregar el cambio del FLAG al LOG
syslog(LOG_DEBUG,"Cambio el valor de DATOS_ADICIONALES=ON.");
strcpy(DatosAdicionales,"on");
f=1;
}else if(strcmp(DatosAdicionales,"on")==0 && f==0){
//agregar el cambio del FLAG al LOG
syslog(LOG_DEBUG,"Cambio el valor de DATOS_ADICIONALES=OFF.");
strcpy(DatosAdicionales,"off");
f=1;
}
}
SeñalesEstándar
Linux soporta las señales estándar listadas a continuación. Muchos
números de señales dependen de la arquitectura, tal como se indica en
la columna "Valor". (Donde aparezcan tres valores, el primero de ellos
es válido normalmente para alpha y sparc, el segundo para i386, ppc y
sh, y el último para mips. Un - indica que una señal no está presente
en la arquitectura correspondiente.)
Las entradas en la columna "Acción" de la tabla especifican la acción
por defecto para la señal de la siguiente manera:
Term La acción por defecto es terminar el proceso.
Ign La acción por defecto es ignorar la señal.
Core La acción por defecto es terminar el proceso y realizar un
volcado de memoria.
Stop La acción por defecto es detener el proceso.
En primer lugar se listan las señales descritas en el estándar POSIX.1
original.
Señal Valor Acción Comentario
----------------------------------------------------------------------
SIGHUP 1 Term Cuelgue detectado en la terminal de
control o muerte del proceso de control
SIGINT 2 Term Interrupción procedente del teclado
SIGQUIT 3 Core Terminación procedente del teclado
SIGILL 4 Core Instrucción ilegal
SIGABRT 6 Core Señal de aborto procedente de abort(3)
SIGFPE 8 Core Excepción de coma flotante
SIGKILL 9 Term Señal de matar
SIGSEGV 11 Core Referencia inválida a memoria
SIGPIPE 13 Term Tubería rota: escritura sin lectores
SIGALRM 14 Term Señal de alarma de alarm(2)
SIGTERM 15 Term Señal de terminación
SIGUSR1 30,10,16 Term Señal definida por usuario 1
SIGUSR2 31,12,17 Term Señal definida por usuario 2
SIGCHLD 20,17,18 Ign Proceso hijo terminado o parado
SIGCONT 19,18,25 Continuar si estaba parado
SIGSTOP 17,19,23 Stop Parar proceso
SIGTSTP 18,20,24 Stop Parada escrita en la tty
SIGTTIN 21,21,26 Stop E. de la tty para un proc. de fondo
SIGTTOU 22,22,27 Stop S. a la tty para un proc. de fondo
Las señales SIGKILL y SIGSTOP no pueden ser capturadas, bloqueadas o
ignoradas.
A continuación se listan las señales que no aparecen en el estándar
POSIX.1 pero que son descritas en SUSv2 y SUSv3 / POSIX 1003.1-2001.
Señal Valor Acción Comentario
-------------------------------------------------------------------------
SIGBUS 10,7,10 Core Error de bus (acceso a memoria inválido)
SIGPOLL Term Evento que se puede consultar (Sys V).
Sinónimo de SIGIO
SIGPROF 27,27,29 A Ha expirado el reloj de perfilado
(profiling)
SIGSYS 12,-,12 C Argumento de rutina inválido (SVID)
SIGTRAP 5 Core Trampa de traza/punto de ruptura
SIGURG 16,23,21 B Condición urgente en conector (4.2 BSD)
SIGVTALRM 26,26,28 A Alarma virtual (4.2 BSD)
SIGXCPU 24,24,30 C Límite de tiempo de CPU excedido
(4.2 BSD)
SIGXFSZ 25,25,31 C Límite de tamaño de fichero excedido
(4.2 BSD)
En las versiones de Linux anteriores a la 2.2 (incluida ésta) el
comportamiento por defecto para SIGSYS, SIGXCPU, SIGXFSZ, y (en otras
arquitecturas distintas a SPARC y MIPS) SIGBUS era terminar el proceso
(sin realizar un volcado de memoria). (En otros Unix’s la acción por
defecto para SIGXCPU y SIGXFSZ es terminar el proceso sin realizar un
volcado de memoria.) Linux 2.4 cumple los requisitos del estándar
POSIX 1003.1-2001 con respecto a estas señales, terminando el proceso
con un volcado de memoria.
A continuación otras señales.
Señal Valor Acción Comentario
------------------------------------------------------------------------------------
SIGIOT 6 Core Trampa IOT. Un sinónimo de SIGABRT
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term Fallo de la pila en el coprocesador (no usada)
SIGIO 23,29,22 Term E/S permitida ya (4.2 BSD)
SIGCLD -,-,18 Ign Un sinónimo de SIGCHLD
SIGPWR 29,30,19 Term Fallo de corriente eléctrica (System V)
SIGINFO 29,-,- Un sinónimo para SIGPWR
SIGLOST -,-,- Term Bloqueo de fichero perdido.
SIGWINCH 28,28,20 Ign Señal de reescalado de la ventana (4.3 BSD, Sun)
SIGUNUSED -,31,- Term Señal no usada.
(La señal 29 es SIGINFO / SIGPWR en la arquitectura alpha pero SIGLOST
en sparc.)
La señal SIGEMT no está especificada en el estándar POSIX 1003.1-2001,
pero sin embargo aparece en la mayoría de Unix’s, donde su
comportamiento por defecto es habitualmente terminar el proceso sin
realizar un volcado de memoria.
La señal SIGPWR (que no está especificada en el estándar POSIX
1003.1-2001) es ignorada habitualmente por defecto en aquellos Unix’s
donde aparece.
La señal SIGIO (que no está especificada en el estándar POSIX
1003.1-2001) es ignorada por defecto en muchos Unix’s.
Este error da al actualizaar Ubuntu instalando la ultima version de Gnome Mate 1.6, estas librerias son dependencias de GTK3.0 por lo que no dejan instalar aplicaciones con este requisito y tampoco hacer upgrade.
sudo apt-get -f install
[sudo] password for lucho:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Corrigiendo dependencias... Listo
Se instalarán los siguientes paquetes extras:
libwayland-client0 libwayland-cursor0
Se instalarán los siguientes paquetes NUEVOS:
libwayland-client0 libwayland-cursor0
0 actualizados, 2 se instalarán, 0 para eliminar y 2 no actualizados.
31 no instalados del todo o eliminados.
Se necesita descargar 0 B/36,7 kB de archivos.
Se utilizarán 155 kB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
(Leyendo la base de datos ... 272362 ficheros o directorios instalados actualmente.)
Desempaquetando libwayland-client0:amd64 (de .../libwayland-client0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb) ...
dpkg: error al procesar /var/cache/apt/archives/libwayland-client0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb (--unpack):
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-client.so.0.1.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
Desempaquetando libwayland-cursor0:amd64 (de .../libwayland-cursor0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb) ...
dpkg: error al procesar /var/cache/apt/archives/libwayland-cursor0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb (--unpack):
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0.0.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
Se encontraron errores al procesar:
/var/cache/apt/archives/libwayland-client0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb
/var/cache/apt/archives/libwayland-cursor0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Solucion: Como el .deb lo deja en el cache del repositorio solo hay que forzar la instalacion.
(Leyendo la base de datos ... 272362 ficheros o directorios instalados actualmente.)
Desempaquetando libwayland-client0:amd64 (de .../libwayland-client0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb) ...
dpkg: aviso: sobreseyendo el problema porque está activa la opción --force:
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-client.so.0.1.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
dpkg: aviso: sobreseyendo el problema porque está activa la opción --force:
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-client.so.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
Desempaquetando libwayland-cursor0:amd64 (de .../libwayland-cursor0_1.2.0-0ubuntu1~13.04~ricotz0_amd64.deb) ...
dpkg: aviso: sobreseyendo el problema porque está activa la opción --force:
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0.0.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
dpkg: aviso: sobreseyendo el problema porque está activa la opción --force:
intentando sobreescribir `/usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0', que está también en el paquete libwayland0:amd64 1.0.5-0ubuntu1
Configurando libwayland-client0:amd64 (1.2.0-0ubuntu1~13.04~ricotz0) ...
Configurando libwayland-cursor0:amd64 (1.2.0-0ubuntu1~13.04~ricotz0) ...
Procesando disparadores para libc-bin ...
ldconfig deferred processing now taking place
Hi
i am building an application some kind of hr portal,
here i need to login three types of users 'hr, employee and admin', i am planning to use spring security , i want these three to be logged in in a single loginpage
Now the question is
1 - How to design a login form telling the user to select a user type(hr or emp or admin)
2 - When a user is logged in and control goes to a targeted controlled , how to identify which type of user has logged it (identify logged in user role basically)
If any other best practice of getting three type of users logged in with a single login form and identify the login role ..plesae suggest
Thanks
Example: JSF2.0+ Spring Security
import java.io.IOException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Size;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import org.springframework.stereotype.Component;
import java.security.Principal;
import javax.security.auth.Subject;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
@ManagedBean(name = "authenticationBean")
@RequestScoped
@Component
public class AuthenticationBean {
public Principal principals ;
public Set allPrincipals=null;
public Subject subject=null;
public ArrayList roles = new ArrayList();
public String user = "";
@Autowired
@Qualifier("authenticationManager")
protected AuthenticationManager authenticationManager;
@Size(min = 1, message = "Username cannot be empty")
private String username;
@Size(min = 1, message = "Password cannot be empty")
private String password;
public AuthenticationBean() {
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
/**
* @return
* @throws IOException
* @throws ServletException
*/
public String login() throws IOException, ServletException {
try {
Authentication request = new UsernamePasswordAuthenticationToken(this.username, this.password);
Collection authority = request.getAuthorities();
for (GrantedAuthority granted : authority) {
roles.add(granted.getAuthority());
}
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName(); //get logged in username
Authentication result = authenticationManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse responseHTTP = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest requestHTTP = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
SavedRequest defaultSavedRequest = new HttpSessionRequestCache().getRequest(requestHTTP, responseHTTP);
context.redirect(defaultSavedRequest.getRedirectUrl());
FacesContext.getCurrentInstance().responseComplete();
return null;
} catch (AuthenticationException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
return null;
}
}
public String logout() throws IOException {
this.username = "";
this.password = "";
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect(context.getRequestContextPath() + "/j_spring_security_logout");
FacesContext.getCurrentInstance().responseComplete();
return null;
}
}