Business Delegate e Service Locator

Criei uma interface chamada HandleDB que contém métodos para manipulação no banco de dados (insert, remove, update, list).
Tenho 4 classes: (Todas implementam HandleDB)
-ModelAdmin
-VariableAdmin
-StationAdmin
-StateAdmin
Essa é a camada de negócio.

Minha dúvida é a seguinte:

Quero utilizar Business Delegate e Service Locator para me conectar a camada de negócio, mas eu tenho dúvida qt à implementação desses patterns.

Eu poderia fazer assim?

public class MeuBusinessDelegate {
    public void insert(Object obj) {
        MeuServiceLocator sl = new MeuServiceLocator();
        sl.insert(Object obj);
    }

    public void remove(Object obj) {…}
    public void update(Object obj) {…}
    public List list(Object obj) {…}
}
public class MeuServiceLocator {
    public void insert(Object obj){
        HandleDB handleDB = null;

        if(obj instanceof ModelBean) handleDB = new ModelAdmin();
        if(obj instanceof VariableBean) handleDB = new VariableAdmin();
        if(obj instanceof StationBean) handleDB = new StationAdmin();
        if(obj instanceof StateBean) handleDB = new StateAdmin();

        if(handleDB != null) handleDB.insert(obj);
    }
.
.
.
}

Enfim, utilizo o Service Locator para ocultar os detalhes da implementação por trás do código de pesquisa de serviço de negócios.

É isso mesmo? Eu poderia fazer assim? Isso está certo?

vc ta decidindo qual objeto retornar no service locator.
acho que ta misturando as coisas.
p/ mim o service locator deve retornar um objeto, não precisa conhece-lo.
acho que vc poderia mudar esse trecho de codigo p/ uma factory.ela sim tomaria a decisão de qual objeto retornar.

[]'s

Realmente, o q eu fiz se parece mais com uma factory!

O service locator se encaixa mais na utilização de EJB’s, onde eu pegaria o serviço e apresentaria para o business delegate?

Não implementei minha camada de negócios com EJB’s. O service locator se aplica somente a esse tipo de implementação?

acho que vc pode ter uma classe tipo service locator, que retornace um new instance de um object qualquer, e na classe que chma vc faz o cast p/ o sua classe.
e uma factory que buscasse o tipo de obj.

[]'s

Fiz assim:

Meu DB:

public class BusinessDelegate {
    public void insert(Object obj) {
        HandleDB handleDB = HandleDBFactory.getHandleDB(obj);
        handleDB.insert(Object obj);
    }
}

Minha Factory:

public class HandleDBFactory {
    public synchronized static HandleDB getHandleDB( Object obj ) {
        if( obj == null ) return null;
        else if( obj instanceof CountryBean ) return new CountryAdmin();
        else if( obj instanceof StateBean ) return new StateAdmin();
        else if( obj instanceof StationBean ) return new StationAdmin();
        else if( obj instanceof ModelBean ) return new ModelAdmin();
        else if( obj instanceof VariableBean ) return new VariableAdmin();
        else return null;
    }
}

Não consegui imaginar como eu usaria um service locator nesse caso. Tem como? Como ficaria?

Use ServiceLocator basicamente para JNDI e outros esquemas 'passa-string-recebe-objeto".

Por que seu método é sincronizado?

Considere utilizar um framework de IoC como o Spring e ser mais feliz :slight_smile:

[]s

O Service Locator é uma forma de Factory.

Fora isso você está misturando a camada de persistencia com a de negocios.

A respeito do synchonized é uma dúvida q eu tenho faz tempo.

Pode acontecer de, por ser um método estático, meu objeto ser trocado por uma outra thread executando ao mesmo tempo esse método?

Vamos supor q um usuário entrou no sistema junto com outro usuário. Os dois pedem uma requisição e ao mesmo tempo eles entram nesse método. Não pode acontecer de retornar um valor errado?

Pensei em colocar synchronized, para q esse método seja executado separadamente, sem inteferir com outras threads.

isso deve te ajudar a entender melhor :wink:

Basicamente o método vai executar várias vezes, mas cada vez é única e não interfere com as outras. O que você pode ter problema é se os métodos acessarem um recurso em comum, como um atributo (estático, no caso), aí eles pdoem alterar o valor ao mesmo tempo e essas coisas.

O objeto que vc retorna numa thread é dela e ng tasca :slight_smile:

[]s

hmmm! entendi! :smiley:
Valew!

[quote=louds]O Service Locator é uma forma de Factory.

Fora isso você está misturando a camada de persistencia com a de negocios.[/quote]

