反面教師
もし以下のようなコードを書いてしまうと、#{exA.doSomething()}を呼んでも全く意味がなくなってしまいます。
@Stateless @Name("exA") public class ExampleABean implements ExampleA { @In @Out private ExampleEntity exEntity; @In private ExampleB exB; public String doSomething() { exB.doSomethingAtB(); return viewId; } } @Stateless @Name("exB") public class ExampleBBean implements ExampleB { // Aと同じものをバイジェクト @In @Out private ExampleEntity exEntity; public void doSomethingAtB() { // exEntityを更新 } }
doSomethingAtBで行ったexEntityへの更新は呼び元のexA.doSomething()に戻る前にアウトジェクトされて一時的に反映されますが、exAにインジェクトされている値はdoSomething()呼び出し前の値なので、doSomething()のreturn時にその値をアウトジェクトして上書きします。