Play2�i�{JavaScript�j�A�v�����������A�œK������4�‚̃e�N�j�b�N�FScala�{Play 2.0��Web�A�v���J������i10�j�i1/2 �y�[�W�j

2.0����Scala�ɑΉ�����Web�A�v���J���̐l�C�y�ʃt���[�����[�N�uPlay�v�ɂ‚��ĉ�����AWeb�A�v���̍������Љ�����A�ځB����́AEHCache���g���L���b�V���@�\�A�񓯊�HTTP�ʐM�AGoogle Closure Compiler���g��JavaScript�̍œK���ARequireJS���g��JavaScript�ˑ��֌W�̉������@�ɂ‚��ĉ�����܂��B

» 2013�N11��26�� 18��00�� ���J
[�����C���C�N���X���\�b�h�������]

�@�O��̋L���uPlay2�ɂ�����JSON�����CoffeeScript�̎g�����v�ł́APlay2��JSON��CoffeeScript���g�p������@���Љ�܂����B

�@������APlay2�ł悭�g�p�����ł��낤�A�ȉ��̂��܂��܂ȋ@�\���Љ�܂��B

�uEHCache�v���g���L���b�V���@�\

�@�A�ڑ�5��́uPlay 2.1�ɃA�b�v�O���[�h���ăR���g���[�����g�����Ȃ��v�ł́APlay2�Ŏg�p����u�Z�b�V�����v�u�t���b�V���X�R�[�v�v�Ƃ����A�f�[�^�������ԕێ����邽�߂̋@�\�ɂ‚��Đ������܂����B

Play2�̃L���b�V���@�\�̐���

�@�����ł��q�ׂĂ��܂����APlay2�̃L���b�V���@�\�ɂ́A�ȉ��̂悤�Ȑ���������܂��B

  • �Z�b�V�����^�t���b�V���̃f�[�^�̕ۑ��ꏊ�̓T�[�o�ł͂Ȃ��A�N�b�L�[�𗘗p���ăN���C�A���g���ɕێ�
  • �f�[�^��ێ��ł���T�C�Y��4Kbytes�܂łŁA������^�����ۑ��ł��Ȃ�

Play2��Cache API�ƁuEHCache�v

�@Java EE�iJ2EE�j�ł����uHTTP�Z�b�V�����v�̂悤�ȋ@�\�́APlay��Cache API���g�p���邱�ƂŎ����ł���Ƃ����܂����B�����ŁA����Cache API�ɂ‚��Đ������܂��傤�B

�@�Ȃ��APlay2�ɂ�����Cache API�̃f�t�H���g�����́uEHCache�v�ł��B����ȊO�̎������v���O�C���ŗ��p�”\�ł��B

EHCache

�L���b�V���@�\�̊�{�I�Ȏg����

�@�L���b�V���@�\���g�p����ɂ́Aplay.api.Application�I�u�W�F�N�g���K�v�ł��B���̂��߁Aplay.api.Play.current��import���Ă����K�v������܂��B�L���b�V���ւ̕ۑ��^���o���́A���L�̂悤�ɊȒP�ɍs���܂��B

import play.api.Play.current
import play.api.cache.Cache
class Point(x:Int,y:Int)
�E
�E
�E
Cache.set("point1", Point(3,6),<�L�������̕b��>)
val opt: Option[Point] = Cache.getAs[Point]("point1")

�@cache���Z�b�V�����Ɠ������A�P����key/value�̃X�g�A�ł����A������ȊO�ɂ��I�u�W�F�N�g�Ȃǂ̂��܂��܂ȃf�[�^��ۑ��ł��܂��B

�@�܂��Aset�֐��̑�3�����ɐ��l���w�肷�邱�ƂŁACache�̗L��������ݒ�ł��܂��i���L�������̕b���̓I�v�V�����j�B

�@����ɁAgetOrElse�֐���Cache����l�����o�����Ƃ��ł��܂��B���̊֐����g�p����ƁA�l�����‚���Ȃ��ꍇ�ɂ͑�2�����̒l���v�Z���A������L���b�V���Ɋi�[������ŕԂ��܂��B

val p:Point = Cache.getOrElse("point1",<�L�������̕b��>) {
  //�L���b�V�������‚���Ȃ��ꍇ�͂��̒l��ۑ����ĕԂ�
  new Point(0,0) 
}

�ڍׂ͌����h�L�������g��

�@�Ȃ��L���b�V���ɂ‚��ẮA�����T�C�g�̉�����Q�l�ɂ��Ă��������B

�񓯊�HTTP�ʐM���ł���Future�I�u�W�F�N�g

�@Play�A�v���ɂ����āAAction�Ăяo���͂ł�����葬���������ă��X�|���X���N���C�A���g�ɕԂ��Ȃ���΂����܂���B�������A�����ɂ���Ă͔��ɏd���v�Z���s������A���X�|���X���\���ł��Ȃ��O��Web�T�[�r�X�Ɉˑ������肷�邱�Ƃ�����ł��傤�B

�@�����������A���X�|���X���܂������ł��Ȃ��ꍇ�́AFuture�I�u�W�F�N�g���g�p���܂��B���X�|���X�Ƃ��āuFuture[Result]�v��Ԃ����ƂŁA�ŏI�I��Result�^�̒l��ۏ؂ł��܂��B

�@�ʏ��Result�̑����Future[Result]��Ԃ��΁A�������u���b�N�����ɑ����Ɍ��ʂ�Ԃ��A�ʂ̏��������s���邱�Ƃ��”\�ł��B�A�v����Future��Ԃ���������Ŋ��������Ƃ��A����ꂽ���ʁiResult�j���N���C�A���g�֑��M���܂��B

Future[Result]�𐶐����邽�߂�

�@Future[Result]�𐶐�����ɂ́A���ƂȂ�Future����ɕK�v�ł��B����Future���擾�����^�C�~���O�ŁAFuture[Result]���擾���A�N���C�A���g�Ɍ��ʂ�Ԃ��܂��B

//�񓯊��v�Z���������s
val futureSrcValue: Future[Int] = calcAsync() 
//futureSrcValue�����ۂ̒l���擾�ł���悤�ɂȂ�����A���X�|���X�𐶐��@
val futureResult: Future[Result] = futureSrcValue.map { num =>
  Ok("Number : " + num)    
}

�@��L�̗�ł�calcAsync�֐���Future�I�u�W�F�N�g���擾���܂��B���̎��ۂ̒l���擾�”\�ɂȂ�����A�uOk�v���N���C�A���g�ɕԂ��Ă��܂��B

�@��q����WS API��AAkka API���g�����񓯊������A�A�N�^�[�ƒʐM����ꍇ�Ȃǂ́A�S��Future���擾���Ĕ񓯊��������s���܂��B

�@�Ȃ��A�R�[�h�u���b�N��񓯊��Ŏ��s����Future���擾����ȒP�ȕ��@�͉��L�̂悤�ɂȂ�܂��B

val futureInt: Future[Int] = scala.concurrent.Future {
  intensiveComputation()
}

AsyncResult�̎g�p

�@�񓯊��������A�N�V�����Ŏ��s����ɓ������āA����1�•K�v�Ȃ��Ƃ�����܂��B���܂܂ŃA�N�V�����̖߂�l�ɂ́ASimpleResult���g�p���Ă��܂������A�񓯊����ʂ�Ԃ����߂ɂ́ASimpleResult�����b�v����AsyncResult���g���܂��B

def sample = Action {
  val future = scala.concurrent.Future { caclSomething() }
  
  //Async�u���b�N��Future[Result]����AsyncResult���쐬���郁�\�b�h
  Async {
    future.map(i => Ok("result: " + i))
  }
}

�@��L�̂悤��Async�u���b�N���g�p����ƁA�ŏI�I��Action��AsyncResult���󂯎��悤�ɂȂ�܂��B

�񓯊������̃T���v���쐬

�@ws���C�u�������g�p���ĊO���T�[�r�X���Ăяo���āAFuture�̓�����m�F���Ă݂܂��傤�B

�@Future���g�p�����񓯊������̃T���v�����쐬���Ă݂܂��B�܂��́Aconf/routes�t�@�C���ɐV�����R���g���[����o�^���܂��B

GET     /asyncSample      controllers.AsyncController.index()

�@���ɁAaction�N���X���쐬���܂��Baction�ł́Aplay.api.libs.ws.WS�I�u�W�F�N�g���g�p���āA�O���T�C�g�iJSON���X�|���X��Ԃ��T�C�g�j�ɐڑ����Ă��܂��B

�@WS�ɂ��HTTP�ʐM�́AFuture[play.api.libs.ws.Response]��Ԃ����߁A�񓯊������ƂȂ�܂��B

package controllers
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import play.api.libs.ws
import play.api.libs.ws.WS
import play.api.mvc.Action
import play.api.mvc.Controller
object AsyncController extends Controller {
  def index = Action {
    Async {
      //�O���T�[�r�X���烌�X�|���X�f�[�^���擾
      val jsonFeed: Future[ws.Response] 
        = WS.url("http://isaacs.couchone.com/registry/_all_docs").get()
      //�O���T�[�r�X�̏��������Ă���ԁA���̏������s��
      calc
      jsonFeed map { response => Ok(response.body) }
    }
  }
  private def calc() {
    for (i <- 1 to 5) {
      println("calc:" + i)
      Thread.sleep(1000)
    }
  }
}

�@�O���T�[�o�փA�N�Z�X���Ă��錄�ɁAcalc�֐����Ăяo���ĕʏ����i1�b���ƂɃR���\�[���\���j���s���Ă��܂��B�O���A�N�Z�X���񓯊��ōs���Ă���Ԃɏ������Ă���̂ŁA���ʂ�҂‚��ƂȂ�calc�֐������s���āA���ʎ擾��A�N���C�A���g�Ƀ��X�|���X��Ԃ����Ƃ��ł��܂��B

�ڍׂ͌����h�L�������g��

�@Web�A�v���ł������̕��񉻂�������O�ɂȂ��Ă��Ă�������A�T�[�o�̏������u���b�N���Ȃ��񓯊������̎��s�͏d�v�Ȏ�@�ɂȂ��Ă��܂��B�����ɂ���A�ȉ��̃h�L�������g���Q�l�ɂ��Ă݂Ă��������B

�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; if( !this.isSubscription ) { this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); } }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

4AI by IT - AIAAA
Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B