Si tienes tu lista de usuarios, roles y sus permisos en una base de datos de Oracle, puedes configurarlo de ésta forma. Pero ¿cómo hacemos para asignar permisos individuales a un usuario? Con el JDBCRealm lo podemos hacer creando un rol específico por cada usuario. Por ejemplo, si tenemos un usuario ‘cirovladimir’, podría tener los roles: ‘admin’, ‘developer’ y ‘cirovladimir’. Este último es el rol que sólo asignaremos al usuario, y por tanto, los permisos asignados a este rol sólo corresponderán al usuario.

También podrías hacerlo creando tu propio Realm que herede de JDBCRealm, pero eso sería mucho más complicado :P

Fuentes:
http://shiro.apache.org/java-authorization-guide.html

Necesitaba agregar un encabezado a un servicio REST de acuerdo a un parámetro. Para poder hacer esto, necesitas tener acceso a un objeto javax.ws.rs.core.Response de la siguiente manera

    @GET
    @Path("descarga")
    public Response getContenidoDocumento(@QueryParam("documento")String idDocumento,@QueryParam("formato")String formato){
        try {
            if (formato == null)
                formato = "pdf";
            Documento documento = Documento.getDocumento(idDocumento);
                if (formato.equals("pdf")) {
                        return Response.ok(documento.getPDF(),"application/pdf").header("Content-Disposition",
                                "attachment;filename=documento.pdf").build();
                } else if (formato.equals("rtf")) {
                        return Response.ok(documento.getRTF(),"application/rtf").header("Content-Disposition",
                                "attachment;filename=documentos.rtf").build();
                }
                return Response.status(Status.BAD_REQUEST).build();
        } catch (Exception exc) {
            throw new WebApplicationException(exc, Status.INTERNAL_SERVER_ERROR);
        }
    }

GWT cuenta con varias clases para el manejo y manipulación de datos en formato json.

Supongamos que obtenemos la siguiente respuesta del servidor

{“id”:”766″,”nombre”:”cirovladimir”}

Para obtener los valores, lo podemos hacer de la siguiente manera

JSONValue value=JSONParser.parseStrict(json);
String id=value.isObject().get(“id”).isString().stringValue();
String nombre=value.isObject().get(“nombre”).isString().stringValue();

Pero, ¿qué pasa si uno de los valores es nulos? ¿cómo podemos hacer una validación? Supongamos ahora que el servidor nos regresa la siguiente cadena

{“id”:”766″,”nombre”:null}

value.isObject().get(“nombre”)==null //debería ser true, sin embargo, regresa false
value.isObject().get(“nombre”).isNull()==JSONNull.getInstance() //regresa true, esta es la forma correcta

Al intentar utilizar la librería JODConverter para convertir algunos documentos del formato RTF a PDF, la aplicación me arrojaba el siguiente error

java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

Esto se debe a que la librería jodconverter tiene una dependencia hacia slf4j-api, la cuál no contiene ninguna implementación, y por ende, es necesario agregar una implementación de esa API. Para ello, agregué la siguiente dependencia a mi proyecto y quedó resuelto el problema.

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.4.3</version>
        </dependency>

Asegurate de que las versiones de las librerías coincidan, de lo contrario te arrojará el siguiente error

java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.LoggerFactory

Para ver si estás utilizando versiones diferentes de las librerías, abre el archivo pom.xml y selecciona la pestaña inferior ‘Dependency Hierarchy’, luego busca ‘slf4j’ para ver que versiones fueron resueltas.

Fuentes:
http://stackoverflow.com/questions/3737992/noclassdeffounderror-org-slf4j-impl-staticloggerbinder

En un proyecto, por error, agregué una carpeta al control de versiones. Para quitarla intenté hacerlo con la opción de “Add to svn:ignore”, sin embargo, ésta estaba desactivada.

Luego intenté eliminarla y hacer un ‘commit’ para que quedará fuera del control de versiones, pero me marcaba el siguiente error

commit -m “Elimine el directorio WAR para quitarlo del control de versiones.” (8 paths specified)
    Deleting       /home/cirovladimir/Projects/Eclipse/tsj.judicatura.web/war
    Transmitting file data …
    Transaction is out of date
