Java
Criando um projeto WS JSON Java/Spring – Parte 2

Neste artigo irei explanar como criar um projeto de Servidor Json Java Spring.

O objetivo deste artigo, é documentar os passos necessários que eu utilizei para fazer.

Sou novo neste negócio, por isso, tudo o que desenvolvo, acabo documentando para tentar mapear, e posteriormente não perder.

Talvez não sirva para você.Porem como os passos sempre são semelhantes, a maior chance, é que minhas dificuldades enfrentadas tambem sejam as suas.]

Boa Sorte!

Configurando o Intellij

Configurando o pom.xml

Entre no seu projeto, e configure o arquivo pom.xml. Irei apresentar um modelo, que peço que se baseia, porem dependendo das características do seu projeto, este pode mudas.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.comlink</groupId>
    <artifactId>SacDigital</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>19</maven.compiler.source>
        <maven.compiler.target>19</maven.compiler.target>
        <spring-boot.version>2.5.3</spring-boot.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Não copie o fonte, verifiqueas dependency, plugin, parent, properties.

Criando servico em porta especifica

Em resources, crie o arquivo application.properties,

server.port=8081

Criando Perfil de application

Vá em resources , crie um novo file:

  • application-development.properties
  • application-production.properties

Em application.properties, inclua a seguinte diretiva

spring.profiles.active=development

Tanto no development como production,inclua os seguintes códigos:

spring.application.name=Servidor de SACDigital Producao
server.port=8088

Na classe onde usa spring, verifique se possui os seguintes imports.

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

Por fim, o código pode ser visto no seguinte GITHUB:

https://github.com/marcelomaurin/MOCKSD

Exemplo de teste de conexão:

Java
Criando um projeto WS JSON Java/Spring – Parte 1

Neste artigo irei explanar como criar um projeto de Servidor Json Java Spring.

O objetivo deste artigo, é documentar os passos necessários que eu utilizei para fazer.

Sou novo neste negócio, por isso, tudo o que desenvolvo, acabo documentando para tentar mapear, e posteriormente não perder.

Talvez não sirva para você.Porem como os passos sempre são semelhantes, a maior chance, é que minhas dificuldades enfrentadas tambem sejam as suas.]

Boa Sorte!

Configurando ambiente

Estou usando como IDE IntelliJ IDEA 2022.

Então todas as informações serão direcionadas a esta Versão.

Instalando o Marvin

Entre no link abaixo, e baixe o Marvin

https://maven.apache.org/download.cgi

Copie o mesmo para a pasta c:

Configurando Ambiente de desenvolvimento

Entre nas váriaveis de ambiente, eu costumo fazer no sistema, e não no usuário.

Crie as seguintes variaveis:

MAVEN_HOME - C:\apache-maven-3.9.2

Lembre-se que o caminho depende da sua versão.

Agora edite o PATH e inclua o caminho do binário:

Lembre-se que o caminho é o bin dentro da pasta apache-maven.

Teste

Por fim, para testar, digite CMD

E digite:

mvn -v

Desta forma voce verá que o caminho entrou.

C/C++ Delphi Java Python
Threads para Raiz – Parte 1

Neste primeiro artigo, iremos estabelecer um projeto, que iremos desenvolver nos demais artigos.

Objetivo

A intenção deste projeto é apresentar solução em diversos linguagens de controle de threads com compartilhamento de informações entre elas.

Proposta de projeto

Imagine que temos 3 funcionários em um departamento público.

  • Recepção de Protocolo – Ele recebe os protocolos de serviço dos clientes.
  • Controlador de Serviço – Ele recebe os protocolos da recepção, colocando em ordem numérica em uma fila de execução. Por controlar e ordenar, sua atividade demora tempo mediano.
  • Executor de Serviço – Ele pega o serviço, por executar o serviço é o mais demorado de todos.
Fluxo de execução

Tempo de execução

Ao analisarmos o departamento, fizemos a seguinte constatação:

  • A recepção de protocolo, é o departamento mais rápido.
  • O Controlador de Serviço tem um tempo médio que é o dobro da recepção.
  • Executor de Serviço – Demora o dobro do tempo do controlador de serviço.

Agora que temos o projeto, podemos no próximo artigo começar sua implementação.

Espero voces no próximo artigo 😉

Java
Java sem nutela no Ubuntu – Parte 3

Estarei neste tópico apresentando como integrar linux com JAVA, de forma que possamos utilizar recursos do sistema operacional de forma que possamos ganhar maior agilidade.

Porque usar o SO

É interessante criar rotinas integráveis para o sistema operacional para ganhar agilidade e performace.

Como utilizar?

Podemos chamar aplicações:

  • shell script– Quando queremos agregar operações em lote, exemplo copiar uma pasta.
  • aplicação terceira – Quando queremos aproveitar features especificas da linguagem, exemplo uso de python para IA.

