Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

This page provides a quick run-through of what the <b>Stored Override</b> example does. For more details, you should refer to the source, which you will find in the download kit under:

  examples/stored_override

You can build and run the example by simply cd'ing into that directory and typing ant.

Example Scenario

Suppose that we have a simple JSR175 annotation type called DeploymentInfo which specifies a 'cacheSize' attribute for some kind of deployment unit:

DeploymentInfo.java

Suppose that we also have an deployment unit called TinyCacheEJB which has a DeploymentInfo annotation:

TinyCacheEJB.java

This example demonstrates a very simple way in which we might use Annogen to allow for the value of cacheSize to be overridden in an elegant manner.

Generate Phase

The first thing we have to do is generate an AnnoBean that will act as a proxy to instances of DeploymentInfo. To do this, we simply run Annogen's compilation task on DeploymentInfo:

build.xml


This generates a DeploymentInfoAnnoBean that implements DeploymentInfo:

DeploymentInfoAnnoBean.java

Override Phase

Notice that the generated DeploymentInfoAnnoBean class has a setter for cacheSize. We're now going to create an AnnoOverrider which uses that setter to effectively change the size of the cache on TinyCacheEJB. We first create an instance of StoredAnnoOverrider, which is a helper class Annogen provides for building simple AnnoOverriders.

User.java


StoredAnnoOverrider requires us to make an ElementId for the TinyCacheEJB class:


...which we will use to get an instance of the DeploymentInfoAnnoBean which applies to TinyCacheEJB.


The StoredAnnoOverrider will provide this DeplyomentInfoAnnoBean as a replacement for the DeploymentInfo annotation on TinyCacheEJB. So, if we change the value of cacheSize on it:


We have changed the value of cache size for TinyCacheEJB as it will appear when our framework code views its DeploymentInfo annotation.

View Phase

Compared to the Override phase, the View phase is very simple. All we have to do is create an AnnoViewer which knows about the AnnoOverrider we created above:

DeployerTool.java


This annoViewer can now tell us about any annotations want to know about, and it will take our overrides into account. So, if get the DeploymentInfo for TinyCacheEJB:

borderStyle=solid


we will get back a DeploymentInfo annotation object which reflects our cacheSize override.

In reality, deploymentInfo is an instance of DeploymentInfoAnnoBean, but one nice thing here is that it is an instance of our regular 175 annotation type, DeploymentInfo. We can look at the cacheSize value on the TinyCacheEJB and just go deploy it without a bunch of extra messy logic to check whether the value was overridden.

This is one of the key advantages the Annogen provides: the logic for overriding annotations is cleanly paritioned away from the code which is trying to do something with those annotations.

  • No labels