環境:Eclipse3.1.2 + WTP1.0.2, JBoss-4.0.4-GA, MySQL5.0.22
下WTP花了我不少功夫(WTP依賴于emf-sdo-xsd, GEF以及JEM,偶逐個下了下來)
Download源代碼
如果項目是英文的還好,可是我找的這個例子全是德文(好像是。。),不過有圖有代碼基本上還是能看得懂。
這個項目沒有用ant, 終于有機會見到一個不用ant直接用Eclipse打包和發布ear的項目了。
第一步創建一個Dynamic Web Project, 名字為HelloWEB,并選擇將其放到HelloEAR中。接下來創建一個EJB Project,名為HelloEJB同樣加入到
HelloEAR中。
然后在HelloEJB中寫ejb的代碼以及persistence.xml, 在HelloWEB中寫jsp頁面以及web.xml, 這樣分工很明確,打起jar,war,ear包來也不
用自己操心。選擇好<SERVER_HOME>以后這些工作會自動進行。
???? < persistence-unit? name ="contactUnit" >
???? < jta-data-source > java:ContactDS </ jta-data-source >
???? < provider > org.hibernate.ejb.HibernatePersistence </ provider >
???? < properties >
???????? < property? name ="hibernate.hbm2ddl.auto" ?value ="update" ? />
???????? < property? name ="hibernate.dialect"
????????????value ="org.hibernate.dialect.MySQLInnoDBDialect" ? />
???? </ properties >
???? </ persistence-unit >
</ persistence >
這次用的是update,在我的MySQL中自動生成了數據庫,不錯~
命名及包結構有待參考
pj.ebj3.entity.Contact
pj.ejb3.session.ContactManager
pj.ejb3.session.bean.ContactManagerBean
pj.web.locator.EjbLocator
pj.web.servlet.XxxServlet
? private ? static ?Context?ctx;
? private ? static ?EjbLocator?instance? = ? new ?EjbLocator();
? private ?EjbLocator()?{
?? try ?{
???ctx? = ? new ?InitialContext();
??}? catch ?(NamingException?e)?{
??}
?}
? public ? static ?EjbLocator?getLocator()?{
?? return ?instance;
?}
? private ? < T > ?T?getEjb(Class < T > ?ejbClass,?String?name)?{
?? try ?{
???T?service? = ?(T)? new ?InitialContext().lookup( " HelloEAR/ " ? + ?name + ? " /local " );
??? return ?service;
??}? catch ?(NamingException?e)?{
??? return ? null ;
??}
?}
? public ?ContactManager?getContactManager()?{
?? return ?getEjb(ContactManager. class ,? " ContactManagerBean " );
?}
}
在Servlet中的調用如下:
???HttpServletResponse?response)? throws ?ServletException,?IOException?{
?? // ?get?parameters
??Contact?contact? = ? new ?Contact();
??contact.setAddress(request.getParameter( " contact.address " ));
// ?

??ContactManager?contactManager? = ?EjbLocator.getLocator()
????.getContactManager();
??Contact?newContact? = ?contactManager.addContact(contact);
??RequestDispatcher?rd? = ? null ;
?? if ?(newContact.getId()? > ? 0 )?{
???rd? = ?request.getRequestDispatcher( " /WEB-INF/jsps/contactAdded.jsp " );
??}? else ?{
???rd? = ?request.getRequestDispatcher( " /WEB-INF/jsps/contactNotAdded.jsp " );
??}
??rd.forward(request,?response);
?}
另外他把jsp都放在了/WEB-INF/jsps/下面,這個主意不錯,雖然以前也見過,不過還沒有用過。
最后的結論是還是Eclipse + JBoss IDE的組合好用,然后自己是不是要寫一個Struts + EJB3.0的 Demo出來玩玩。。
?
?