Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
* rdf4j-http-workbench모듈은 java servlet을 이용하여 구현했고, rdf4j-http-server는 spring기반으로 구현되어 있음
1. rdf4j-http-workbench : rdf4j-workbench.war를 이용하여 web에서 작업할때 사용되는 모듈(프로젝트)
가. /rdf4j-http-workbench/src/main/webapp/WEB-INF/web.xml에서 workbench의 RESTFul API와 매핑되는 class파일을 지정함
*rdf4j-workbench.war의 API에서 사용되는 URL매핑(web.xml파일)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | <? xml version = "1.0" encoding = "UTF-8" ?> < web-app > < display-name >RDF4J Workbench</ display-name > < description >RDF4J Workbench</ description > < filter > < filter-name >redirect</ filter-name > < filter-class > org.eclipse.rdf4j.workbench.proxy.RedirectFilter </ filter-class > < init-param > < param-name >/</ param-name > < param-value >/repositories</ param-value > </ init-param > </ filter > < filter > < filter-name >cache</ filter-name > < filter-class > org.eclipse.rdf4j.workbench.proxy.CookieCacheControlFilter </ filter-class > </ filter > < filter > < filter-name >CacheFilter</ filter-name > < filter-class >org.eclipse.rdf4j.workbench.proxy.CacheFilter</ filter-class > < init-param > < param-name >Cache-Control</ param-name > < param-value >600</ param-value > </ init-param > </ filter > < filter-mapping > < filter-name >redirect</ filter-name > < url-pattern >/</ url-pattern > </ filter-mapping > < filter-mapping > < filter-name >cache</ filter-name > < url-pattern >/repositories/*</ url-pattern > </ filter-mapping > < filter-mapping > < filter-name >CacheFilter</ filter-name > < url-pattern >*</ url-pattern > </ filter-mapping > < servlet > < servlet-name >workbench</ servlet-name > < servlet-class > org.eclipse.rdf4j.workbench.proxy.WorkbenchGateway </ servlet-class > < init-param > < param-name >transformations</ param-name > < param-value >/transformations</ param-value > </ init-param > < init-param > < param-name >default-server</ param-name > < param-value >/rdf4j-server</ param-value > </ init-param > < init-param > < param-name >accepted-server-prefixes</ param-name > < param-value >file: http: https:</ param-value > </ init-param > < init-param > < param-name >change-server-path</ param-name > < param-value >/NONE/server</ param-value > </ init-param > < init-param > < param-name >cookie-max-age</ param-name > < param-value >2592000</ param-value > </ init-param > < init-param > < param-name >no-repository-id</ param-name > < param-value >NONE</ param-value > </ init-param > < init-param > < param-name >default-path</ param-name > < param-value >/NONE/repositories</ param-value > </ init-param > < init-param > < param-name >default-command</ param-name > < param-value >/summary</ param-value > </ init-param > < init-param > < param-name >default-limit</ param-name > < param-value >100</ param-value > </ init-param > < init-param > < param-name >default-queryLn</ param-name > < param-value >SPARQL</ param-value > </ init-param > < init-param > < param-name >default-infer</ param-name > < param-value >true</ param-value > </ init-param > < init-param > < param-name >default-Accept</ param-name > < param-value >application/rdf+xml</ param-value > </ init-param > < init-param > < param-name >default-Content-Type</ param-name > < param-value >application/rdf+xml</ param-value > </ init-param > < init-param > < param-name >/summary</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.SummaryServlet </ param-value > </ init-param > < init-param > < param-name >/info</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.InfoServlet</ param-value > </ init-param > < init-param > < param-name >/information</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.InformationServlet </ param-value > </ init-param > < init-param > < param-name >/repositories</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.RepositoriesServlet </ param-value > </ init-param > < init-param > < param-name >/create</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.CreateServlet </ param-value > </ init-param > < init-param > < param-name >/delete</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.DeleteServlet </ param-value > </ init-param > < init-param > < param-name >/namespaces</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.NamespacesServlet </ param-value > </ init-param > < init-param > < param-name >/contexts</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.ContextsServlet </ param-value > </ init-param > < init-param > < param-name >/types</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.TypesServlet </ param-value > </ init-param > < init-param > < param-name >/explore</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.ExploreServlet </ param-value > </ init-param > < init-param > < param-name >/query</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.QueryServlet </ param-value > </ init-param > < init-param > < param-name >/saved-queries</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.SavedQueriesServlet </ param-value > </ init-param > < init-param > < param-name >/export</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.ExportServlet </ param-value > </ init-param > < init-param > < param-name >/add</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.AddServlet</ param-value > </ init-param > < init-param > < param-name >/remove</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.RemoveServlet </ param-value > </ init-param > < init-param > < param-name >/clear</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.ClearServlet </ param-value > </ init-param > < init-param > < param-name >/update</ param-name > < param-value >org.eclipse.rdf4j.workbench.commands.UpdateServlet </ param-value > </ init-param > </ servlet > < servlet-mapping > < servlet-name >workbench</ servlet-name > < url-pattern >/repositories/*</ url-pattern > </ servlet-mapping > </ web-app > |
나. rdf4j-http-workbench.war에서 사용하는 class파일(예,StatementsController.java)은 "/rdf4j-http-server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/statements/StatementsController.java"등에 위치함
2. rdf4j-http-server : rdf4j-server.war를 이용하여 RESTFul API를 호출할때 사용되는 모듈(프로젝트)
가. /rdf4j-http-server/src/main/webapp/WEB-INF/web.xml에서 아래와 같이 설정xml파일을 지정함
1 2 3 4 5 6 7 8 9 | < servlet > < servlet-name >rdf4j-http-server</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < init-param > < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/common-webapp-servlet.xml, /WEB-INF/common-webapp-system-servlet.xml, /WEB-INF/rdf4j-http-server-servlet.xml</ param-value > </ init-param > < load-on-startup >100</ load-on-startup > </ servlet > |
나. /rdf4j-http-server/src/main/webapp/WEB-INF/rdf4j-http-server-servlet.xml에서 API와 매핑되는 class파일을 지정함
*rdf4j-server.war의 repository관련 API에서 사용되는 URL매핑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < bean id = "rdf4jRepositoryUrlMapping" class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > < property name = "order" value = "2" /> < property name = "alwaysUseFullPath" value = "true" /> < property name = "mappings" > < props > < prop key = "/repositories/*/namespaces/*" >rdf4jRepositoryNamespaceController</ prop > < prop key = "/repositories/*/namespaces" >rdf4jRepositoryNamespacesController</ prop > < prop key = "/repositories/*/contexts" >rdf4jRepositoryContextsController</ prop > < prop key = "/repositories/*/statements" >rdf4jRepositoryStatementsController</ prop > < prop key = "/repositories/*/rdf-graphs" >rdf4jRepositoryContextsController</ prop > < prop key = "/repositories/*/rdf-graphs/*" >rdf4jRepositoryGraphController</ prop > < prop key = "/repositories/*/size" >rdf4jRepositorySizeController</ prop > < prop key = "/repositories/*/transactions" >rdf4jRepositoryTransactionStartController</ prop > < prop key = "/repositories/*/transactions/*" >rdf4jRepositoryTransactionController</ prop > < prop key = "/repositories/*" >rdf4jRepositoryController</ prop > </ props > </ property > < property name = "interceptors" > < list > < ref bean = "rdf4jRepositoryInterceptor" /> </ list > </ property > </ bean > |
*URL매핑에 해당되는 처리 class매핑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!-- CONTROLLERS --> < bean id = "rdf4jProtocolController" class = "org.eclipse.rdf4j.http.server.protocol.ProtocolController" /> < bean id = "rdf4jRepositoryListController" class = "org.eclipse.rdf4j.http.server.repository.RepositoryListController" > < property name = "repositoryManager" ref = "rdf4jRepositoryManager" /> </ bean > < bean id = "rdf4jRepositoryController" class = "org.eclipse.rdf4j.http.server.repository.RepositoryController" > < property name = "repositoryManager" ref = "rdf4jRepositoryManager" /> </ bean > < bean id = "rdf4jRepositoryContextsController" class = "org.eclipse.rdf4j.http.server.repository.contexts.ContextsController" /> < bean id = "rdf4jRepositoryNamespacesController" class = "org.eclipse.rdf4j.http.server.repository.namespaces.NamespacesController" /> < bean id = "rdf4jRepositoryNamespaceController" class = "org.eclipse.rdf4j.http.server.repository.namespaces.NamespaceController" /> < bean id = "rdf4jRepositorySizeController" class = "org.eclipse.rdf4j.http.server.repository.size.SizeController" /> < bean id = "rdf4jRepositoryStatementsController" class = "org.eclipse.rdf4j.http.server.repository.statements.StatementsController" /> < bean id = "rdf4jRepositoryGraphController" class = "org.eclipse.rdf4j.http.server.repository.graph.GraphController" /> < bean id = "rdf4jRepositoryTransactionController" class = "org.eclipse.rdf4j.http.server.repository.transaction.TransactionController" /> < bean id = "rdf4jRepositoryTransactionStartController" class = "org.eclipse.rdf4j.http.server.repository.transaction.TransactionStartController" /> |
다 rdf4j-server.war가 사용하는 class파일은(예, StatementsController.java) "/rdf4j-http-server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/statements/StatementsController.java"에 위치함
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
10 | halyard 1.3의 console을 이용하여 100억건의 데이타에 대한 쿼리수행시 ScannerTimeoutException 발생시 조치사항 | 2017.09.06 | 3651 |
» | RDF4J의 RESTFul API처리 클래스 소스 파악(web module위주) | 2017.08.30 | 3262 |
8 | RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용한 CRUD테스트(트랜잭션처리) | 2017.08.30 | 3998 |
7 | RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용하여 repository에 CRUD테스트 | 2017.08.30 | 3597 |
6 | 9대가 hbase cluster로 구성된 서버에서 테스트 data를 halyard에 적재하고 테스트 하는 방법및 절차 | 2017.07.21 | 4736 |
5 | halyard의 console스크립트에서 생성한 repository는 RDF4J Web Applications에서 공유가 되지 않는다. | 2017.07.05 | 4894 |
4 | halyard 1.3의 rdf4j-server.war와 rdf4j-workbench.war를 tomcat deploy후 조회시 java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/Cell발생시 조치사항 | 2017.07.05 | 2751 |
3 | halyard 1.3을 다른 서버로 이전하는 방법 | 2017.07.05 | 3511 |
2 | https://github.com/Merck/Halyard프로젝트 컴파일및 배포/테스트 | 2017.01.24 | 2463 |
1 | Halyard - RDF4J와 Apache HBase를 이용하여 구현된 TripleStore이며 SPARQL 1.1쿼리를 지원한다. | 2016.12.29 | 3596 |