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.

¡Ultimo meetup del 2021 con Andrés Almiray!

¡Es el último meetup del año!

Y para despedir el 2021, qué mejor que un invitadazo especial: Andrés Almiray, quien estará con nosotros este lunes 29/Nov a las 7 PM hora del Centro de México.

Por primera ocasión haremos este meetup en formato "AMA" (Ask Me Anything), en el cual Andrés se dedicará a responder todas las preguntas que la hagamos acerca de MAVEN.

La transmisión como siempre será por el canal de YouTube de javaMéxico, no se lo pierdan.

LINK de la transmisión: https://youtu.be/zspvMgkecP8

No olviden suscribirse y seguirnos:
- https://youtube.com/c/javamexico
- https://facebook.com/javamexico
- https://twitter.com/jvm_mx
- https://twitter.com/javamexico
- https://github.com/javamexico

¡Nos vemos el lunes!

¡Lanzamos el primer episodio del Podcast de @javamexico!

¡Lanzamos el primer episodio del Podcast de @javamexico!

Ya puedes escucharlo en YouTube.

Noticias:
- JEP 400 (UTF-8)
- Java 17
- Micronaut v3
- Spring Framework 6

Temas
- Concurrencia y la Nube
- ¿Hay una burbuja en Tech?

Podcast javaMéxico Episodio #001

No olviden seguirnos en:
- https://youtube.com/c/javamexico
- https://facebook.com/javamexico
- https://twitter.com/jvm_mx
- https://twitter.com/javamexico
- https://github.com/javamexico

¿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