Quando não utilizar o SO

Existem muitos motivos para usar, e outros motivos que rejeitam o uso.

O mais importante motivo que rejeita seu uso, é quando queremos criar aplicações que não dependem do SO, podendo ser desacoplada de qualquer plataforma.

Aplicações

Aplicações de infra, necessárias para criação de serviços ou recursos, associados a um dado SO.

Podemos utilizar um serviço por exemplo para criar ambientes automatizados, criando ambientes de forma rápida e automática, replicando o que um operador faria em processos manuais.

Exemplos:

  • Clonagem de banco de dados
  • Copiar arquivos
  • Montagem de Serviços
  • Gestão de recursos do SO
  • Manipulação de containers ou serviços.
  • Gestão de testes integrados, etc

Como chamar aplicações

	public static int ProgExt(String Param01, String Param02)  throws IOException {
		int Resultado = 0;
		System.out.println ("Chamando ProgExt... ");
		Runtime rt = Runtime.getRuntime();
        String[] commandAndArguments = {"/home/mmm/projetos/meuproj/scripts/ScripExt.sh",  Param01, Param02 };
		System.out.println(commandAndArguments);
        try {
			String s;
			System.out.println ("ProgExt- Exec commandAndArguments completo");
			Process p = rt.exec(commandAndArguments);
			p.waitFor();
			Resultado = p.exitValue();
            System.out.println ("ProgExt- exit: " + Resultado);

            p.destroy();
		} catch(Exception ex) {
            ex.printStackTrace();
        }

		return Resultado;
	}

Ao Realizar a chamada o ScriptExt.sh, passamos os parâmetros, conforme o script abaixo:

#!/bin/bash

ORIGEM=$1
DESTINO=$2

PATH=/home/mmm/projetos/meuproj/scripts


echo "Inicio de Log" >  $PATH/logbkp.log
echo "Iniciando copia de arquivo" >>  $PATH/logbkp.log

/usr/bin/cp -r $ORIGEM $DESTINO >>  $PATH/logbkp.log

O modelo deste script, permite capturar pela shell script os parâmetros recebidos do JAVA, realizando tarefas via scripts, permitindo aproveitar o que o JAVA teria maior dificuldade em realizar.

De fato a automação de cópia, não se enquadra em tarefa difícil, porem em um processo didático exemplifica sua prática.

Outro Exemplo seria copia de banco de dados:

#!/bin/bash

#exemplo de teste
#sh -x  ./clonabanco.sh bancoorigem bancodest

PATH=/home/mmm/projetos/meuproj/scripts

echo "Script de replicação de banco"

databaserep=$1

database=$2

output="output.sql"


echo "Log de execucao da operacao de clonagem de banco" >>  $PATH/logbkp.log

echo "Origem:$databaserep" >>  $PATH/logbkp.log
echo "Destino:$database" >>  $PATH/logbkp.log
echo "Data:`/usr/bin/date`" >>  $PATH/logbkp.log



echo "Iniciando criacao de backup " >>  $PATH/logbkp.log
echo `/usr/bin/mysqldump -uroot -pSENHA $databaserep -r $PATH/output.sql` >> $PATH/logbkp.log


echo "Escrevendo script de copia" >>  $PATH/logbkp.log

echo "CREATE DATABASE $database;"> $PATH/copy.sql
echo "use $database" >> $PATH/copy.sql
echo "SOURCE $PATH/output.sql" >> $PATH/copy.sql

echo "Criando a base destino" >>  $PATH/logbkp.log

echo `/usr/bin/mysql -uroot -pSENHA < $PATH/copy.sql` >> $PATH/logbkp.log

echo "Fim de execução " >>  $PATH/logbkp.log


Podemos ver neste script, o uso de técnica de clonagem do banco de dados, permitindo a integração simples com JAVA.

Com este ultimo artigo, encerramos a série de artigos Java sem Nutela no Ubuntu, espero que tenham gostado.

Java
Java sem nutela no Ubuntu – Parte 2

Neste segundo artigo, Java sem nutela, vamos explicar como desenvolver uma aplicação na mão, sem IDE.

No primeiro artigo, expliquei como gerar um hello world, sem nada.

GIT

https://github.com/marcelomaurin/Java-Hello-World

Neste segundo artigo iremos incluir um arquivo de biblioteca JAR alem de explicar o conceito do JAR.

O JAR na verdade é um pacote contendo vários arquivos java, alem de outras informações referentes a criação de um pacote.

Usando um JAR

Primeiro irei explicar como usar o JAR.

O Arquivo JAR deve estar localizado em uma pasta onde os .JAR sejam encontrados, de forma geral, o linux ou qualquer outro sistema operacional, precisa visualizar a variável CLASSPATH

