EAR ライブラリに jar が追加されない
いろいろと調べて、EJB とアプリの両方から参照する jar は EAR プロジェクトの EarContent/APP-INF/lib 内に置く、という記述を見つけてやってみたのだが、実際に jar を配置しても、該当する EJB プロジェクトや動的 Web プロジェクトの "EAR libraries" にその jar が見えてこない。つまり個々のプロジェクトから参照できていない。何故 ?
追記 : JBoss の場合はデフォルトは EarContent/lib であると教えていただきました。これで jar は見えたんだけど、やっぱりさっきと同じエラーが(´・ω・`)
ソース類を載せるので参考になれば。hibernate.cfg.xml はいらないという情報もあるのだけれど。
EJB プロジェクト側
/META-INF/persistence.xml (再掲)
<?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="customerManager"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>jp.mydns.akanekodou.entity.Customer</class> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/menudb" /> <property name="javax.persistence.jdbc.user" value="scott" /> <property name="javax.persistence.jdbc.password" value="tiger" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /> </properties> </persistence-unit> </persistence>
jp.mydns.akanekodou.entity.Customer
package jp.mydns.akanekodou.entity; import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Id; import javax.persistence.Column; import javax.persistence.GeneratedValue; @Entity @Table(name = "顧客マスタ") public class Customer { @Id @Column(name = "顧客ID") @GeneratedValue private int id; @Column(name = "顧客名") private String name; @Column(name = "連絡先") private String phone; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
jp.mydns.akanekodou.dao.CustomerDAO
package jp.mydns.akanekodou.dao; import javax.ejb.Local; import java.util.List; import jp.mydns.akanekodou.entity.Customer; @Local public interface CustomerDAO { List<Customer> all(); }
jp.mydns.akanekodou.dao.CustomerDAOBean
package jp.mydns.akanekodou.dao; import javax.ejb.Stateless; import javax.persistence.PersistenceContext; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.List; import jp.mydns.akanekodou.entity.Customer; @Stateless public class CustomerDAOBean implements CustomerDAO { @PersistenceContext(unitName = "customerManager") private EntityManager manager; public List<Customer> all() { Query query = manager.createQuery("from jp.mydns.akanekodou.entity.Customer"); @SuppressWarnings("unchecked") List<Customer> list = query.getResultList(); return list; } }
Web プロジェクト側
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/menudb</property> <property name="hibernate.connection.username">scott</property> <property name="hibernate.connection.password">tiger</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory> </hibernate-configuration>
jp.mydns.akanekodou.ListServlet
package jp.mydns.akanekodou; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.WebServlet; import javax.ejb.EJB; import java.util.List; import jp.mydns.akanekodou.dao.CustomerDAO; import jp.mydns.akanekodou.entity.Customer; @WebServlet("/list") public class ListServlet extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private CustomerDAO dao; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Customer> list = dao.all(); request.setAttribute("list", list); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/list.jsp"); rd.forward(request, response); } }