Blogs

¿Eres nuevo? ¿Cómo hacer que tus preguntas tengan mas posibilidades de ser respondidas?

Es normal que un usuario al tener un problema con algún programa quiera obtener ayuda de la comunidad y se disponga a escribir en algunos de los foros. Pero, ¿Que pasa cuando al crear el tema este queda como si hubiera sido escrito por un niño de 5 años?
Aquí daré unos tips sobre como hacer que tu pregunta tenga mas chance de ser respondida, mas rápido y con mas ganas de ayudarte por parte de la comunidad.
El mismo propósito de este tema puede parecer innecesario y/o inservible, por varias razones. Pero hay un motivo que me impulsa a hacerlo: me he dado cuenta de que la mayoría de las personas no saben como redactar una pregunta.

Sitios Java que todos deberíamos saber

Hace tiempo que no escribo absolutamente nada en el sitio, así que se me ocurrió hacer un listado de sitios que deberíamos saber todos los que usamos Java para trabajar o estudiar.

Sitios para aprender Java.

ORACLE, el sitio oficial del lenguaje Java (anteriormente era de la extinta Sun Microsystems).
https://docs.oracle.com/javase/tutorial/

Petri Kainulainen, un sitio para los que quieran aprender sobre Maven, Spring, etc.
https://www.petrikainulainen.net/

BAELDUNG, un sitio imperdible para ver tips sobre Java, Maven, Gradle, etc.
https://baeldung.com

MKYONG, si buscas un tutorial sobre algo de Java seguro lo encuentras.
http://mkyong.com

HOW TO DO JAVA, imperdible para saber más de Java.
https://howtodoinjava.com

JAVA GUIDES, igualmente imperdible para los Javeros.
https://javaguides.net

JAVA REVISITED, noticias, recomendaciones de cursos, etc.
https://javarevisited.blogspot.com

JOURNALDEV, un sisitio sobre tutoriales de Java, Python, etc.
https://journaldev.com

BEGINNERS BOOK, contenido para todo programador.
https://beginnersbook.com

JAVA T POINT, cosas sobre Java, Sprintg, etc.
https://javatpoint.com

Curso de Java Oracle Data Base Connect, Json, ServLets, WebService

Dos temas importante en Java es la conexión a la base de datos y cómo se conectan los modelos de datos con los componentes en el cliente. Es algo sencillo que si dejamos la improvisación volar puede convertirse en un dolor de cabeza. Otro punto es cómo usar un mismo método de acceso a los datos en diferentes plataformas, desde web hasta aplicaciones móviles, sin que ello implique modificar la lógica de acceso, desde un simple logon hasta una transacción compleja de cabecera y detalle. Cómo hacer todo esto en forma sencilla y sin tantas capas o frameworks que solo alenta y dificultan el mantenimiento de nuestro sistema. Estas son algunas de las cosas que veremos en este bloque.

Nota importante.

1.- Comenzaré con definir los procesos en el servidor para acceder a la base.
2.- Crearemos las clases de transporte que viajarán de ida y vuelta entre el cliente y servidor
3.- Luego tomaremos las clases serializadas o las estructuras Json y la trasportaremos a una estructura de base de datos
4.- Después definiremos una estructura estándar de ServLet que funcionara como webservice.
5.- Definiremos la llamada desde el cliente y como recibir y enviar las solicitudes

¿Cómo saber si un servicio SMTP funciona? Te dejo un script...

A veces he tenido la necesidad de saber si un servicio de envío de correos está funcionando, y siempre uso el mismo script, le hice un pequeño refactor y aquí te los dejo...

@Grapes([
  @Grab(group='javax.mail', module='mail', version='1.4.7'),
  @Grab(group='org.springframework', module='spring-context-support', version='5.1.5.RELEASE')
])

import org.springframework.mail.MailSendException
import org.springframework.mail.SimpleMailMessage
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.mail.javamail.JavaMailSenderImpl

textMessage = """
  Este es un correo de prueba que nos ayuda a determinar la comunicación
  entre el servidor SMTP y los diferentes remitentes, sus dominios y el rastreo de recepción.

  No hay que contestarlo.

  Enviado a las ${new Date()}

  Saludos
"""

SimpleMailMessage message = new SimpleMailMessage().with {
  from = "info@makingdevs.com"
  to = "juan@makingdevs.com"
  cc = "juan@makingdevs.com"
  subject = "Hello world"
  text = textMessage
  delegate
}

