ITエンジニアぽむのブログ

IT系で気になったことを書き留めておく備忘録です。仕事でよく使っているJavaと自宅で使っているLinuxについて書いていこうと思っています。同じお悩みをお持ちの方のお役に立てたら嬉しいです。

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

まえがき

サーバ起動時に保存したセッションファクトリーをWebアプリ起動時の変数として取得する方法についてご紹介したいと思います。

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

pom2019.hatenablog.com

開発環境

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

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

  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行(25行目)で取得できました。

セッションファクトリーはDao内で使うので、ソースコードが大きくなる程、簡単に取得できる利便性を感じられると思います。

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