@Override
	public TheatersListReplyMessage listRequest(int zone) throws RemoteException{
				
		LinkedList<Theater> listTheaters = cache.getAllTheaters(zone);
		
		TheatersListReplyMessage reply = null;
		if(listTheaters != null && listTheaters.size() > 0){
			reply = new TheatersListReplyMessage(zone, listTheaters);
		}else{
							
			//Creates a communication channel between this and the DBServer
			CommunicationController databaseCC;
			try {
				databaseCC = new CommunicationController(new Socket(this.dbAddress, this.dbPort));
			} catch (UnknownHostException e) {
				return new TheatersListReplyMessage(zone, null);
			} catch (IOException e) {
				return new TheatersListReplyMessage(zone, null);

			}
			
			reply = Skeleton.getTheatersList(new TheatersListRequestMessage(zone), databaseCC);
			databaseCC.closeConnection();
			
			if(reply == null)
				return null;
			
			//If has not occurred an error it puts the zone theaters to cache.
			LinkedList<Theater> theaters = reply.getListTheaters();
			if(theaters != null)
				cache.addZone(theaters, zone);
			
			
		}
		
		//If an error occurred the reply == null and it is returned
		return reply;
	}