svn: Commit failed (details follow):
svn: Desactualizado: ‘/Java/Eclipse/tsj.judicatura.web/war’ en transacción ’1219-1′

Asegurate de hacer un respaldo de la carpeta -teniendo cuidado de no copiar las carpetas ‘.svn’-. Abre la ventana ‘SVN Repositories’ (Disponible en la perspectiva Team Synchronization), selecciona la carpeta y da clic en ‘Delete’. Una vez que la elimines, seguirá estando en tu ‘working directory’, así que ve a la ventana Project Explorer o Package Explorer da clic derecho en tu proyecto y luego en ‘Team -> Update to HEAD’, esto eliminará la carpeta y sus contenidos. Copia nuevamente la carpeta de tu respaldo a tu directorio de trabajo y asegurate, esta vez, de excluirla del control de versiones mediante ‘Team->Add to svn:ignore..’

Fuentes:
http://stackoverflow.com/questions/1066809/subclipse-svnignore

Para renombrar archivos en git lo puedes hacer con el comando

git mv original nuevo

Si ya renombraste un archivo desde el explorador de archivos, no importa, git se dará cuenta del cambio que hiciste cuando hagas un commit. No importa que el comando git status muestre que se eliminó un archivo (original) y que hay otro pendiente de rastrear (nuevo). Para que te muestre correctamente que el archivo ha sido renombrado, intenta el siguiente comando

git commit –dry-run -a

Fuentes:
http://stackoverflow.com/questions/2641146/handling-file-renames-in-git 

Para renombrar, primero cierra el proyecto en Qt Creator. Abre una terminal y ve al directorio donde esta el archivo con extensión ‘.pro’ y renombralo.

mv miproyecto.pro elproyecto.pro

Vuelve a abrirlo en Qt Creator y ya debería aparecerte con el nuevo nombre :D

Fuentes:
http://www.qtcentre.org/threads/26845-Copy-Rename-project 

Al abrir un proyecto en Qt Creator, lo primero que me apareció fue el asistente de configuración.

Este te permite configurar los objetivos -targets- de compilación, es decir, que ejecutables quieres que se generen. Hubo una opción que me llamó la atención, la de “Use Shadow Building”. Nunca había escuchado algo por el estilo, así que investigando un poco encontré la siguiente definición.

Shadow building means building a project in a separate directory, the build directory. The build directory is different from the source directory. One of the benefits of shadow building is that it keeps your source directory clean. Shadow building is the best practice if you need many build configurations for a single set of source.

Lo cuál quiere decir que los ejecutables quedarán (ó deberán estar) en una carpeta fuera de la carpeta de tu proyecto para mantener el código de tu aplicación limpio y en orden.

La mejor forma para declarar e inicializar un Hashmap la encontre aquí. Simplemente tienes que utilizar una clase anónima de la siguiente manera:

//El siguiente método espera un Hashmap cómo parámetro
json.writeValueAsString(new Hashmap<String, String>(){{put(“key1″,”value1″);put(“key2″,”value2″)}});

Recientemente he tratado de utilizar Google Chrome como navegador predeterminado (debido a la rápidez que ofrece) a pesar de que no tiene funciones que a mi me son de mucha utilidad -p. ej. CTRL+TAB para intercambiar pestañas de forma MRU, no puedes poner etiquetas a tus favoritos, etc.- Además de estos problemas, al utilizar scribefire y querer agregar mi blog de worpdress jamás logra completar el proceso de autorización (esto puede ser por un error en scribefire pero en firefox no sucede así).

Entonces para agregar un blog de wordpress a scribefire en Google Crhome necesitas hacerlo manualmente, es decir, llenar todos los campos a la hora de agregar el blog de la siguiente manera

Asegurate que el campo API URL quede http://tublog.wordpress.com/xmlrpc.php

Listo! Con eso ya podrías agregar tu blog de wordpress a scribefire :D

Seguir

Get every new post delivered to your Inbox.

Únete a otros 195 seguidores