まえがき
サーバ起動時に保存したセッションファクトリーをWebアプリ起動時の変数として取得する方法についてご紹介したいと思います。
サーバ起動時にセッションファクトリーを取得/保存する方法については、前回のブログを参考にして下さいね!
開発環境
開発環境は下記の通りです。
セッションファクトリーの取得
ServletContextを取得します。
Struts2では、ServletContextAwareをインプリメントすることでServletContextを取得することができます。
1.から属性(HibernateListener.KEY_NAME)を取得します。
SevletContextからHibernateListener.KEY_NAME属性として保持していたSessionFactoryを取得します。
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内で使うので、ソースコードが大きくなる程、簡単に取得できる利便性を感じられると思います。
最後までお読み頂きありがとうございました。