domingo, 2 de noviembre de 2014

Java: JBoss - Configuration of Persistence with JPA and MySQL

Java: JBoss - Configuración de Persistencia con JPA...

¿Cómo configurar el Data Source (MySQL) y persistencia con JBOSS (7.1.1) y JPA en un proyecto Java?


Si queremos usar persistence JPA con JBoss y MySQL podemos hacer lo siguiente para configurar el Datasource de MySQL y buestra base de datos:

1) Instalar JBoss-as-7.1.1.Final


Primero debemos tener instalados JBoss (por ejemplo jboss-as-7.1.1.Final).

2) MYSQL connector


Bajar el JAR de mysql connector e instalarlo en <DIR_de_install>\modules\com\mysql\main\:

Por ejemplo:
C:\jboss-as-7.1.1.Final\modules\com\mysql\main\mysql-connector-java-5.1.33-bin.jar

Editar C:\jboss-as-7.1.1.Final\modules\com\mysql\main\module.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--  

C:\jboss-as-7.1.1.Final\modules\com\mysql\main\mysql-connector-java-5.1.33-bin.jar

  ~ JBoss, Home of Professional Open Source.  
  ~ Copyright 2010, Red Hat, Inc., and individual contributors  
  ~ as indicated by the @author tags. See the copyright.txt file in the  
  ~ distribution for a full listing of individual contributors.  
  ~  
  ~ This is free software; you can redistribute it and/or modify it  
  ~ under the terms of the GNU Lesser General Public License as  
  ~ published by the Free Software Foundation; either version 2.1 of  
  ~ the License, or (at your option) any later version.  
  ~  
  ~ This software is distributed in the hope that it will be useful,  
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of  
  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  
  ~ Lesser General Public License for more details.  
  ~  
  ~ You should have received a copy of the GNU Lesser General Public  
  ~ License along with this software; if not, write to the Free  
  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  
  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org. 
  -->  

<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.33-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
  </dependencies>
</module>


3) Agregar el Datasource en JBoss


Editar standalone.xml de JBoss:


    <datasources>
             
<datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="true"
                      use-java-context="true" jta="true" use-ccm="true" pool-name="MysqlDS">
<connection-url>jdbc:mysql://localhost:3306/MY_DATA_BASE</connection-url>
<driver>mysql</driver>
<pool>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>USER</user-name>
<password>my_sql_pass</password>
</security>
</datasource>
                <drivers>
  
<driver name="mysql" module="com.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>
                </drivers>
            </datasources>
         

 4) Configurar Persistence en el proyecto


Editar o agregar: src/META-INF/persistence.xml

 <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
   <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:jboss/datasources/MysqlDS</jta-data-source>
      <!-- "java:jboss/datasources/MysqlDS" apunta al datasource del archivo STANDALONE.XML de JBOSS  -->
      <!-- Alli esta configurada jdbc:mysql://localhost:3306/MY_DATA_BASE  -->
      <class>package.domain.entity.MyTableEntity</class>
   
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>
</persistence>

 4) Configurar EntityManagerFactory en el código

...
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = entityManagerFactory.createEntityManager();
...

5) Lanzar JBoss

Si todo está bien JBoss debería loguear las líneas siguientes (en log o en consola):
...
20:14:33,717 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010404: Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1)
...
20:14:35,941 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source [java:jboss/datasources/MysqlDS]
...
20:14:36,037 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "RentalHousingWebService.war"
20:14:37,258 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) JBAS011401: Read persistence.xml for persistenceUnit
...





martes, 28 de octubre de 2014

SVN: Tree conflicts Solution

Solución de conflictos de árbol (Tree conflicts solution):

[user@dev]$ svn st
...
!     C t/unit/models/Toolbox/Restrictions
     >   local delete, incoming edit upon merge
Summary of conflicts:
 Tree conflicts: 32

[user@dev]$ mkdir t/unit/models/Toolbox/Restrictions
[user@dev]$ svn revert t/unit/models/Toolbox/Restrictions
Reverted 't/unit/models/Toolbox/Restrictions'

[user@dev]$ svn st
...
?       t/unit/models/Toolbox/Restrictions
Summary of conflicts:
 Tree conflicts: 31

#Luego enviar los cambios

Reference:
http://stackoverflow.com/questions/4317973/svn-how-to-resolve-local-edit-incoming-delete-upon-update-message
http://svnbook.red-bean.com/en/1.7/index.html

jueves, 23 de octubre de 2014

SVN: Machete de comandos mas usados

Status
svn st

Checkout
svn co https://URL/branches/branch --ignore-externals


Reintegrate del trunk
trunk]$ svn up --ignore-externals
trunk]$ svn merge ^/branches/branch --reintegrate
trunk]$ svn ci -m "message"

Enviar cambios

svn ci -m "msg”

svn commit PATH -m "Message"

Revertir cambios locales
svn revert . -R

Update
svn update --ignore-externals
svn up --ignore-externals



Referencias:
- https://code.google.com/p/relaxtives/wiki/Subversion



