ITエンジニアぽむの備忘録

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

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

まえがき

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

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

pom2019.hatenablog.com

開発環境

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

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

  1. ServletContextを取得します。

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

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

    SevletContextにHibernateListener.KEY_NAMEを属性として保持していたので、HibernateListener.KEY_NAMEを属性として取得してあげます。

  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内で使うので、ソースコードが大きくなる程、簡単に取得できる利便性を感じられると思います。

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