30 de enero de 2013

Oracle: 'Debemos arreglar la seguridad en Java'

Imagen por :-Derek
'Debemos arreglar la seguridad en Java', reconocen dos empleados de alto nivel de Oracle [1].

Milton Smith, Lider de Seguridad de Java, y Donald Smith, Director de Desarrollo de Producto en OpenJDK, tuvieron una conferencia telefónica con varios líderes de los grupos de usuarios de Java (JUGs) [2].

Cuando se les cuestionó porqué el instalador de Java también instala la barra de herramientas de Internet del sitio Ask.com, comentaron: 'Esto es algo que Sun inició [...] No puedo discutir el asunto.'

También, ante la pregunta si Java se podría actualizar automáticamente como ya lo hace el navegador Google Chrome y el plugin de Adobe Flash, respondieron: "No hay planes [...] podría ser".

Parafraseando la cancion de Carly Rae Jepsen: 'Hey, Java's broken, and this is crazy, but here’s my bytecode, so fix it, maybe?'

[1] Referencia: JAXenter.
[2] Publicacón de Oracle con el audio: Oracle Speaks up on Java Security.

13 de diciembre de 2012

Maven: directorio con JAR de dependencias

En Java, si a tí te gusta como a mí tener en un subdirectorio los JARs de los que depende un ejecutable, pero también usas Apache Maven, seguro te preguntaste cómo crearlo.

Como sabes, Maven se usa para administrar las dependencias de un projecto en Java. Sin embargo, cuando se construye el proyecto sólo crea el JAR del mismo. Para que cree un subdirectorio que contenga los JARs de las dependencias, es necesario configurar el maven-dependency-plugin en el archivo pom.xml. Además, para que el archivo META-INF/MANIFEST.MF contenga el classpath apuntando a dicho subdirectorio, es necesario configurar el maven-jar-plugin:


<build>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>2.4</version>
         <configuration>
            <archive>
               <manifest>
                  <!-- agrega el classpath al archivo MANIFEST.MF-->
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib-${project.version}/</classpathPrefix>
               </manifest>
            </archive>
         </configuration>
      </plugin>

      <plugin>
         <!-- crea un directorio que contenga los JARs de las dependencias -->
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>2.6</version>
         <executions>
            <execution>
               <id>copy-dependencies</id>
               <phase>package</phase>
               <goals>
                  <goal>copy-dependencies</goal>
               </goals>
               <configuration>
                  <outputDirectory>${project.build.directory}/lib-${project.version}</outputDirectory>
                  <includeScope>compile</includeScope>
                  <!-- en particular, no incluir las dependencias con scope test -->
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>

11 de diciembre de 2012

Sybase: permitir entrar sólo al dbo

En Sybase ASE 15, se puede modificar una base de datos para que sólo pueda entrar el usuario dbo. Para ello, activar el parámetro dbo_use_only:


use master
exec sp_dboption DBName, 'dbo_use_only', true
use BASEDEDATOS
checkpoint


y para regresar el atributo, poner su valor en false.

6 de diciembre de 2012

El nuevo recolector de basura de Java 7

En la Java Virtual Machine, el recolector de basura (garbage collector) libera espacios de memoria que ya no se usan. En Java 6 y anteriores, la memoria se divide en tres espacios contiguos. En Java 7, el nuevo recolector G1 divide la memoria en múltiples regiones contiguas de memoria.



Otra característica interesante del recolector G1 es que compacta la memoria usada en dichas regiones usando múltiples hilos de ejecución.

Se recomienda el uso cuando se tiene 6 Gb o más de heap, y se requiere que el recolector provoque pausas predecibles menores a medio segundo. En cambio, se recomienda seguir usando los recolectores de Java 6 y anteriores si estos no provocan pausas prolongadas en la JVM.

Referencia: Getting started with the G1 Garbage Collector.