アプリケーションの作成 1
サーバーサイドの作成
JSONICには、SeasarやSpringと連携する機能があります。そこで今回は、Seasar、JSONICとTomcatを使用してサーバーサイドを作成します。
まず、JSONICからコールされるServiceやDaoを作成します。インターフェースやDaoについては省略しますが、Serviceの実装クラスのコードは次のようになります。
package sample.service.impl;
...中略...
public class EmpServiceImpl implements EmpService {
public List<Emp> find(EmpQuery query) {
return empDao.getDatas(query);
}
public void create(Emp emp) {
empDao.insert(emp);
}
public void update(Emp emp) {
empDao.update(emp);
}
public void delete(Emp emp) {
empDao.delete(emp);
}
...中略...
}
上記のコードは複雑なロジックを記述していないので、Webアプリケーションを作成した事のあるJava技術者であれば理解できると思います。
作成したServiceや、Daoをdiconファイルに記述します(注:今回は、理解しやすさを優先して、app.diconに直接記述しています)。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="aop.dicon"/> <include path="dao.dicon"/> <component class="sample.service.impl.EmpServiceImpl" > <aspect>aop.traceThrowsInterceptor</aspect> <aspect>aop.traceInterceptor</aspect> <aspect>j2ee.requiredTx</aspect> </component> <component class="sample.dao.EmpDao" > <aspect>dao.interceptor</aspect> </component> </components>
そして、JSONICとSeasarを連携させるためには、web.xmlを次のように記述します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<filter>
<filter-name>s2filter</filter-name>
<filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>s2filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>s2servlet</servlet-name>
<servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<description>JSON-WebService</description>
<servlet-name>json-ws</servlet-name>
<servlet-class>net.arnx.jsonic.web.WebServiceServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
container: 'net.arnx.jsonic.web.S2Container'
debug: true
mappings: {
'/[package]/[class]/[id].[ext]': 'sample.web.${package}.service.${class}Service'
'/[package]/[class].[ext]': 'sample.web.${package}.service.${class}Service'
'/[class].[ext]': 'sample.service.${class}Service'
}
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>s2servlet</servlet-name>
<url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>json-ws</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
</web-app>
JSON-WebServiceのinit-paramに注目してください。containerに、'net.arnx.jsonic.web.S2Container'と記述することで、Seasarとの連携が可能になります('net.arnx.jsonic.web.SpringContainer'と記述すればSpringと連携できます)。また、mappingsには、URLとDIコンテナに登録されたコンポーネントのマッピングを記述します。この記述の場合、例えば、/emp.jsonというURLでアクセスした場合、sample.service.EmpServiceがコールされます。
RESTスタイルの場合、コールされるメソッドは、次のようにHTTPのメソッドによって決定されます。
- GET
findメソッドが呼び出される。引数はURLのクエリ文字列で指定
- POST
createメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
- PUT
updateメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
- DELETE
deleteメソッドが呼び出される。メソッドの引数はリクエストボディにJSONとして指定
動作確認をするには、Tomcatを起動し、ブラウザに次のURLを入力しアクセスします(注:URLはTomcatの設定により変わります)。
- http://localhost:8080/curl_server/emp.json
すると、次のようなリクエストが返ってきます。
[
{
"deptno": 20,
"empno": 7369,
"ename": "SMITH",
"hiredate": 345826800000,
"job": "CLERK",
"mgr": 7902,
"sal": 800.0
},
{
"deptno": 30,
"empno": 7499,
"ename": "ALLEN",
"hiredate": 351442800000,
"job": "SALESMAN",
"mgr": 7698,
"sal": 1600.0
},
...中略...
]
Service、Daoを作成して、それをSeasarに登録し、web.xmlを記述するだけで、サーバーサイドの準備は完了です。

