Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar la Advanced I/O Function

Comencemos a codificar la aplicación Alien City configurando el componente de la función.

El directorio de la función Java ( functions/AlienCityAIO ) contiene los siguientes archivos:

  • El archivo principal de la función AlienCityAIO.java
  • El archivo de configuración catalyst-config.json
  • Los archivos de biblioteca Java en la carpeta lib
  • Los archivos de dependencias .classpath y .project

Agregarás código en el archivo principal de la función AlienCityAIO.java.

Las dos APIs en la Advanced I/O Function que manejan el enrutamiento entre el servidor y Data Store son:

  • GET /alien: Para verificar si hay alienígenas presentes en una ciudad
  • POST /alien: Para reportar la presencia de alienígenas en una ciudad

Ahora agreguemos el código en el archivo de la función.

Copia el código que se muestra a continuación y pégalo en AlienCityAIO.java en el directorio functions/AlienCityAIO de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu preferencia para trabajar con los archivos de la aplicación.

Nota: Revisa el código de esta sección para asegurarte de comprenderlo completamente.
AlienCityAIO.java
copy
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.zc.common.ZCProject;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.catalyst.advanced.CatalystAdvancedIOHandler;
import com.zc.component.object.ZCObject;
import com.zc.component.object.ZCRowObject;
import com.zc.component.zcql.ZCQL;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class AlienCityAIO implements CatalystAdvancedIOHandler {
private static final Logger LOGGER = Logger.getLogger(AlienCityAIO.class.getName());
private static String TABLENAME = "AlienCity";
private static String COLUMNNAME = "CityName";
JSONObject responseData = new JSONObject();
static String GET = "GET";
static String POST = "POST";
@Override
@SuppressWarnings("unchecked")
public void runner(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
	ZCProject.initProject();
			//Obtiene el endpoint y el método al que se realizó la llamada
			String url = request.getRequestURI();
			String method = request.getMethod();
			//La API GET que verifica la tabla en busca de un encuentro con alienígenas en esa ciudad
			if ((url.equals("/alien")) && method.equals(GET)) {
				String cityName = request.getParameter("city_name");
				//Consulta la tabla de Catalyst Data Store y verifica si existe una fila para la ciudad dada
				int length = getAlienCountFromCatalystDataStore(cityName);
					if (length > 0) {
						responseData.put("message", "Uh oh! Looks like there are aliens in this city!");
						responseData.put("signal", "positive");
					} else {
						responseData.put("message", "Hurray! No alien encounters in this city yet!");
						responseData.put("signal", "negative");
					}
				}
				//La API POST que reporta el encuentro con alienígenas en una ciudad específica
				else if ((url.equals("/alien")) && method.equals(POST)) {
					//Obtiene el cuerpo de la solicitud y lo analiza
					ServletInputStream requestBody = request.getInputStream();
					JSONParser jsonParser = new JSONParser();
					JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(requestBody, "UTF-8"));
					String cityName = (String) jsonObject.get("city_name");
					//Consulta la tabla de Catalyst Data Store y verifica si existe una fila para la ciudad dada
					int length = getAlienCountFromCatalystDataStore(cityName);
					if (length > 0) {
						responseData.put("message",
							"Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!");
					}
					//Si la fila no existe, se inserta una nueva fila
					else {
						ZCRowObject row = ZCRowObject.getInstance();
						row.set("CityName", cityName);
						ZCObject.getInstance().getTableInstance(TABLENAME).insertRow(row);
						responseData.put("message", "Thanks for reporting!");
					}
				} else {
					//Las acciones se registran en los logs. Puedes verificar los logs desde Catalyst Logs.
					LOGGER.log(Level.SEVERE, "Error. Invalid Request");
					responseData.put("error", "Request Endpoint not found");
					response.setStatus(404);
				}
				//Envía la respuesta de vuelta al Client
				response.setContentType("application/json");
				response.getWriter().write(responseData.toString());
				response.setStatus(200);
			} catch (Exception e) {
				//Las acciones se registran en los logs. Puedes verificar los logs desde Catalyst Logs.
				LOGGER.log(Level.SEVERE, "Exception in AlienCityAIO", e);
				responseData.put("error", "Internal server error occurred. Please try again in some time.");
				response.getWriter().write(responseData.toString());
				response.setStatus(500);
			}
		}
		/**
		* Verifica si ya se reportó un encuentro con alienígenas en la ciudad dada
		* consultando la tabla de Data Store
		*
		* @param {*} catalystApp
		* @param {*} cityName
		*/
		private int getAlienCountFromCatalystDataStore(String cityName) throws Exception {
			String query = "SELECT * FROM AlienCity WHERE CityName = '" + cityName + "'";
			//Obtiene la instancia de ZCQL y ejecuta la consulta usando la cadena de consulta
			ArrayList rowList = ZCQL.getInstance().executeQuery(query);
			return rowList.size();
		}
}
View more

El directorio de funciones está ahora configurado. Discutiremos la arquitectura de la función y del cliente en la siguiente sección.

Última actualización 2026-03-20 21:51:56 +0530 IST