## Métodos de Búsqueda del Contenedor Controlador

La facilidad de búsqueda de la casa de subastas está implementada como un método finder del contenedor. Arranca cuando el usuario escribe una cadena de búsqueda y pulsa el botón Submit en la página principal para localizar un ítem de la subasta. Como se muestra en el diagrama, el navegador pasa la cadena de búsqueda al método AuctionServlet.searchItem, que luego la pasa al método BidderBean.getMatchingItemsList.

En este punto, BidderBean.getMatchingItemsList pasa la cadena de búsqueda al método findAllMatchingItems declarado en el interface AuctionItemHome. Este método es un método buscador, y la implementación del contenedor varía la forma en que maneja las llamadas a los métodos finder. Los contenedores BEA Weblogic buscan en el descriptor de desarrollo del Bean la información sobre los métodos finder.

En el caso de la busqueda, el descriptor de desarrollo mapea la cadena de búsqueda pasada a AuctionItemHome.findAllMatchingItems al campo summary en la tabla AuctionItems de la base de datos. Este le dice al servidor Enterprise JavaBeansTM que recupere datos de todos los campos que en el campo summary contengan el texto de la cadena de búsqueda.

Esta sección pasea a través de las diferentes partes del código de búsqueda finder.

- AuctionServlet.searchItems
- BidderBean.getMatchingItemsList
- AuctionItemHome.findAllMatchingItems
- Descriptor de Desarrollo de AuctionItemBean

### AuctionServlet.searchItems

El método searchItems recupera el texto de la cadena del navegador, crea una página HTML para mostar el resultado de la búsqueda, y le pasa la cadena de búsqueda al método BidderBean.getMatchingItemsList. BidderBean es un Bean de sesión que recupera una lista de ítems de la subasta y chequea la ID y la password del usuario para los usuarios que quieren pujar por algún articulo.

Los resultados de la búsqueda se devuelven a este método en una variable Enumeration.

>     private void searchItems(ServletOutputStream out,
>     	HttpServletRequest request)
>     	throws IOException {

>     //Retrieve search string
>       String searchString=request.getParameter(
>     	"searchString");

>     //Create HTML page
>       String text = "Click Item number for description
>     	and to place bid.";
>       setTitle(out, "Search Results");
>       try {
>             addLine("<BR>"+text, out);

>     //Look up home interface for BidderBean
>             BidderHome bhome=(BidderHome) ctx.lookup(
>     		"bidder");

>     //Create remote interface for BidderBean
>             Bidder bid=bhome.create();

>     //Pass search string to BidderBean method
>             Enumeration enum=(Enumeration)
>               bid.getMatchingItemsList(searchString);

>             if(enum != null) {
>               displayitems(enum, out);
>               addLine("", out);
>             }
>       } catch (Exception e) {
>         addLine("AuctionServlet Search Items error",
>     	out);
>         System.out.println("AuctionServlet <newlist>:
>     	"+e);
>       }
>         out.flush();
>     }

### BidderBean.getMatchingItemsList

El método BidderBean.getMatchingItemsList llama al método AuctionItemHome.findAllMatchingItems y le pasa la cadena de búsqueda. AuctionItemBean es un bean de entidad que maneja actualizaciones y recuperaciones de ítems de la subasta.

El resultado de la búsqueda es devuelto a este método en una variableEnumeration.

>     public Enumeration getMatchingItemsList(
>     		String searchString)
>     	throws RemoteException {

>       Enumeration enum=null;
>       try{
>     //Create Home interface for AuctionItemBean
>         AuctionItemHome home = (AuctionItemHome)
>     	ctx.lookup("auctionitems");

>     //Pass search string to Home interface method
>         enum=(Enumeration)home.findAllMatchingItems(
>     	searchString);
>       }catch (Exception e) {
>         System.out.println("getMatchingItemList: "+e);
>         return null;
>       }
>       return enum;
>     }

### AuctionItemHome.findAllMatchingItems

El método AuctionItemHome.findAllMatchingItems no está implementado por AuctionItemBean. Las implementaciones del método AuctionItemBean finder están definidas en el descriptor de desarrollo de AuctionItemBean cuando se usan contenedores de BEA Weblogic.

Cuando se usan estos contenedores, incluso si el Bean tiene implementaciones del método finder, son ignorados y en su lugar se consultan las selecciones en el descriptor de desarrollo.

>     //Declare method in Home interface
>       public Enumeration findAllMatchingItems(
>     		String searchString)
>     	throws FinderException, RemoteException;

### Descriptor de Desarrollo de AuctionItemBean

Cuando se llama a un método finder de un Bean, el contenedor consulta el descriptor de desarrollo para ese Bean para encontrar qué datos necesita recuperar el método finder de la tabla de la base de datos. El contenedor pasa esta información al servidor Enterprise JavaBeans, que hace la recuperación real.

El descriptor de desarrollo para AuctionItemBean proporciona finderDescriptors para todos los métodos finder declarados en el interface AuctionItemHome. El finderDescriptor para el método findAllMatchingItems mapea la cadena de búsqueda al campo summary de la tabla AuctionItems de la base de datos. Esto le dice al servidor Enterprise JavaBeans que recupere los datos de todas las filas de la tabla en las que el contenido del campo summary corresponda con el texto de la cadena de búsqueda.

>     (finderDescriptors
>      "findAllItems()"         "(= 1 1)"
>      "findAllNewItems(java.sql.Date newtoday)"
>     	"(= startdate $newtoday)"
>      "findAllClosedItems(java.sql.Date closedtoday)"
>     	"(= enddate $closedtoday)"
>      "findAllMatchingItems(String searchString)"
>     	"(like summary $searchString)"
>     ); end finderDescriptors

Ozito