EJB

EJB����

�쐬�@2002/11/9
�X�V�@2002/11/27

���̃y�[�W��EJB�ɂ‚��Ẵ����ł��B

EJB�Ƃ́H

EJB�Ƃ́H

Enterprise Java Beans�B

EJB�̂�������ɏ]���āA�J�����邱�ƂŁA �A�v���P�[�V�����̐��Y���A�ێ琫�A�g�����Ȃǂ����シ��B

EJB�R���e�i���V�X�e�����x���̃T�[�r�X���s���Ă����̂ŁA �A�v���P�[�V�����J���҂͍�肽���h���C���ɐ�O�ł���B �g�����U�N�V������Z�L�����e�B�� (��������΁H)�ȒP�Ȑݒ�Ŏ����ł���B

�����A���������������̂���ρB�~���������B��������R�X�g�������B �߂�ǂ������B�V�X�e���̐M�������g������ ����قǏd�v�łȂ��ꍇ�ɂ͋t���ʁB �Ȃ̂ŁA�Ȃ�ł�����ł��g���΂n�j�Ƃ����킯�ł��Ȃ��B

EJB���[��

EJB�d�l�ł́AEJB�J���A�f�v���C�Ɋւ��l�̖������U�‚ɕ����Ă���B
���[���� ����
�G���^�[�v���C�YBean�v���o�C�_ EJB���R�[�f�B���O����l
�A�v���P�[�V�����A�Z���u�� Bean�v���o�C�_�̍����EJB��
DD��Ńg�����U�N�V������Z�L�����e�B��lj�����B
�f�v���C�� EJB���A�v���P�[�V�����T�[�o�Ƀf�v���C���A
���\�[�X�̃}�b�s���O���s���B
�V�X�e���Ǘ��� �A�v���P�[�V�����T�[�o���Ǘ�����
EJB�T�[�o�v���p�C�_ EJB�T�[�o�����
EJB�R���e�i�v���o�C�_ EJB�R���e�i�����

�T�[�o�v���o�C�_�A�R���e�i�v���o�C�_�́A �A�v���P�[�V�����T�[�o�����l�B

�d�l�ネ�[���͕�����Ă��邪�A�����l�������̃��[�������Ȃ��Ă��B �����ȃ`�[�����ƂP�l�S���ɂȂ�ł��傤�B

EJB�̎��

EJB�ɂ͂����‚��̎�ނ�����܂��B

�Z�b�V����Bean

�Z�b�V����Bean�́A�r�W�l�X�v���Z�X�����f�����������̂ł��B �v���Z�X�Ƃ́A�Ⴆ�΁A��������A�󒍂���Ȃǂ̃��W�b�N���w���܂��B �Z�b�V����Bean�͂���ɁA��Ԃ����ƒX�e�[�g�t���Z�b�V����Bean�ƁA ��Ԃ������Ȃ��A�X�e�[�g���X�Z�b�V����Bean�̎�ނ�����܂��A

�G���e�B�e�B�[Bean

�G���e�B�e�B�[Bean�́A�r�W�l�X�G���e�B�e�B�[�����f�����������̂ł��B �G���e�B�e�B�[�Ƃ́A�Ⴆ�΃f�[�^�x�[�X�̂P�e�[�u���������肵�܂��B �G���e�B�e�B�[Bean�͂���ɁA�i�������R���e�i�ɂ܂�����A CMP(Container Managed Persistence : �R���e�i�Ǘ��̉i����) �� BMP(Bean Managed Persistence : Bean�Ǘ��̉i����) �̎�ނ�����܂��B

�G���e�B�e�B�[Bean�̔w�オ�f�[�^�x�[�X�̏ꍇ�A CMP��SQL�̓R���e�i�������I�ɍ��܂��B BMP�̓v���O���}��SQL�������܂��B CMP�������i�ABMP���I�[�_���C�h�Ƃ��������ł��B

���b�Z�[�W�h���u��Bean

���b�Z�[�W�h���u��Bean�͔񓯊����b�Z�[�W�������ꍇ�ɗ��p���܂��B

�Z�b�V����Bean

�X�e�[�g���X�ƃX�e�[�g�t��

�X�e�[�g(���)�����‚������Ȃ����̈Ⴂ�B

�X�e�[�g�t���̑�\��̓V���b�s���O�J�[�g

�X�e�[�g���X�̕����A�X�e�[�g�t�����p�t�H�[�}���X���悢�̂ŁA �ǂ����ł��悯��΁A�X�e�[�g���X��I�����ׂ��B

�N���C�A���g�R�[�h

    InitialContext context = new InitialContext();

    Object object = context.lookup("HelloBean");
    HelloHome home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(object, HelloHome.class);
    Hello hello = home.create();
    String message = hello.sayHello();
    System.out.println(message);

InitialContext�͈����Ȃ��̏ꍇ�ɂ́A�N���X�p�X����jndi.properties����������B
������Properties���w�肵���ꍇ�ɂ͂��̒l���g���B

lookup�̈����ɂ�EJB�R���e�i�Ŏw�肵��JNDI�����w��

narrow�̓i���[�B�󂷂Ƌ��߂�B�v���O�����̈Ӗ��I�ɂ̓N���X�̃^�C�v��ۏ؂��邱�ƁB
Remote�Ăюw���ɂ͕K�{�BLocal�C���^�[�t�F�C�X�̎��ɂ͒P�ɃL���X�g�ʼnB

�悭����G���[��ClassCastException�B
�N���C�A���gJAR���N���X�p�X�Ɋ܂߂Ă��Ȃ�����(�X�^�u���Ȃ�����)������B
�X�^�u�𓮓I�ɍ쐬����d�g�݂�EJB�R���e�i�ł́A�N���C�A���gJAR���s�v(JBoss�Ƃ�)�B

���C�t�T�C�N��

MetaData

EJBHome#getMetaData()��EJBMetaData���擾�ł��܂��B MetaData����z�[���A�����[�g�C���^�[�t�F�C�X�N���X���Ȃǂ��擾�ł��܂��B MetaData�̓c�[���Ȃǂŗ��p�����悤�ł��B

Handle

Handle���g�����ƂŁA�ꎞ�I�ɃV���A���C�Y����EJB�Q�Ƃ̕ۑ����”\�B �ۑ�����Handle�𑼂̃N���C�A���g�ɓn�����Ƃ��ł���B

EJBHome�̃n���h��HomeHanle�ƁAEJBObject�p�̃n���h��Handle������B �g�������͕s���B

EJB1.1 �G���e�B�e�B�[Bean

CMP��BMP

CMP�͊����i�ABMP�̓I�[�_�[���C�h�B

EJB1.1 CMP

���낢�댈�܂肪����

public class ManBean implements EntityBean{
  //�t�B�[���h
  //EJB1.1��CMP�ł̓t�B�[���h��public�ł���K�v������܂��B

  public String id;
  public String name;
  public int age;


  /**
   * �Ԃ�l�̌^�͎�L�[�N���X��CreateException��throw����K�v������܂��B
   * �܂��Ԃ�l��null��Ԃ��K�v������܂��B
   */
  public String ejbCreate(String id) throws CreateException{
    this.id = id;
    return null;
  }

  /**
   * ejbCreate�Ɠ��������������܂��B
   */
  public void ejbPostCreate(String id){
  }

  //...

EJB1.1 BMP

CMP�ƈႢ�A�f�[�^�x�[�X�A�N�Z�X�R�[�h�����O�Ŏ�������B
�t�@�C���_���\�b�h���R�[�h��ɏ���

public class ManBean implements EntityBean{

  private EntityContext context;


  //�t�B�[���h
  //CMP����Ȃ��̂ŕ��ʂ�private
  private String id;
  private String name;
  private int age;


  /**
   * �Ԃ�l�̌^�͎�L�[�N���X��CreateException��throw����K�v������܂��B
   * �܂��Ԃ�l�͎�L�[��Ԃ��K�v������܂��B
   */
  public String ejbCreate(String id) throws CreateException{

    this.id = id;

    String sql = "INSERT INTO " + TABLE + "(" +ID+ ") VALUES(\"" +id+ "\")";
    
    executeUpdate(sql);
    
    return id;//CMP����Ȃ��̂ŕ��ʂɎ�L�[��Ԃ�
  }

  //...

���\�b�h ����
ejbCreate DB��INSERT���A�Ԃ�l�Ɏ�L�[��Ԃ�
ejbPostCreate �ˑ��I�u�W�F�N�g�Ȃǂ�����
ejbFindByPrimaryKey DB����SELECT���A���݂������L�[��Ԃ�
���̑��̃t�@�C���_���\�b�h DB����SELECT���A��L�[���R���N�V������Ԃ�
ejbLoad DB����SELECT
ejbRemove DB����DELETE
ejbStore DB��UPDATE
setEntityContext �R���e�L�X�g�̃Z�b�g
unsetEntityContext �R���e�L�X�g�̃A���Z�b�g
ejbActivate EJB���A�N�e�B�u������B
�R���e�L�X�g�����L�[���擾���A�Z�b�g�B
ejbPassivate EJB���A�N�e�B�u�����A���\�[�X���J������B
�Ⴆ�Ύ�L�[��null��������B

Primary Key�N���X

���C�t�T�C�N��

EJB2.0 �G���e�B�e�B�[Bean

EJB2.0�ł�1.1����CMP�̏����������Ȃ�ς��܂����B �o�[�W�����A�b�v�Ƃ������͕ʕ��ł��B

�V���ɓ������ꂽ�d�l�ňȉ��̖��������ł��܂��B
1.1�̎��̖��_ ����
RDB�e�[�u���̊֘A���ȒP�ɕ\���ł��Ȃ� 1.1�ł͓���ȏ󋵂ł��Ȃ��̂ɁA�֘A��\�����邽�߂�BMP�ɂ��Ȃ���΂Ȃ�܂���ł����B
2.0�ł�Relation�ɂ��֘A��\���ł��܂��B
CMP2.0���g�����ƂŁA���O�ōH�v���Ȃ��Ă��A�G�C���A�V���O�̖��������ł��܂��B
�x�� Local�C���^�[�t�F�C�X����������܂����B
�����x�̍����A�ЂƂ܂Ƃ܂��EJB�́AEJB����EJB��Local�C���^�[�t�F�C�X�ŃA�N�Z�X���邱�ƂŁA�����ɂȂ�܂��B
�܂��AEJB�R���e�i�̍œK�����i�݁A���x�̌��オ�����܂��B
�ŋ߂͈�ʓI��BMP���A�R���e�i���œK���”\��CMP�̕��������ɂȂ�܂��B
finder���\�b�h�̃N�G���ɈڐA�����Ȃ� 2.0�ł�Querry Language�Ƃ������ʌ���ŋL�q���邱�Ƃɂ��A
EJB�̃|�[�^�r���e�B�����߂܂��B

CMP

EJB�N���X�Ƀt�B�[���h�͎������Aabstract�̃Z�b�^�A�Q�b�^���`���܂��B

CMR

Container Managed Relationship�B�e�[�u���Ԃ̊֘A��CMP�ŕ\���ł��܂��B

Querry Language

���b�Z�[�W�h���u��Bean

�悭�������ĂȂ����B�B�B

JMS��Queue����Ĕ񓯊���EJB���Ă�

�悭�g����̂͊m�F���[�����M�Ƃ�

�����[�g�A�z�[���C���^�[�t�F�C�X�͕s�v�ŁA onMessage(Message)���������邾��

�ʐM���f��

JMS���b�Z�[�W���O�ɂ͈ȉ��̂Q�‚̃��f��������B
Point-to-Point�@��Queue
Publish/Subscribe�@��Topic

�P�v���b�Z�[�W�Ɖi�����b�Z�[�W

�g�s�b�N�̃T�u�X�N���C�u�ɂ͈ȉ��̂Q�‚̕���������B
�P�v(Durable)
�i��(Persistent)

�N���C�A���g

    InitialContext ctx = new InitialContext();
    QueueConnectionFactory factory = 
      (QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
    Queue queue = 
      (Queue)ctx.lookup("HelloQueue");

    QueueConnection con = factory.createQueueConnection();
    QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    MapMessage message = session.createMapMessage();
    message.setString("word", "hello");

    QueueSender sender = session.createSender(queue);
    sender.send(message);
�ڑ��t�@�N�g���Ɛڑ���̂Q�‚����b�N�A�b�v���Ďg���炵���B

���\�[�X�Q��

���\�[�X�̕����I�Ȉʒu���\�[�X�R�[�h���番�����邽�߂̎d�g��

���\�[�X�Q��(�H)�̎��

���� DD��̋L�q ����
�‹��G���g�� env-entry �P�Ȃ�l�ւ̃}�b�s���O
Bean�Q�� ejb-ref/ejb-local-ref ����EJB�ւ̃}�b�s���O
���\�[�X�}�l�[�W���ڑ��t�@�N�g�� resource-ref �f�[�^�\�[�X�AJavaMail�Z�b�V�����AJMS�ڑ��A
URL���\�[�X�A���K�V�[���\�[�X�ւ̃}�b�s���O
resource-ref�̓��\�[�X�t�@�N�g���ւ̎Q�Ƃł��B
�Ⴆ�΃f�[�^�\�[�X�Q�Ƃ́A�Q�Ɛ��Connection�łȂ�DataSoruce�ł��B
���\�[�X�‹��Q�� resource-env-ref JMS���M���JavaMailSession�ւ̃}�b�s���O

JNDI�T�u�R���e�L�X�g

EJB java:comp/env/ejb
�f�[�^�\�[�X java:comp/env/jdbc
JMS java:comp/env/jms
URL java:comp/env/url
�R�l�N�^API java:comp/env/eis

InitialContext�̈����ɒ���JNDI���w�肹���A java:comp/env/�`�Ƀ}�b�s���O���邱�ƂŁA ���(�f�v���C����EJB���J��)���\�[�X���_��ɕύX�”\�B �Ȃ��Ajava:comp/env/�`��lookup�͓���J2EE�‹����炵���g���Ȃ��B �R���e�i�Ⴂ��R���e�i�Ȃ��̃N���C�A���g����� �����b�N�A�b�v���܂��B

�g�����U�N�V����

ACID����

�g�����U�N�V�������g�����U�N�V�������肤������B
���� ����
���q��(Atomicity) �@
��ѐ�(Consistency) �@
������(Isolation) �@
������(Durability) �@

�g�����U�N�V�����������x��

���񏈗��̖��
����
�_�[�e�B���[�h �X�V�r���R�~�b�g�O�̃f�[�^���ǂ܂��
(���̌ネ�[���o�b�N����āA���炨������)
�m�����s�[�^�u�����[�h
�t�@���g�����[�h �}���A�폜���ꂽ�f�[�^���ǂ܂��(�ǂ܂�Ȃ�)

�������x���̐ݒ�
�������x�� �_�[�e�B
���[�h
�m�����s�[�^�u��
���[�h
�t�@���g��
���[�h
����
TRANSACTION_NONE �~ �~ �~ �g�����U�N�V�������s��Ȃ�
TRANSACTION_READ_UNCOMMITED �~ �~ �~
TRANSACTION_READ_COMMITED �� �~ �~
TRANSACTION_REPEATABLE_READ �� �� �~
TRANSACTION_SERIALIZABLE �� �� ��

CMT��BMT

CMT���R���e�i�Ǘ��̃g�����U�N�V�����B �g�����U�N�V�����̋��E�ݒ�̕��@�́A DD�Ƀg�����U�N�V�����������L�q���邱�Ƃōs���B

BMT��Bean�Ǘ��̃g�����U�N�V�����B �g�����U�N�V�������T�|�[�g���Ȃ����\�[�X�ւ̃A�N�Z�X��A �X�e�[�g�t���Z�b�V����Bean�ŁA�g�����U�N�V�����I�ȏ����� �����������Ƃ��ɗ��p����BUserTransaction�C���^�[�t�F�C�X���g���B

�Ȃ��A�G���e�B�e�B�[Bean�͕K��CMT�炵���B

CMT�̃g�����U�N�V��������

���� ����
Required �Ȃ���΍��B���ʁB
RequiredNew �V���ɍ��B
Mandatory �Ȃ��ƃG���[�B
Supports ����Ύg���B
NotSupported �����Ă��g��Ȃ��B
Never ��������G���[�B

UserTransaction

�N���C�A���g����UserTransaction���g����

UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction");

ut.begin();

//...

ut.commit();

java:comp/UserTransaction�͌��܂蕶��H

SessionSynchronization

�Z�b�V����Bean��CMT������������@�� SessionSynchronization�C���^�[�t�F�C�X���g�����@������B
���\�b�h ����
void afterBegin()
void afterCompletion(boolean committed)
void beforeCompletion()

�ݒ�ł���g�����U�N�V����������Required�ARequiredNew�AMandatory�̂�

���U�g�����U�N�V����

�Z�L�����e�B

�p��

�p�� ����
�F��
����
�v�����V�p��(���)
Principal
�X�̃��[�U�[
�N���f���V����
������

�錾�I�Z�L�����e�B�ƃv���O�����ɂ��Z�L�����e�B

�Z�L�����e�B�[���[��

security-role security-role-ref

�Z�L�����e�BID�̓`�B

user-caller-identity run-as

�v���O�����ɂ��Z�L�����e�B�[

isCallerInRoll getCallerPrincipal

�T���v��

�׋����Ȃ��������T���v���ł��B ����A���Ȃ肢��������B
session.zip �V���v���Z�b�V����Bean
cmp11.zip �V���v��CMP1.1
bmp11.zip �V���v��BMP1.1
cmp20.zip �V���v��CMP2.0
cmr.zip �V���v��CMR
- �V���v��CMR ���d�x 1:*
mdbean.zip �V���v��JMS
resref.zip �V���v�����\�[�X�Q��
trans.zip �g�����U�N�V��������
- UserTransaction
sec.zip �V���v���Z�L�����e�B
sec2.zip �V���v���Z�L�����e�B2�A�V���v��EAR(clientjar+ejbjar)
helloear.zip 2002/12/1
�V���v��EAR(war+ejbjar)
�r���h���C�}�C�`
handle.zip 2002/11/26
�X�e�[�g�t���Z�b�V����Bean��Handle���g���Ă݂��B
��s�a��Bean�B�T�[�o�[���N���b�V������Ɨa�����ӂ��ƂԂ����ˁB

�Q�l