Seasar DI Container with AOP

�e�X�g�Z�@Exercise

�e�X�g�Z�@�̗���x���`�F�b�N���܂��B���L�̖��Ɋւ��ē��Ă͂܂���̂�1�‘I��Ń`�F�b�N����ꂽ��A���́u�𓚂�GO�v�{�^�����N���b�N���Ă��������B

���b�N���쐬���邽�߂̐ݒ�Ɋւ�����

�y���1�z
�C���^�[�t�F�[�X�̃��b�N��ݒ肷��ɂ́A�ȉ��̂ǂ�Interceptor���g���΂����ł��傤���H
�q���g�F���b�N���쐬���邽�߂̐ݒ����Q�Ƃ��Ă��������B

1) TraceInterceptor
2) MockInterceptor
3) ThrowsInterceptor
4) DelegateInterceptor

�y���2�z
�C���^�[�t�F�[�X�̃��\�b�h�ɖ߂�l��ݒ肷��MockInterceptor�̃��\�b�h�͈ȉ��̂ǂ�ł��傤���H
�q���g�F���b�N���쐬���邽�߂̐ݒ����Q�Ƃ��Ă��������B

1) setMock(String methodName, Object returnValue)
2) isInvoked(String methodName)
3) getArgs(String methodName)
4) setReturnValue(String methodName, Object returnValue)

�y���3�z
MockInterceptor#isInvoked()�͉��𔻒肷�郁�\�b�h�ł��傤���H
�q���g�F���b�N���쐬���邽�߂̐ݒ����Q�Ƃ��Ă��������B

1) ���\�b�h�Ɉ����������Ă��邩�ǂ����𔻒肷��B
2) ���\�b�h�����邩�ǂ����𔻒肷��B
3) ���\�b�h���Ă΂ꂽ���ǂ����𔻒肷��B
4) ���\�b�h�Ƀ��b�N���쐬�ł��邩�ǂ����𔻒肷��B


���b�N�̎g�p���@�Ɋւ�����

�y���1�z
������[1]�ɓ��錾�t�͂ǂ�ł��傤���H
�C���^�[�t�F�[�X�̃��b�N���쐬����ɂ́A�C���^�[�t�F�[�X�ɑ΂��Đݒ肵��MockInterceptor��[1]���Ďg�p���܂��B
�q���g�F���b�N�̎g�p���@���Q�Ƃ��Ă��������B

1) �A�X�y�N�g
2) Dependency Injection
3) BEAN�A�m�e�[�V����
4) �p��

�y���2�z
public interface Hello {
  public String showMessage(String str);
}
��L�̃C���^�[�t�F�[�X��showMessage()���\�b�h���Ăяo���ꂽ�Ƃ���"Hello"��Ԃ��悤�ɃR���|�[�l���g��`�Ń��b�N���쐬����ꍇ�A
�ȉ��̒�`��[1]�ɓ���^�O�͂ǂ�ł��傤���H

<component class="examples.aop.Hello">
  <aspect>
    <component class="org.seasar.framework.aop.interceptors.MockInterceptor">
      <initMethod name="setReturnValue">
          [1]
      <initMethod>
    </component>
  </aspect>
</component>

�q���g�F���b�N�̎g�p���@���Q�Ƃ��Ă��������B

1)
<arg>"showMessage(String str)"</arg>
<arg>"Hello"</arg>
2)
<arg>"showMessage"</arg>
<arg>"Hello"</arg>
3)
<arg>"showMessage"</arg>
4)
<arg>"Hello"</arg>
<arg>"showMessage"</arg>