Para isso, iremos alterar o Makefile, incluindo o caminho da nossa lib

JCC=javac
SOURCE= \
	hello.java

TARGET= HelloWorld
PATHLIB=$CLASSPATH:/~/Java-Hello-World/libs

DEBUG= -g

all: compile run

lib:
	export CLASSPATH=$(PATHLIB)

compile:

	$(JCC) $(DEBUG) $(SOURCE)

run:
	java $(TARGET)

A lib só deve ser chamada um unica vez podendo ser incluída nos scripts de inicialização.

make lib

Pronto agora é só incluir seu jar na pasta que vc definiu no script e importar ele no seu código.

Criando seu JAR

A criação do JAR é bem simples, parte do meu artigo foi baseado no git https://github.com/macagua/example.java.helloworld

Meu GIT

https://github.com/marcelomaurin/hello-java

Nele podemos ver o Makefile

JCC=javac
SOURCE= \
	./HelloWorld/Hello.java

TARGET= HelloWorld

CLASS=Hello

DEBUG= -g

all: compile run

compile:
	$(JCC) $(DEBUG) $(SOURCE)

jar:
	jar cfm $(CLASS).jar Manifest.txt  $(TARGET)/$(CLASS).class


run:
	java -cp . $(TARGET).$(CLASS)

runjar:
	java -jar $(CLASS).jar

São dois pontos importantes para discusão.

A criação do jar pelo comando:

jar cfm $(CLASS).jar Manifest.txt $(TARGET)/$(CLASS).class

O jar é o pacote responsável pela criação dos pacotes jar.

No exemplo seguinte, vemos o pacote executado

java -jar $(CLASS).jar

onde o comando testa o pacote.

Criação do Pacote

Criação do Manifest.txt, é o arquivo responsável por dizer o que é.

Manifest-version: 1.0
Created-By: 1.0 (Maurinsoft)
Main-Class: HelloWorld.Hello

Nele encontramos apenas a descrição da classe que será criada (MAIN-CLASS)

Por ultimo os fontes Hello.java

package HelloWorld;

// Meu primeiro programa
class Hello {
	public static void main(String[] args) {
        	System.out.println("Hello, World!");
        }
}

Verificamos neste artigo, que o empacotamento, de fato é uma atividade bem simples e fácil de ser realizada manualmente.

Java
Java sem nutela no Ubuntu

Muitas vezes em C temos que compilar o projeto na mão.

A maioria das linguagens tem essa opção, vou explicar como fazer isso sem IDE de desenvolvimento, usando o VI no java.

Instalação

Para instalar o java vamos chama o terminal

sudo apt install openjdk-17-jdk-headless

Temos agora o ambiente montado, para começar a montar nosso projeto.

Git

git do projeto montado.

https://github.com/marcelomaurin/Java-Hello-World

Criando o Hello World

Criaremos o famoso Hello World, pois existe a lenda que se não criarmos ele no começo, tudo dá errado. Então vamos seguir:

Fonte: hello.java

// Meu primeiro programa
class HelloWorld {
        public static void main(String[] args) {
                System.out.println("Hello, World!");
        }
}

Agora para testar, vamos executar ele direto, executando o script:

java hello.java

Segue o exemplo de sua execução:

Chamando o hello.java

Agora iremos criar o script para compilação:

Arquivo: Makefile

JCC=javac
SOURCE= \
        hello.java

TARGET= HelloWorld

all: compile run

compile:
        $(JCC) $(SOURCE)

run:
        java $(TARGET)

Para compilar, chamamos o make compile, e para executar o make run , conforme figura abaixo:

Debugando o java

Para debugar o fonte temos que compilar o projeto com a opção -g, conforme segue o script do Makefile alterado.

JCC=javac
SOURCE= \
        hello.java

TARGET= HelloWorld

DEBUG= -g

all: compile run

compile:
        $(JCC) $(DEBUG) $(SOURCE)

run:
        java $(TARGET)

O parametro -g, cria os espaços de debug necessários para o debug.

Ao compilar agora, podemos chamar o debug em Java.

O jdb é semelhante ao gdb do C, para executar o mesmo, chamamos o nosso programa conforme exemplo abaixo:

jdb HelloWorld

rodando com Debug

Podemos verificar que o código foi rodado inteiramente, pois não tinhamos breakpoints.

Para incluirmos o break point usamos o comando:

stop in [classe].[metodo]

Para rodar no debug use o comando:

run

Conforme figura abaixo:

Debug pela console

Para continuar usamos o step, e o print mostra a variavel.

Com isso, mostramos as funcionalidades básicas para analisar e rodar uma aplicação Java pelo terminal, sem necessidade de incluir uma IDE.

Espero que tenham gostado, críticas e comentários, fico no aguardo.

maurinsoft.com.br