Posted on 2006-07-20 07:06
Earth 阅读(515)
评论(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出来玩玩。。