�y���3�z
public interface Hello {
  public String showMessage(String str);
}
��L���\�b�h�ɑ΂���dicon�t�@�C�����g�p������Java�Ń��b�N���`�����ꍇ�A���\�b�h���Ăяo�����Ƃ���
�����̒l�𐳂����\������R�[�h�͂ǂ�ł��傤���H

MockInterceptor mi = new MockInterceptor();
mi.setReturnValue("showMessage", "world");
Hello hello = mi.createProxy(Hello.class);
hello.showMessage("hoge");
�q���g�F���b�N�̎g�p���@���Q�Ƃ��Ă��������B

1) System.out.println(mi.getArgs("showMessage"));
2) System.out.println(mi.getArgs("Hello")[0]);
3) System.out.println(mi.getReturnValue("showMessage")[0]);
4) System.out.println(mi.getArgs("showMessage")[0]);


S2Unit�̍쐬���@�Ɋւ�����

�y���1�z
S2Unit���g�p����ꍇ�A�ǂ̃N���X���p�����ăe�X�g�N���X���쐬����ł��傤���H
�q���g�FS2Unit���g�����e�X�g�N���X�̍쐬���@���Q�Ƃ��Ă��������B

1) junit.framework.TestCase
2) org.seasar.extension.unit.S2UnitTestCase
3) org.seasar.framework.unit.S2TestCase
4) org.seasar.extension.unit.S2TestCase


S2Container�̎��������Ɋւ�����

�y���1�z
S2Unit���g�p����e�X�g�N���X�Ŏ����I��S2Container�����������̂͂ǂ��ł��傤���H
�q���g�FS2Unit�@�\��S2Container�̎����������Q�Ƃ��Ă��������B

1) �e�X�g���\�b�h(testXxx)����
2) setUp()���\�b�h
3) �R���X�g���N�^
4) main


S2Container�ɑ΂���register(),getComponent(),include()�Ɋւ�����

�y���1�z
S2Unit�ɂ́AS2Container�ɑ΂��郁�\�b�h���p�ӂ���Ă��܂����A�p�ӂ���Ă��Ȃ����\�b�h�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��register(),getComponent(),include()���\�b�h���Q�Ƃ��Ă��������B

1) register()
2) getComponent()
3) destroy()
4) include()


include����PATH�̏ȗ��Ɋւ�����

�y���1�z
S2Unit��dicon�t�@�C����ǂݍ��݂����ꍇ�Ɏg�����\�b�h�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��register(),getComponent(),include()���\�b�h���Q�Ƃ��Ă��������B

1) readDicon()
2) register()
3) include()
4) create()

�y���2�z
S2Unit���g�p���Ă���aaa.bbb.CccTest�e�X�g�N���X��aaa/bbb/hoge.dicon���C���N���[�h����ꍇ�A�������̂͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��include����PATH�̏ȗ� ���Q�Ƃ��Ă��������B

1) include("../hoge.dicon")
2) include("aaa/bbb/hoge")
3) include("aaa.bbb.hoge.dicon")
4) include("hoge.dicon")


�ϐ��̎����Z�b�g�Ɋւ�����

�y���1�z

<component name="TestA" class="java.lang.String">
  <arg>"Hello"<arg>
</component>
������"Hello"�������I�ɃZ�b�g����Ȃ��ϐ��錾�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\�ϐ��̎����Z�b�g���Q�Ƃ��Ă��������B

1) public String hoge
2) private String hello;
3) private String testA="testA";
4) private String testA_;


�y���2�z

<component name="testB" class="java.lang.String">
  <arg>"Hello"</arg>
</component>
<component name="testA" class="java.lang.String">
  <arg>"world"</arg>
</component>
������"world"�������I�ɃZ�b�g�����ϐ��錾�͂ǂ�ł��傤���H�R���|�[�l���g�̓o�^����testB,testA�Ƃ���B
�q���g�FS2Unit�@�\�ϐ��̎����Z�b�g���Q�Ƃ��Ă��������B

1) private String TESTA_;
2) private String testA_;
3) private String testA_ = "testA";
4) private static final String testA_ = "testA";


setUpXxx(),tearDownXxx()���\�b�h�Ɋւ�����

�y���1�z
����e�X�g���\�b�h�ɂ����•ʂ̏������������s�������ꍇ�̐��������\�b�h��`�͈ȉ��̂ǂ�ł��傤�H
�q���g�FS2Unit�@�\��setUpXxx(),tearDownXxx()���\�b�h���Q�Ƃ��Ă��������B

