Webアプリケーション実行時にセッションファクトリーを取得してみよう!

はじめに

サーバー起動時に保存したセッションファクトリーを、Webアプリケーション実行時に、サーブレットコンテキストから変数として取得する方法についてご紹介したいと思います。

サーバー起動時にセッションファクトリーをサーブレットコンテキストに保存する方法については、前回のブログを参考にして下さいね!

開発環境

開発環境は下記の通りです。

ライブラリバージョン
Struts22.5.14.1
Hibernate4.3.0.Final
MySQL8.0.16

セッションファクトリーの取得

  1. ServletContextを取得します。

    Struts2では、ServletContextAwareをインプリメントすることでServletContextを取得することができます。

  2. 1.から属性(HibernateListener.KEY_NAME)を取得します。

    SevletContextからHibernateListener.KEY_NAME属性として保持していたSessionFactoryを取得します。

  3. 2.をSessionFactoryでキャストします。

    2.はObject型で返ってくるので、SessionFactoryでキャストしています。

実装例は下記の通りとなります。

package com.pom2019.Struts2Web.actions;

import com.opensymphony.xwork2.ActionSupport;
import com.pom2019.Struts2Web.entities.HouseholdAppliances;
import com.pom2019.Struts2Web.entities.dao.HouseholdAppliancesDao;
import com.pom2019.listener.HibernateListener;

import java.util.List;

import javax.servlet.ServletContext;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.conventiServletContextAwareon.annotation.Result;
import org.apache.struts2.util.ServletContextAware;
import org.hibernate.SessionFactory;

@Namespace("/")
@ParentPackage("struts-default")
public class Index extends ActionSupport implements ServletContextAware {
    private static final long serialVersionUID = -1884587001523422505L;
    ServletContext context;
    private List<HouseholdAppliances> list;

    @Action(value = "display", results = {
            @Result(name = "success", location = "/WEB-INF/content/displayList.jsp")
    })
    public String execute() {
        /** セッションファクトリーの取得箇所 **/
        SessionFactory sf = (SessionFactory) context.getAttribute(HibernateListener.KEY_NAME);

        HouseholdAppliancesDao hDao = new HouseholdAppliancesDao(sf);
        List<HouseholdAppliances> hList = hDao.findAll();
        setList(hList);

        return ActionSupport.SUCCESS;
    }

    public List<HouseholdAppliances> getList() {
        return list;
    }
    public void setList(List<HouseholdAppliances> list) {
        this.list = list;
    }

    public void setServletContext(ServletContext context) {
        this.context = context;
    }
}

まとめ

セッションファクトリーが1行(コメント箇所)で取得できました。

あとは、このセッションファクトリーを使って、データベース操作を行うことができます。

セッションファクトリーはDAO(データベース操作を行う処理をまとめたものをDAOと言います)内で使うので、ソースコードが大きくなる程、簡単に取得できる利便性を感じられると思います。

最後までお読み頂きありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です