Ltd. All rights reserved. 42 DataSource ds = … QueryRunner queryRunner = new QueryRunner(ds); List<User> result = queryRunner.query( "SELECT * FROM users;", new BeanListHandler<>(User.class)); RDBへの接続を作るファクトリ。 大抵の場合コネクションプール。 usersテーブルからデータを取得して、 各レコードをUser型に変換したリスト を作成する。
Ltd. All rights reserved. 90 fun tryBeforeAndEndpointHandlers() = tryWithExceptionMapper { (中略) matcher.findEntries(type, requestUri).firstOrNull()?.let { entry -> entry.handler.handle( ContextUtil.update(ctx, entry, requestUri)) return@tryWithExceptionMapper // return after first match } serviceメソッドから抜粋
Ltd. All rights reserved. 91 fun tryBeforeAndEndpointHandlers() = tryWithExceptionMapper { (中略) matcher.findEntries(type, requestUri).firstOrNull()?.let { entry -> entry.handler.handle( ContextUtil.update(ctx, entry, requestUri)) return@tryWithExceptionMapper // return after first match } PathMatcher handlerEntriesを保持
Ltd. All rights reserved. 92 fun tryBeforeAndEndpointHandlers() = tryWithExceptionMapper { (中略) matcher.findEntries(type, requestUri).firstOrNull()?.let { entry -> entry.handler.handle( ContextUtil.update(ctx, entry, requestUri)) return@tryWithExceptionMapper // return after first match } Type (HTTPメソッド) とURLにマッチ するHandlerEntryを探索 fun findEntries(handlerType: HandlerType, requestUri: String) = handlerEntries[handlerType]!!.filter { he -> match(he, requestUri) } 線形に探索している
Ltd. All rights reserved. 93 fun tryBeforeAndEndpointHandlers() = tryWithExceptionMapper { (中略) matcher.findEntries(type, requestUri).firstOrNull()?.let { entry -> entry.handler.handle( ContextUtil.update(ctx, entry, requestUri)) return@tryWithExceptionMapper // return after first match } Handlerの実行