RE: Duda sobre modelo estático
"voqpasa2001" <[email protected]>
| Newsgroups | gmane.comp.java.javaspain |
|---|---|
| Message-ID | <[email protected]> |
Hola geckko80, no es exactamente el mismo caso, quizás me haya
explicado mal, voy a poner como es, a grandes rasgos el código:
public Interface IDAOEjemplo
{
public boolean createBean(DataBean dataBean)
{
//Aquí inserto el bean en la BD
}
// más métodos del DAO (recuperar información, actualizar, etc)
}
public class DAOEjemploImpl implements IDAOEjemplo
{
//Aquí, obviamente, se implementan los métodos
}
Hasta aquí nada que no sea normal.
Ahora la clase Admin:
public class AdminDAO
{
private static IDAOEjemplo iDAOEjemplo= null;
//Método create, síncrono pq solo quiero crear una interfaz que maneje
"todo"
private static synchronized void getIDAOEjemplo()throws AlgunaException
{
if (iDAOEjemplo==null)
iDAOEjemplo= DAOFactory.getIDAOEjemplo();
}
//Y ahora tengo los métodos de esta capa de negocio, asíncronos y
estáticos todos
public static boolean createBean()
{
//La interfaz solo será nula la primera vez que se instancie este método
if (iDAOEjemplo==null)
getIDAOEjemplo();
//Y aquí ahora se puede llamar al método de la interfaz pertinente
return iDAOEjemplo.createBean(DataBean dataBean);
}
}
Es decir, el único new de la implementación de la interfaz se hace en
el método síncrono (se hace el new en la factoría), luego siempre se
usa la misma interfaz.
No se si queda así mas claro, mi DUDA es si, se pueden llegar a
"cruzar" los datos del dataBean que le paso al método create (o al que
sea), o bien si tengo otro método que devuelve una lista, devuelva la
lista a otro cliente distinto (¿?¿?¿?)
--- En [email protected], Geckko80 <geckko80@...> escribió:
>
> Buenas voqpasa
>
> Veamos, al tener una clase estatica no podrias tener problemas de que se
> mezclen los hilos, ya que justamente para eso esta, me explico con un
> ejemplillo corto (espero haber ententido lo que propones)
>
> Tu clase estatica seria por ejemplo DAOManager.java, esta tendria el
> punto de entrada a la base de datos, que implementaria lo que es el
> interfaz estatico, de manera que en el constructor tendria algo asi (es
> un ejemplillo)
>
> class DAOManager implements IDAOManager{
> SessionBD DAOManager{
> if (this.session == null){
> this.session = DAOManager.crearSession();
> }
> return this.session
> }
> }
>
>
> Creo que se entiende (no es codigo valido, es un ejemplillo).
>
> Entonces cuando pides esa session, el punto de entrada a la base de
> datos es UNICO asi que aunque varios la invoquen a la vez los threads
> irian de uno en uno (pa mi que me estoy liando mucho)
>
> Ejemplo de nuevo:
>
> Clase1:
>
> [..........]
> SessionBD session = DAOManager.getSession
> session.hacerAlgoConLaBD(parametros);
> [..........]
>
> Clase2:
>
> [..........]
> SessionBD session2 = DAOManager.getSession
> session2.hacerAlgoConLaBD2(parametros);
> [..........]
>
> Aunque se invoquen a la vez tanto la clase 1 como la clase 2 el punto de
> entrada a la base de datos es el mismo, asi que se ejecutaria una de
> ellas (la que primero llegase) y luego la otra.
>
> Espero haberme explicado.
>
> voqpasa2001 escribió:
> >
> > Hola de nuevo, nadie me echa un cable??
> >
> > --- En [email protected] <mailto:javaSpain%40yahoogroups.com>,
> > "voqpasa2001" <ppppppjava@> escribió:
> > >
> > > Buenos días a todos, quería haceros una pregunta sobre clases
> > > estáticas a ver si alguien me lo puede aclarar, a ver si me explico
> > > correctamente:
> > >
> > > Estoy utilizando DAO´s, de tal manera que mi esquema de clases es el
> > > siguiente:
> > >
> > > Tengo una interfaz (la interfaz DAO)
> > > Una implementación de esa interfaz.
> > >
> > > Y ahora tengo una clase que administra esa interfaz y sirve de punto
> > > de entrada para la capa de negocio.
> > > Aquí es donde empiezan mis dudas, esta clase Admin, es estática.
> > > Tiene una variable estática que es precísamente la interfaz DAO.
> > > Todos sus métodos son estáticos, además el método que crea la
primera
> > > vez la interfaz es síncrono.
> > >
> > >
> > > El funcionamiento es el siguiente:
> > >
> > > Cuando se llama a un método estático de Admin, primero compruebo
si la
> > > interfaz DAO es nula, si lo es (lo será la primera vez solo),
llamo al
> > > método síncrono, que lo que hace es utilizar una factoría que me
crea
> > > un nuevo objeto que implementa esta interfaz y se lo asigna a mi
> > > interfaz. (variable (estática) de clase de la clase Admin).
> > > Posteriormente, lo que se hace es invocar al método en cuestión
de la
> > > interfaz con sus parámetros correspondientes.
> > >
> > > Mi duda es la siguiente, es posible que tenga problemas de
> > > sincronización y que un hilo se "mezcle" con otro a la hora de
> > > solicitar la interfaz?. Es decir, imaginaos que hago un create,
que lo
> > > que hace es insertar determinada información de un bean en la BD, si
> > > dos hilos a la vez llaman al create (situación mas que posible),
> > > habría alguna posibilidad que se "mezclara" la información de esos
> > > bean?, vamos que el bean de un create, pasase a ser el bean del otro
> > > create.
> > > Se que siempre y cuando se utilice simplemente el método
estático y no
> > > ninguna variable estática, no tiene pq haber problemas, pero es que
> > > precísamente una de las variables de clase de mi clase Admin, es
> > > precísamente la interfaz (solo existirá una).
> > >
> > > Veríais mejor que cada vez que se llame a un create desde Admin, que
> > > haga un new de la implementación de la interfaz??
> > >
> > > Disculpar el rollo, pero quería intentar explicarme de lo mejor
> > > posible, no se si habrá sido peor.
> > >
> > > Un saludo
> > >
> >
> >
>