Uma Framework de persistência já implementa a separação da camada de negócio?
É q estou estudando Struts e pretendo começar a estudar algum Framework para trabalhar com persistência.

O q vc sugere?

eu sugiro :slight_smile:

MVC: WebWork ou Spring IoC
Persistência: Hibernate ou JDBC+DAO, se o sistema for simples
Gerência da procaria toda: Spring

Tudo depende dos seus requisitos na verdade, e do tempo hábil.

(eu não usaria Struts, foi lançada a pouco a campanha SALVEM AS FOCAS)

Campanha Salvem as Focas?

Não entendi!

Qual o problema de utilizar Struts?

:?: :?:

[quote=Luiz Henrique Coura]Campanha Salvem as Focas?
Não entendi!
Qual o problema de utilizar Struts?
:?: :?: [/quote]

Aqui ele teve essa inspiração …

PS: Pessoaaal, achei esse post ai de cima no Google, finalmente o forum do guj está indexado que é uma beleza!!!

PS2: 99,767

Tâmo quase lá! :wink:

Ô Shoes, bem q tuh podia colocar uma foquinha nesse avatar seu neh?!
O Greenpeace ia adorar! :lol:

Ja que usaram meu nome (iniciais?) em vao, eu vou dar pitaco tambem.

Nao use ServiceLocators nem Factories. Ja tiveram todo o trabalho de fazer uma PUTA factory generica, que eh o Spring. Se voce tiver sem saco de usar o Spring, ou ficar com nojinho do XML, voce pode usar o PicoContainer. Mas nao faca ServiceLocator ou Factory na mao, a menos que vc queira consertar depois. Pq ninguem faz isso direito :smiley:

E sobre Struts, não conheço um utilizador de Struts que, após brincar umas horinhas com o WebWork não se converteu hehe :smiley:

Aposto que você deu um suspiro bem desgostoso depois de ver o tamanho da lista de frameworks que o povo sugeriu né? :smiley:

ps.: cv, seu comédia :mrgreen:

E por favor - se resolver fazer, conserte mesmo. Nao va deixar como legado para outros desenvolvedores inocentes.

Sobre GUJ+Google: sim, reparei que ta rolando mesmo. Inclusive algumas pesquisas que faco retornam o GUJ na primeira pagina… ontem mesmo pesquisei por “Eclipse 3.1M4 Lomboz” e adivinhem qual foi o primeirao da lista? (e eu nem pedi pra pesquisar apenas em portugues)

Marcio Kuchma

Shoes, porque não usar Hibernate em sistemas simples? Não vejo problema nenhum… Alguns podem dizer que é muito esforço pra pouco ganho, ou algo assim, mas só de não ter que botar a mão em SQL e iterar sobre ResultSets pra montar Collections, já vale a pena, na minha opinião. :wink:

Mas o DAO é válido nos dois casos. Exemplo foi um sistema simples que eu fiz pra um órgão interno da facul… Nunca tinha usado Hibernate, e comecei usando JDBC + DAO + WebWork. Depois resolvi usar o Hibernate, e sabe o que eu precisei mudar? O components.xml do XWork, pra instanciar meus HibernateDAOs ao invés dos JDBC… :smiley:

[]'s

[quote=caiofilipini]
Shoes, porque não usar Hibernate em sistemas simples? Não vejo problema nenhum… Alguns podem dizer que é muito esforço pra pouco ganho, ou algo assim, mas só de não ter que botar a mão em SQL e iterar sobre ResultSets pra montar Collections, já vale a pena, na minha opinião. :wink:[/quote]

Tudo dependo do que é simples para você ou para mim. Se eu precisar fazer apenas uma consulta a um SGBD no sistema todo, não vou usar hibernate :wink:

Não dá pra usar tamanho único, não dá para catalogar baseado em conceitos como simplicidade… enfim, só tem uma cosia que te diz: experiência e muitas horas perdidas consertando alguma merda.

cv, autoriza o Lipe a fazer um logo ‘salvem as focas’ ae, tipo o que se fez no CJ’04 8) pra colocar em blog, assinatura, camiseta, camisinha, cartaz em ônibus, envelopar as barcas da baia de guanabara…
(sim, eu gosto de dar trabalho pros outros)

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:

Por que usar struts: ibm, bea, sun, oracle, ford, toyota, gm, deustchebank, bank boston, oesp, folha, ig …
Não sei, trabalhei em poucos lugares. Não deve servir de opinião o fato de 100% dos lugares utilizarem struts, e em geral “isto” ser um requisito do cliente.

Territorial Pissings

Assim segue… Se é verdade que o “profeta falou”, pobres foquinhas…