SVN: Crear y aplicar un Patch

Crear y aplicar un Patch



svn diff > ~/BUG_FIXED_.diff

patch -p0 -i ~/BUG_FIXED_.diff




Patch para volver a hacer un commit revertido:



Si el commit revertido fue r999 y su commit anterior r998, como indica el log:
svn log -l2
------------------------------------------------------------------------
r999 | dario | 2015-01-13 17:32:35 +0000 (Tue, 13 Jan 2015) | 1 line
MY COMMIT: comment.
------------------------------------------------------------------------
r998 | juan | 2015-01-13 12:53:00 +0000 (Tue, 13 Jan 2015) | 1 line
PREVIOUS COMMIT: comment.


Se puede hacer un diff de la siguiente manera:


svn diff -r r998:r999 > Patch_MY_COMMIT.diff


Luego aplicamos el Patch:


patch -p0 -i Patch_MY_COMMIT.diff



Referencia:
- Quick-n-Dirty Guide to Creating and Applying diff-style Patches.
- Crear y aplicar parches (patches) en Linux.


SVN: Log (Consultar Historial)

¿Cómo recuperar información histórica de commits y revisiones?



Traigo mis commit
svn log -l 100 | grep USER
svn log -l 100 | grep -A 3 -B 3 USER

Todos los commit de un usuario entre dos fechas:
svn log -r '{2010-12-10}:{2010-12-11}'|sed -n '1p; 2,/^-/d; /USER/,/^-/p'
svn log -r '{2014-09-23}:{2014-10-15}'|sed -n '1p; 2,/^-/d; /USER/,/^-/p' > $HOME/resultado_USER_commits.log

Revisar commits de una revisión dada
svn log -r NRO_REVISION -v
svn log --revision NRO_REVISION

Revisar commits de un rango de revisión dado
svn log -r NRO_REVISION_1:NRO_REVISION_2

Listar commit entre fechas
svn log -v -r {2014-05-23}:{2014-05-28} --xml > $HOME/resultado_log_entre_fechas.xml
svn log -v -r {2014-08-20}:{2014-08-24} > $HOME/resultado_log_entre_fechas.log

Listar historia de un archivo
svn log FILE

Listar últimos 5 commit
svn log -l 5 -v

Show author and revision information inline for the specified files or URLs
svn blame -v filename
svn blame -v filename > $HOME/resultado_blame.xml


Referencias:

lunes, 20 de octubre de 2014

SVN: Rollback commit (revert revision)


Revertir los cambios de una revisión

¿Cómo deshacer un commit o una revisión?
Podemos querer revertir (deshacer) un commit que hicimos o volver a una revisión pasada.

Si queremos revertir un commit que hicimos con numero_de_revision dado, la forma general es:
                svn merge -r -numero_de_revision url-del-repositorio
... y despues hacer commit.

#Otra manera:
svn merge -c -1003 file:///path/my_project/trunk
svn commit -m "Rollback de la revisión 1003 (revert commit 1003)"

O podemos querer volver a una revisión pasada. La forma general es:
                svn merge -r version-actual:version-anterior url-del-repositorio
... y despues hacer commit.

#Por ejemplo:
svn merge -r 1003:1002 http://repo/project/trunk
svn commit -m "Revert a la revisión 1002"

#Otra forma:
cd ruta/de/miproyecto/
svn merge -r 1003:1002
svn commit -m "Reversión de cambios del ultimo commit"

#Otra
svn merge -r 1003:1002 .
svn commit -m "Rollback de la revisión 1003"

#También podemos indicar tan solo un dir o un archivo al que volver (no toda la rama).
svn merge -r HEAD:543 my_file.pm

#Una forma simulada:
svn merge --dry-run -r 1003:1002 http://repo/project/trunk
#La opción --dry-run lo que hace es mostrarte en la terminal el resultado del merge si hacerlo realmente.

#Si quieremos ver exactamente que cambiará en cada archivo y cada dir, también puedes hacer un:
svn diff -r 1003:1002 http://repo/project/trunk


lunes, 13 de octubre de 2014

Java: Static Analysis

Inspección y análisis de código Java.



1) Complejidad ciclomática (Cyclomatic Complexity)



2) Covertura de test (Coverage)



3) Análisis de dependencia (Dependancy Analysis)



4) Análisis de Bytecode  (Bytecode Analysis)



5) Análisis de código fuente (Source Code Analysis)


6) Monitoreo de memoria


JPS es similar a PS de linux y sirve para averiguar los procesos que estan corriendo en la VM java. Y JSTAT es una herramienta para benchmark para java incluida en el JDK.
Ejemplo para consultar la memoria PermGen que esta utilizando el proceso 666:

       jstat -gcpermcapacity 666


Ejemplo: jconsole processID



Referencia:
-Top 5 Static Analysis Plugins for Eclipse.
-Memoria PermGen en Java.
-Oracle: Using Jconsole.
-5 things you didn't know about ... Java performance monitoring, Part 2.
-InstallVisualVM and JSTAT.