Publicado el 22 de Enero del 2019
400 visualizaciones desde el 22 de Enero del 2019
99,2 KB
17 paginas
Creado hace 22a (18/04/2002)
5.3 Diseño por capas con Servicios
Web
Diseño por capas
n Misma idea que en CORBA
Interfaz de usuario
(no WS)
Capa de traducción y
delegación (WS)
Capa de traducción y
delegación (WS)
IDL
Capa de lógica
de negocio (no WS)
Cliente
Implementación del servicio
Ejemplo Movies
n Es una implementación del ejemplo usado en el tema 4
n Se ha implementado el servicio y un cliente
Portal general 1
BD
. . .
Portal general N
BD
Portal especializado
en cine
BD
Internet
Diagrama de paquetes
es::udc::fbellas::corbaws::movies
client
model
proxies
wsdl
wsdlutil
client
model
proxies
wsdl
model
es.udc.fbellas.corbaws.movies.model
MovieInformation
- identifier : Long
- t i t l e : S t r i n g
- runtime : short
- releaseDate : Calendar
- directorNames : List
- a c t o r N a m e s : L i s t
- genres : List
- s y n o p s i s : S t r i n g
+ MovieInformation(...)
+ getIdentifier() : Long
+ getTitle() : String
+ setTitle(title : String) : void
+ getRuntime() : short
+ setRuntime(runtime : short) : void
+ getReleaseDate() : Calendar
+ setReleaseDate(releaseDate : Calendar) : void
+ getDirectorNames() : List
+ setDirectorNames(directorNames : List) : void
+ getActorNames() : List
+ s e t A c t o r N a m e s ( a c t o r N a m e s : L i s t ) : v o i d
+ getGenres() : List
+ setGenres(genres : List) : void
+ getSynopsis() : String
+ setSynopsis(synopsis : String) : void
+ toString() : String
- movieInformationDirectoryName : String
MovieInformationFacade
+ MovieInformationFacade(movieInformationDirectoryName : String)
+ findMovieInformation(releaseDate : Calendar) : Collection
+ storeMovieInformation(movieInformationCollection : Collection) : void
< < u s e > >
0..n
< < u s e > >
DateOperations
- DateOperations()
<<static>> + getDateWithOnlyDayMonthYear(dayAsString : String, monthAsString : String, yearAsString : String) : Calendar
<<static>> + getDateWithOnlyDayMonthYear(date : Calendar) : Calendar
Comentarios (1)
n Este paquete representa la lógica de negocio de la
gestión de la información sobre películas
n Búsqueda de las películas que se se estrenan en una
determinada fecha (sólo se tiene en cuenta el día, mes y
año)
n El servicio web dará acceso a esta funcionalidad
Inserción o actualización de información sobre películas
n
n Es independiente del API de servicios web
n Por simplicidad, el cliente y la implementación del
servicio usan el subpaquete model
Comentarios (y 2)
n Por simplicidad, la implementación de
MovieInformationFacade no usa una BD
n La información sobre cada película se almacena en un
fichero .properties (un fichero por cada película)
n Todos los ficheros residen debajo de un determinado
directorio
n La signatura de las operaciones de
MovieInformationFacade (excepto el constructor) no
delatan si se usa una BD o ficheros
n Se puede cambiar fácilmente en un futuro
n También se podría haber definido
MovieInformationFacade como un interfaz
es.udc.fbellas.corbaws.movies.wsdl
< < I n t e r f a c e > >
R e m o t e
(from rmi)
< < I n t e r f a c e > >
Serializable
(from io)
< < I n t e r f a c e > >
MovieInformationProvider
< < r e t u r n > >
0..n
+ findMovieInformation(date : Date) : MovieInformation[]
MovieInformationProviderSoapBindingImpl
- movieInformationFacade : MovieInformationFacade
+ MovieInformationProviderSoapBindingImpl()
< < u s e > >
< < u s e > >
MovieInformationFacade
C o m m o n W S D L T y p e C o n v e r s o r
(from model)
(from wsdlutil)
MovieInformation
- identifier : Long
- title : String
- runtime : short
- releaseDate : Date
- directorNames : String[]
- a c t o r N a m e s : S t r i n g [ ]
- genres : String[]
- s y n o p s i s : S t r i n g
+ MovieInformation()
+ getIdentifier() : Long
+ setIdentifier(identifier : Long) : void
+ getTitle() : String
+ setTitle(title : String) : void
+ getRuntime() : short
+ setRuntime(runtime : short) : void
+ getReleaseDate() : Date
+ setReleaseDate(releaseDate : Date) : void
+ getDirectorNames() : String[]
+ setDirectorNames(directorNames : String[]) : void
+ g e t A c t o r N a m e s ( ) : S t r i n g [ ]
+ s e t A c t o r N a m e s ( a c t o r N a m e s : S t r i n g [ ] ) : v o i d
+ getGenres() : String[]
+ setGenres(genres : String[]) : void
+ g e t S y n o p s i s ( ) : S t r i n g
+ setSynopsis(synopsis : String) : void
Comentarios
n Obsérvese la diferencia entre los tipos usados en los
subpaquetes model y wsdl
n En model se usa listas de String (java.util.List) y
en wsdl se usa String[] (tipo soportado por JAX-RPC)
n En model se usa colección de MovieInformation
(java.util.Collection) y en wsdl se usa
MovieInformation[] (tipo soportado por JAX-RPC)
n En model se usa java.util.Calendar para las fechas
(mejor alternativa que java.util.Date), y en wsdl se
usa java.util.Date (Axis no soporta
java.util.Calendar)
es.udc.fbellas.corbaws.movies.wsdlutil
CommonWSDLTypeConversor
Contiene métodos para convertir de tipos WSDL a Java y viceversa,
comunes a la implementación del servicio web y al cliente.
es.udc.fbellas.corbaws.movies.proxies
- movieInformationProvider : es::udc::fbellas::corbaws::movies::wsdl::MovieInformationProvider
MovieInformationProvider
+ MovieInformationProvider(movieInformationProviderURL : String)
+ findMovieInformation(date : Calendar) : Collection
11
<<Interface>>
MovieInformationProvider
(from wsdl)
<<return>>
0..n
MovieInformation
(from model)
es.udc.fbellas.corbaws.movies.client
Client
<<static>> + main(args : String[]) : void
<<use>>
<<use>>
MovieInformationProvider
MovieInformationFacade
(from proxies)
(from model)
es.udc.fbellas.corbaws.movies.wsdl.MovieInformationProviderSoapBindingImpl (1)
public class MovieInformationProviderSoapBindingImpl
implements MovieInformationProvider {
private MovieInformationFacade movieInformationFacade;
public MovieInformationProviderSoapBindingImpl() {
try {
movieInformationFacade = new MovieInformationFacade(
getMovieInformationDirectoryName());
} catch (NamingException e) {
e.printStackTrace();
}
}
es.udc.fbellas.corbaws.movies.wsdl.MovieInformationProviderSoapBindingImpl (2)
public MovieInformation[] findMovieInformation(Date releaseDate)
throws es.udc.fbellas.corbaws.movies.wsdl.
InternalErrorException {
try {
Calendar newReleaseDate = Calendar.getInstance();
newReleaseDate.setTime(releaseDate);
return CommonWSDLTypeConversor.toWSDL(
movieInformationFacade.findMovieInformation(
newReleaseDate));
} catch (es.udc.fbellas.corbaws.util.exceptions.
InternalErrorException e) {
throw CommonWSDLTypeConversor.toWSDL(e);
}
}
es.udc.fbellas.corbaws.movies.wsdl.MovieInformationProviderSoapBindingImpl (y 3)
private String getMovieInformationDirectoryName()
throws NamingException {
InitialContext initialContext = new InitialContext();
return (String) initialContext.lookup("java:comp/env/" +
"movieInformationDirectoryName");
}
}
Comentarios (1)
n El constructor de MovieInformationFacade requiere el
nombre del directorio que contiene los ficheros .properties
n Para hacer que el código no dependa del nombre del directorio,
se lee éste de la configuración de la aplicación web (web.xml)
mediante JNDI (javax.naming)
JNDI (Java Naming and Directory Interface)
n
n Entre otras cosas, es un API que permite acceder a la información
de configuración de aplicaciones J2EE
n web.xml
<web-app>
....
<env-entry>
<env-entry-name>movieInformationDirectoryName</env-entry-name>
<env-entry-value>/home/fbellas/Trabajos/DocenciaUDC/ADOO/Ejemplos/
CORBAWS-JavaExamples-src-1.2/Subsystems/Movies/MovieInformation
</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
</web-app>
Comentarios (y 2)
n El valor de una entrada de entorno se lee mediante
una instancia de javax.naming.InitialContext
n El nombre de la entrada que se especifica en lookup es
java:comp/env/<NombreDeLaEntradaEnWeb.xml>
n Ej.: java:comp/env/movieInformationDirectoryName
Comentarios de: 5.3 Diseño por capas con Servicios Web (0)
No hay comentarios