JavaMailSender mailSender = new JavaMailSenderImpl().with {
  port = 587
  host = "email-smtp.us-east-1.amazonaws.com"

Instalando Concurnas, un nuevo lenguaje JVM

Concurnas es un "nuevo" lenguaje de programación dependiente de la JVM.

El sitio oficial dice que el lenguaje es:

Un lenguaje de programación JVM de código abierto diseñado para construir sistemas concurrentes, distribuidos y paralelos confiables, escalables y de alto rendimiento.

Concurnas es interoperable con Java (y otros lenguajes JVM): las organizaciones pueden aprovechar el software Java existente en un entorno concurrente.

En comparación con otros lenguajes, los desarrolladores de Concurnas necesitan escribir menos líneas de código. Ese código es más seguro y más fácil de probar, lo que aumenta la calidad y aumenta la productividad de los desarrolladores.

ejemplo.conc

class X{
   def hola(){
      System.out.println("Hola desde clase X")
   }
}
class Y{
   def hola(){
      System.out.println("Hola desde clase Y")
   }
}

def main(args String[]){
   new X().hola()
   new Y().hola()
}

A primera vista es muy parecido a Groovy, pero solo en apariencia.

Para instalar el lenguaje podemos usar SDKMAN!

 

¿Mock a EntiityManager es posible con Spring?

Hola buenas tardes a todos.

Hay una duda que tengo y es referente a la forma en que debo inyectar EntityManager dentro de una clase Test, para ello estoy utilizando JUnit y Mockito.

por ejemplo:
ClaseRepositoryImpl => Es la clase que quiero testear
EntityManager => Es lo que necesito falsear

public class ClaseRepositoryImplTest{
    @InjectMocks
    public ClaseRepositoryImpl cr;
   
    @Mock
    public EntityManager em;

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
    }

        @Test
    public void getCatalogoEjemploTest() {
        List<Ejemplo> listado = this.getCatalogoEjemplo();  //Tengo un método private que me devuelve una Lista de Objetos de tipo Ejemplo
        String nameStoreProcedure = "SP_GET_CAT_EJEMPLO";
       
        Query query = entityManager.createStoredProcedureQuery(nameStoreProcedure, Ejemplo.class);
        Mockito.when(query.getResultList()).thenReturn(listado);
    }

}

Queries Dinámicos en Spring Data JPA

Tuve la necesidad de crear un Query de forma dinámica con JPA, pues tenía varios métodos definidos y podrían crecer mas, algo así:

QuestionRepository.groovy

interface QuestionRepository extends PagingAndSortingRepository<Question,Long> {
  List<Question> findAllByAuthorAndEnabledAndStatusInAndParentIsNull(UserGE author,Boolean enabled,List<String> statuses, Pageable pageable)
  List<Question> findAllByCampus_CodeLikeAndSubject_subjectNumberLikeAndTypeLikeAndCareer_codeLikeAndUnityLikeAndComplexityLikeAndAuthorAndEnabledAndStatusInAndParentIsNull(String campusCode, String subjectNumber, String type, String careerCode, String unity, String complexity, UserGE author, Boolean enabled,List<String> statuses, Pageable pageable)
  long countByAuthorAndEnabledAndStatusInAndParentIsNull(UserGE author,Boolean enabled,List<String> statuses)
  long countByCampus_CodeLikeAndSubject_subjectNumberLikeAndTypeLikeAndCareer_codeLikeAndUnityLikeAndComplexityLikeAndAuthorAndEnabledAndStatusInAndParentIsNull(String campusCode, String subjectNumber, String type, String careerCode, String unity, String complexity,UserGE author, Boolean enabled,List<String> statuses)

Aplicar AOP con JavaConfig (AspectJExpressionPointcut)

Hace poco me toco tocar un componente en dónde tuve que aplicar un aspecto, la última vez que lo hice lo configuré con el namespace de AOP de Spring, pero estz vez quise hacerlo todo con JavaConfig; he aquí lo que hice:

El XML era este:

<bean id="monitoringAdvice" class="net.bull.javamelody.MonitoringSpringInterceptor" />
<aop:config>
  <aop:pointcut expression="execution(* com.makingdevs.service..**.*(..))"
    id="monitoringPointcut" />
  <aop:advisor advice-ref="monitoringAdvice" pointcut-ref="monitoringPointcut" />
</aop:config>

TableView en JavaFX

Buenas tardes, tengo un problema al usar las Table View, soy nuevo en Javafx, y apenas estoy aprendiendo, casi todo es más sencillo que con Swing, bueno, el problema es el siguiente
El problema es que estoy usando Scene Builder, esto ya es un proyecto grande, y necesito tener visualizaciones de las ventanas

Proyecto p = new Proyecto("1", "Proyecto A", "Proyecto chido"); //Esto es solo una prueba, se supone que lo jalará de la BD
        ObservableList<Proyecto> ListaProyectos = FXCollections.observableArrayList(p, p, p);        
        TCIDProy.setCellValueFactory(new PropertyValueFactory<Proyecto, String>("IDProyecto"));
        TCProy.setCellValueFactory(new PropertyValueFactory<Proyecto, String>("Nombre"));      
        TPrincipal.getItems().addAll(ListaProyectos);

El resultado de ese código es una tabla que arroja esto StringProperty[Value:1] en vez de arrojar simplemente un "1". No se en que me estoy equivocando, he investigado y casi todos lo hacen a mano, y en el caso de este proyecto no es viable cambiarlo a mano.

WEBSERVICE Y ACCESO A BASE DE DATOS

Cuando hablamos o estudiamos WebServices nos aparece una infinidad de métodos y tecnologías desde los benditos WSDL, pasando por JSON, AXIS, SOAP, RPC y un largo etcétera. Si le sumamos a ello el acceso a base de datos y sus respectivas transacciones, la cosa se complica mas. Para ello, benévolamente, las grandes empresas tecnológicas nos ofrecen una y otra y otra más abstracción para que el desarrollo sea mas intuitivo y fácil de actualizar. Pero la pregunta del millón es: de verdad es más intuitivo y fácil de actualizar, además de rápido? Si ya todo esto tiene su problemática y su discusión aparece en la escena de esta tragicomedia tecnológica las aplicaciones móviles. Vemos todo tipo de aplicaciones móviles, miles, millones. Sin embargo, muy pocas apps son herramientas transaccionales/administrativas. Tenemos apps sociales, de multimedia, juegos, herramientas de productividad, editores, información, etc..

Distribuir contenido