1) xxxSetUp()
2) afterSetUp()
3) setUpXxx()
4) setupXxx()

�y���2�z
S2Unit���g�p����e�X�g�N���X�ňȉ��̂悤��String�^�̕ϐ�str��testHello()���\�b�h������"Hello"������ݒ肵�����ꍇ�A
���̐ݒ���s�����\�b�h�̒�`�Ő������̂͂ǂ�ł��傤���H
private String str;

public void testHello() throws Exception {
    �F
}
�q���g�FS2Unit�@�\��setUpXxx(),tearDownXxx()���\�b�h���Q�Ƃ��Ă��������B

1) public void setUpHello() throws Exception;
2) private void setUpHello() throws Exception;
3) public void setUpTestHello() throws Exception;
4) public void setUphello() throws Exception;

�y���3�z
����e�X�g���\�b�h�ɂ����•ʂ̏I���������s�������ꍇ�̐��������\�b�h��`�͈ȉ��̂ǂ�ł��傤�H
�q���g�FS2Unit�@�\��setUpXxx(),tearDownXxx()���\�b�h���Q�Ƃ��Ă��������B

1) xxxTearDown()
2) afterTearDown()
3) tearDownXxx()
4) teardownXxx()

�y���4�z
testHello���\�b�h�ɑΉ�����tearDownHello���\�b�h�͂ǂ̃^�C�~���O�Ŏ��s�����ł��傤�H
�q���g�FS2Unit�@�\��setUpXxx(),tearDownXxx()���\�b�h���Q�Ƃ��Ă��������B

1) tearDown()���\�b�h�̒���
2) tearDown()���\�b�h�̒��O
3) destroy()���\�b�h�̒��O
4) testHello()���\�b�h�̒��O

�g�����U�N�V��������Ɋւ�����

�y���1�z
�e�X�g���\�b�h�̒��O�Ƀg�����U�N�V�������J�n���A�e�X�g�ōs�������������[���o�b�N���邽�߂ɂ̓e�X�g���\�b�h�����ǂ̂悤�ɂ���΂悢�ł��傤���H
�q���g�FS2Unit�@�\���g�����U�N�V�����������Q�Ƃ��Ă��������B

1) testXxxTx()
2) testXxxTX()
3) testTxXxx()
4) txTestXxx()

readXls()���\�b�h�Ɋւ�����

�y���1�z
DataSet�Ɍ��ؗp��Excel�f�[�^��ǂݍ��ރ��\�b�h�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��readXls()���\�b�h���Q�Ƃ��Ă��������B

1) readXls()
2) readDbByTable()
3) readDbBySql()
4) readXlsByDataSet()

�y���2�z
���ؗp��Excel�f�[�^��aaa/bbb/getEmployee.xls�ɂ���ꍇ�AreadXls()���������Ȃ���`���@�͂ǂ�ł��傤���H
�e�X�g�N���X�́Aaaa.bbb.EmployeeTest�Ƃ���B
�q���g�FS2Unit�@�\��readXls()���\�b�h���Q�Ƃ��Ă��������B

1) readXls("getEmployee.xls")
2) readXls("aaa/bbb/getEmployee.xls")
3) readXls("../bbb/getEmployee.xls")
4) readXls("getEmployee")

assertEquals()���\�b�h�Ɋւ�����

�y���1�z
assertEquals()���\�b�h�ŗ\�z�����DataSet�̌��ʂɑ΂��Ĕ�r�ł��Ȃ����̂͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��assertEquals()���\�b�h���Q�Ƃ��Ă��������B

1) Bean��List
2) Map��List
3) Bean
4) Bean�̔z��

�y���2�z
public interface EmployeeDao {
  public Class BEAN = Employee.class;
  public List getAllEmployees();
}
��L��DAO��getAllEmployees()���\�b�h�̌��ʂɑ΂��ăe�X�g���s���ꍇ�A S2Unit���g�p����e�X�g�N���X�ŗ\�z�����DataSet���g����assertEquals()���\�b�h �Ŕ�r������@���������̂͂ǂ�ł��傤���H
�������\�z�����DataSet�̕ϐ�����expected�AgetAllEmployees()���\�b�h�Ŏ擾����List �̕ϐ�����employees�Ƃ���B
�q���g�FS2Unit�@�\��assertEquals()���\�b�h���Q�Ƃ��Ă��������B

1) assertEquals(expected, employees, "TEST")
2) assertEquals(employees)
3) assertEquals(expected, employees)
4) assertEquals(employees, expected)

reload()���\�b�h�Ɋւ�����

�y���1�z
DataSet�̒��g���v���C�}���[�L�[�Ń����[�h���ĐV����DataSet���擾����reload()�̐�������`�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��reload()���\�b�h���Q�Ƃ��Ă��������B

1) public void reload(DataSet dataSet)
2) public DataTable reload(DataTable table)
3) public DataSet reload()
4) public DataSet reload(DataSet dataSet)

