# Getting Started

If you just joined the team, start with the UI flow, then the backing bean and business logic, and only then dive into deployment descriptors and XML configuration. This codebase is centered on a JSF-style web application with supporting EJB/configuration files, so the fastest way to become productive is to trace one feature end-to-end before widening out.

## What This Project Does

This project appears to implement a Java web application built around a JSF front end, request filters, application listeners, and EJB-backed business logic. The fixture set shows the same feature wired through multiple XML descriptor styles, which suggests the codebase is used to model and test how Java references are discovered across web, EJB, and config files.

## Recommended Reading Order

1. Read the feature entry point in the web layer: [web.xml](../../xml-web-xml-multi-pattern/koptWebA/WebContent/WEB-INF/web.xml)
2. Open the primary managed bean and logic classes: [ACA001SFBean](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFBean.java) and [ACA001SFLogic](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFLogic.java)
3. Review the deployment and app wiring files: [faces-config.xml](../../xml-faces-config/koptWebA/WebContent/WEB-INF/faces-config.xml), [sun-ejb-jar.xml](../../xml-sun-ejb-jar/koptBp/ejbModule/META-INF/sun-ejb-jar.xml), and [sun-ejb-jar-jndi-only.xml](../../xml-jndi-only/META-INF/sun-ejb-jar-jndi-only.xml)
4. Scan the remaining XML fixtures to understand special cases: [external-refs.xml](../../xml-unresolved-fqn/src/config/external-refs.xml), [pure-config.xml](../../xml-no-java-refs/src/config/pure-config.xml), and [layout.xml](../../xml-css-class-only/src/web/views/layout.xml)

## Key Entry Points

The two most important classes to understand first are:

- [ACA001SFBean](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFBean.java) — the managed bean that sits at the UI boundary and is referenced from JSF configuration.
- [ACA001SFLogic](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFLogic.java) — the business logic class that the bean delegates to and the main class referenced by other descriptors.

These are the highest-value starting points because they connect the web layer to the application logic and are referenced repeatedly throughout the fixture set.

## Project Structure

The repository is organized as a collection of focused fixtures rather than a single monolithic application. In practice, you will see:

- `full-fixture-codebase/` — the most complete end-to-end sample, including Java sources, JSF config, JSPs, and web descriptors.
- `xml-web-xml-multi-pattern/` — servlet/filter/listener wiring in `web.xml`.
- `xml-faces-config/` — JSF managed-bean declarations.
- `xml-sun-ejb-jar/` and `xml-jndi-only/` — EJB deployment descriptors and JNDI mappings.
- `xml-unresolved-fqn/` — XML that mixes resolved internal class references with unresolved external ones.
- `xml-no-java-refs/` and `xml-css-class-only/` — config files that contain no Java references or only CSS-like class names.
- `xml-build-excluded/` — build-related files and a config file that is intentionally excluded from build scope.

Think of each directory as a small example showing one kind of reference pattern.

## Configuration

The most useful config files to know are:

- [web.xml](../../xml-web-xml-multi-pattern/koptWebA/WebContent/WEB-INF/web.xml) — registers the request encoding filter, `FacesServlet`, and application listener.
- [web-full.xml](../../full-fixture-codebase/koptWebA/WebContent/WEB-INF/web-full.xml) — a smaller variant of the web deployment descriptor used in the full fixture.
- [faces-config.xml](../../xml-faces-config/koptWebA/WebContent/WEB-INF/faces-config.xml) — maps managed beans such as `aca001Bean` to [ACA001SFBean](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFBean.java).
- [sun-ejb-jar.xml](../../xml-sun-ejb-jar/koptBp/ejbModule/META-INF/sun-ejb-jar.xml) — declares EJBs and their JNDI names.
- [sun-ejb-jar-jndi-only.xml](../../xml-jndi-only/META-INF/sun-ejb-jar-jndi-only.xml) — a minimal descriptor that only exposes the JNDI binding.
- [external-refs.xml](../../xml-unresolved-fqn/src/config/external-refs.xml) — shows how the code handles a mix of internal and external fully qualified class names.
- [pure-config.xml](../../xml-no-java-refs/src/config/pure-config.xml) — example of a config file with no Java symbols.
- [layout.xml](../../xml-css-class-only/src/web/views/layout.xml) — example of a file that uses class-like strings that should not be confused with Java references.

## Common Patterns

A few patterns repeat across the codebase:

- Configuration-driven wiring: classes are often connected in XML instead of through direct code references.
- Feature-scoped packaging: related bean, logic, JSP, and descriptor files live close together under the same feature area.
- Naming by screen or function code: identifiers such as `ACA001SF` are used consistently across bean, logic, and descriptor files.
- Multiple descriptor variants: the same concept may appear in a full descriptor, a minimal descriptor, and an alternate fixture that isolates one behavior.
- Separation of UI and business logic: beans are used as entry points, while logic classes hold the core behavior.

## Suggested First Pass

If you only have one hour, do this:

1. Open [ACA001SFBean](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFBean.java).
2. Jump to [ACA001SFLogic](../../full-fixture-codebase/src/java/eo/web/webview/ACA001SF/ACA001SFLogic.java).
3. Check [faces-config.xml](../../xml-faces-config/koptWebA/WebContent/WEB-INF/faces-config.xml) to see how the bean is exposed.
4. Read [web.xml](../../xml-web-xml-multi-pattern/koptWebA/WebContent/WEB-INF/web.xml) to understand how the request enters the app.

That path will give you the quickest mental model for how this codebase is wired.
