Posted on 2006-07-20 07:06
Earth 閱讀(527)
評論(0) 編輯 收藏 所屬分類:
JavaEE5/EJB3
環境: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
>
????
<
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
public
?
class
?EjbLocator?{
?
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中的調用如下:
protected
?
void
?doPost(HttpServletRequest?request,
???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出來玩玩。。
?
?