�y���2�z
�v���C�}���[�L�[�Ń����[�h���ĐV����DataSet���擾����reload()�Ńv���C�}���[�L�[�̎w��ɂ‚��āA �����������͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��reload()���\�b�h���Q�Ƃ��Ă��������B

1) Excel�f�[�^�Ƀv���C�}���[�L�[���w�肷��K�v������B
2) DataSet�Ƀv���C�}���[�L�[���w�肷��K�v������B
3) reload()�̈����Ńv���C�}���[�L�[���w�肷��K�v������B
4) �����w�肷��K�v���Ȃ��B

readXlsWriteDb(),readXlsAllReplaceDb()���\�b�h�Ɋւ�����

�y���1�z
���炩���ߏ��������e�X�g�p��Excel�f�[�^��DB�ɓo�^���郁�\�b�h�͂ǂ�ł��傤���H
�q���g�FS2Unit�@�\��readXlsWriteDb(),readXlsAllReplaceDb()���\�b�h���Q�Ƃ��Ă��������B

1) writeXls()
2) readXlsWriteDb()
3) writeDb()
4) dbWrite()

�y���2�z
���炩���ߏ��������e�X�g�p��Excel�f�[�^��aaa/bbb/getEmployee.xls�ɂ���ꍇ�AreadXlsWriteDb()�̐�������`���@�͂ǂ�ł��傤���H
�e�X�g�N���X�́Aaaa.EmployeeTest�Ƃ���B
�q���g�FS2Unit�@�\��readXlsWriteDb(),readXlsAllReplaceDb()���\�b�h���Q�Ƃ��Ă��������B

1) readXlsWriteDb("getEmployee.xls")
2) readXlsWriteDb("aaa/bbb/getEmployee")
3) readXlsWriteDb("../getEmployee.xls")
4) readXlsWriteDb("aaa/bbb/getEmployee.xls")

�y���3�z
�e�[�u��A�̃e�X�g�p�̃f�[�^��Excel�t�@�C���ɍ쐬����readXlsAllReplaceDb()���\�b�h�ŁA����Excel�t�@�C���̓��e���e�[�u��A�Ɋi�[����ꍇ�AExcel�t�@�C���̍쐬���@�Ő������̂͂ǂ�ł��傤���H
�������e�[�u��A�͊O���L�[�Ńe�[�u��B���Q�Ƃ��Ă���Ƃ���B
�q���g�FS2Unit�@�\��readXlsWriteDb(),readXlsAllReplaceDb()���\�b�h���Q�Ƃ��Ă��������B

1) �e�[�u��A�̃V�[�g��1�쐬����B
2) �e�[�u��A,�e�[�u��B�̒�`���ɃV�[�g��2�쐬����B
3) �e�[�u��B�̃V�[�g��1�쐬����B
4) �e�[�u��B�A�e�[�u��A�̒�`���ɃV�[�g��2�쐬����B

Excel�t�@�C���̍쐬�Ɋւ�����

�y���1�z
�ȉ��̕��͂�[1]��[2]�ɓ��錾�t�͂ǂ�ł��傤���H
���ؗp��Excel�t�@�C�����쐬����ꍇ�A�V�[�g���ɂ�[1]�A�V�[�g��1�s�ڂɂ�[2]���L�q���܂��B�܂��AN:1�̃}�b�s���O���Ă���ꍇ�́u[2]_�֘A�ԍ��v�̖��O�ŋL�q���܂��B�V�[�g��2�s�ڈȍ~�ɂ̓f�[�^���L�q���܂��B
�q���g�F�e�X�g�Z�@��Excel�t�@�C���̍쐬���Q�Ƃ��Ă��������B

1) [1]Bean�N���X�� [2]�J������
2) [1]�e�[�u���� [2]�J������
3) [1]�e�[�u���� [2]Dao��
4) [1]�f�[�^�x�[�X�� [2]�e�[�u����

�y���2�z
org.seasar.extension.dataset.impl.SqlReader�N���X���g���ăf�[�^�x�[�X�̃e�[�u���̓��e��DataSet�ɓǂݍ��܂���ꍇ�ASQL�����g�p���āA���̌��ʂ�DataSet�ɓǂݍ��܂��郁�\�b�h�͂ǂ�ł��傤���H
�q���g�F�e�X�g�Z�@��Excel�t�@�C���̍쐬���Q�Ƃ��Ă��������B

1) addSql()
2) readSql()
3) addTable()
4) read()

�y���3�z
aaa/bbb/Ccc�N���X�Ńf�[�^�x�[�X�̃e�[�u������ǂݍ���DataSet��Excel�t�@�C���ɏo�͂���ꍇ�Aorg.seasar.extension.dataset.impl.XlsWriter�N���X�ŏo�͐���w�肵�ďo�͂��܂����A�ȉ���XlsWriter�N���X�̃R���|�[�l���g��`��[1]�ɓ���o�͐�̃p�X�̎w����@�Ő������̂͂ǂ�ł��傤���H�o�͐��Excel�t�@�C����aaa/bbb/test.xls�Ƃ���B

<component class="org.seasar.extension.dataset.impl.XlsWriter" instance="prototype">
                 [1]
</component>
�q���g�F�e�X�g�Z�@��Excel�t�@�C���̍쐬���Q�Ƃ��Ă��������B

1) <initMethod>#self("aaa/bbb/test.xls")</initMethod>
2) <property name="path">"aaa/bbb/test.xls"</property>
3) <initMethod name="write">"aaa/bbb/test.xls"</initMethod>
4) <arg>"test.xls"</arg>

S2DaoTestCase�Ɋւ�����

�y���1�z
S2DaoTestCase�̐����Ƃ��ĊԈ���Ă���̂͂ǂ�ł��傤���H
�q���g�F�e�X�g�Z�@��S2DaoTestCase���Q�Ƃ��Ă��������B

1) S2DaoTestCase��S2TestCase���p��������B
2) S2DaoTestCase���p�����ăe�X�g�N���X���쐬����B
3) S2DaoTestCase�ł́AS2Dao��SELECT���̌���(Bean or BeanList)�ȊO�e�X�g�ł��Ȃ��B
4) SELECT���̌��ʂ��e�X�g����ꍇ�A�\�z���ʂ�Excel�t�@�C���Ɣ�r���邱�Ƃ��ł���B

�y���2�z
S2DaoTestCase��S2Dao��SELECT���̌���(Bean)��Excel�t�@�C���Ɣ�r����Ƃ��A���ʂ�Bean�Ɉȉ��̂悤��COLUMN�A�m�e�[�V����������ꍇ�A Excel�t�@�C���̃V�[�g1�s�ڂɂ��̃J���������L�q���鏑�����Ő������̂͂ǂ�ł��傤���H

public static final String employeeNumber_COLUMN = "EMPNO";
�q���g�F�e�X�g�Z�@��S2DaoTestCase���Q�Ƃ��Ă��������B

1) employeeNumber
2) EMPNO
3) employeeNumber_COLUMN
4) �J�����A�m�e�[�V��������Ă���J�����͔�r���o���Ȃ��̂ŋL�q���Ȃ��B