O pattern usado pra protocolos

7 respostas
Guilherme_Silveira

Tanto a API do javamail como a do jsse e http usam um pattern q eu nao faco ideia do nome e nem de como eles fazem isso, queria saber se alguem sabe como eles fazem isso.

Basicamente voce fala assim:

Message msg = new Message();
Transport transport = new Transport(protocol);
transport.send(msg);

Substituindo a variavel pelo protocolo desejado. No caso do jsse e http eh na hora q cria uma conexao a partir de um objeto java.net.URL.
Entaum, minha duvida eh, como ele faz para achar as implementacoes do protocolo uma vez que as classes que implementam o protocolo estao em packages nada a ver com o da classe Transport (por exemplo). Como ele faz pra descobrir que esse protocolo esta disponivel?
Pra ver se eh disponivel eh soh achar as classes que implementam uma Interface de protocolo e pegar um metodo getProtocolName() ou qq coisa do genero.
Mas como descobrir quem implementa esta interface?

Se nao me engano o JDBC tambem usa um pattern meio assim, no caso dele voce pode ou registrar a classe que pode ser usada com o DriverManager ou NAO.
Naoe ntendo direito,

Abraco

Gui

7 Respostas

Paulo_Silveira

vou falar como funciona o JDBC, porque esse eu conheco

O DriverManager tem o seguinte metodo:

public static synchronized void registerDriver(java.sql.Driver driver)

E quem chama ele, é o driver, enquanto voce inicializa ele:

Class.forName("driver.do.bancodedados");

Quando você faz isso, ele executa o inicializador estático da classe, que por sua vez se registra no DriverManager, avisando que ele é um candidato a driver
Aí, dentro do:

Connection c = DriverManagergetConnection("x")

Ele vai de um em um driver, perguntar qual que aceita a string de conexao “x”. Quando achar, pega uma Connection com ele, se nao achar, excecao.

O funcionamento do javamail deve ser um pouco diferente, telvez ele tenha os nomes das interfaces hardcodado. Precisa ver no source.

Guilherme_Silveira

o jdbc eu tinha pensado que era assim mesmo
sobre o javamail, ele nao registra a classe
e a interface num precisa ta hardcodada mas de algum jeito ele tem q achar as classes q implementam essas interfaces, e como sem registrar?
com o https vc tem q indicar (system property) qual o pacote q vc vai usar pra tomar conta do protocolo…

gui

C

Na verdade vc não pode criar um Transport desse jeito, vc tem que pedir para o Session criar o Transport

String protocol = "SMTP";

Session session = Session.getDefaultInstance(properties);
Transport transport = getTransport(protocol);

A configuração de qual protocolo será carregado ao se ler a string “SMTP” está no arquivo javamail.default.provider que está dentro do mail.jar, e que tem linhas do tipo

protocol=smtp; type=transport; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc.;

e assim o session sabe qual tipo de transport usar…

Guilherme_Silveira

brigadao crolmos, isso resolve o misterio de todos os factories desse tipo que conheco… todos eles tem marcado de uma maneira ou de outra qal a classe que ele deve usar…

dentre todas essas, a de registrar misturada com a pre-definida sao com certeza a melhor solucao, que, se nao me engano, eh a do https…

guilherme

Paulo_Silveira

O guilherme me perguntou em particular quem era o “tiozao” crolmos.
Ele nao eh tiozao nao.

Ele eh o Cesar da faculdade. Se forma agora tambem, e acho que entre nos, eh ele e o Krico que tem mais experiencia em java contado por tempo.

Talvez isso possa fazer dele um Tiozao. Nao sei.

C

“Paulo Silveira”:
O guilherme me perguntou em particular quem era o “tiozao” crolmos.
Ele nao eh tiozao nao.

Eu esqueci de me apresentar, acho que vou colocar uma foto do lado como o peas :slight_smile:

Assim ninguem vai me chamar mais de “tiozao” :slight_smile:

Guilherme_Silveira

paulo, nao sabe as regras de etiqueta? se a gente fala tiozao num email eh pq eh privado
agora me queimei total e vou poder estrear essas carinhas estranhas q tem aqui no forum :oops: olha q chique?

bom tioz, oops, quero dizer, cesar, valeu pela ajuda
ps: arquivo sem ser class no .jar eu acho tao feio… (esteticamente)

gui

Criado 17 de agosto de 2002
Ultima resposta 22 de ago. de 2002
Respostas 7
Participantes 3