key words: bea world2006 ,workshop studio, 快速开发
bea world 2006 北京已经过去好几天了,早就想记录一下一直忙 :)
这次参会之行还是有所收获,主题虽然是SOA,但是我对这个现在倒是没什么特别的关注,毕竟这个和公司选用的产品有关系,我们这边公司现在用的Oracle的比较多。
最吸引我的是它的一款开发工具 : workshop studio 3.2
这个工具基于Eclipse,同时集成了Spring,hibernate,Struts,JSF,Ajax,关键的是开发界面效果很棒,支持自动生成,运用Xray扫描技术,在页面可以做到自动提醒。
我个人一直使用IntelliJ IDEA 5,感觉IDEA的编写java代码确实很强,包括xp能力,但是看他的jsp编写能力实在是太弱了,虽然也支持语法级别的提示,但是这个是远远不够的,我们需要的是WYSIWYG,这方面workshop studio给了我一个满意的效果.
可以通过ResourceBundle切换界面语言

也可以在界面切换到中文:

可以在DbXplorer界面里根据schema自动生成hibernate的O/R mapping文件,包括Domain,也包括dao接口以及实现哦:

看一下向导生成的dao实现 :

public class UserRoleSpringService implements IUserRoleService
{

/** *//**
* The dao instance injected by Spring.
*/
private IUserRoleDao dao;

/** *//**
* The service Spring bean id, used in the applicationContext.xml file.
*/
private static final String SERVICE_BEAN_ID = "UserRoleService";

public UserRoleSpringService()
{
super();
}

/** *//**
* Returns the singleton <code>IUserRoleService</code> instance.
*/

public static IUserRoleService getInstance(ApplicationContext context)
{
return (IUserRoleService)context.getBean(SERVICE_BEAN_ID);
}


/** *//**
* Find an entity by its id (primary key).
* @return The found entity instance or null if the entity does not exist.
*/

public UserRole findUserRoleById(Integer id) throws MyException
{

try
{
return getDao().findUserRoleById(id);

} catch (RuntimeException e)
{
throw new MyException("findUserRoleById failed with the id " + id + ": " + e.getMessage());
}
}

/** *//**
* Return all persistent instances of the <code>UserRole</code> entity.
*/

public List findAllUserRoles() throws MyException
{

try
{
return getDao().findAllUserRoles();

} catch (RuntimeException e)
{
throw new MyException("findAllUserRoles failed: " + e.getMessage());
}
}

/** *//**
* Return the persistent entities matching the given example entity.
*/

public List findUserRolesByExample(UserRole userRole) throws MyException
{

try
{
return getDao().findByExample(userRole);

} catch (RuntimeException e)
{
throw new MyException("findUserRolesByExample failed: " + e.getMessage());
}
}

/** *//**
* Make the given instance managed and persistent.
*/

public void persistUserRole(UserRole userRole) throws MyException
{

try
{
getDao().persistUserRole(userRole);

} catch (RuntimeException e)
{
throw new MyException("persistUserRole failed: " + e.getMessage());
}
}

/** *//**
* Remove the given persistent instance.
*/

public void removeUserRole(UserRole userRole) throws MyException
{

try
{
getDao().removeUserRole(userRole);

} catch (RuntimeException e)
{
throw new MyException("removeUserRole failed: " + e.getMessage());
}
}


/** *//**
* Find an entity by its id (primary key).
* @return The found entity instance or null if the entity does not exist.
*/

public ZionRole findZionRoleById(Integer id) throws MyException
{

try
{
return getDao().findZionRoleById(id);

} catch (RuntimeException e)
{
throw new MyException("findZionRoleById failed with the id " + id + ": " + e.getMessage());
}
}

/** *//**
* Return all persistent instances of the <code>ZionRole</code> entity.
*/

public List findAllZionRoles() throws MyException
{

try
{
return getDao().findAllZionRoles();

} catch (RuntimeException e)
{
throw new MyException("findAllZionRoles failed: " + e.getMessage());
}
}

/** *//**
* Return the persistent entities matching the given example entity.
*/

public List findZionRolesByExample(ZionRole zionRole) throws MyException
{

try
{
return getDao().findByExample(zionRole);

} catch (RuntimeException e)
{
throw new MyException("findZionRolesByExample failed: " + e.getMessage());
}
}

/** *//**
* Make the given instance managed and persistent.
*/

public void persistZionRole(ZionRole zionRole) throws MyException
{

try
{
getDao().persistZionRole(zionRole);

} catch (RuntimeException e)
{
throw new MyException("persistZionRole failed: " + e.getMessage());
}
}

/** *//**
* Remove the given persistent instance.
*/

public void removeZionRole(ZionRole zionRole) throws MyException
{

try
{
getDao().removeZionRole(zionRole);

} catch (RuntimeException e)
{
throw new MyException("removeZionRole failed: " + e.getMessage());
}
}


/** *//**
* Find an entity by its id (primary key).
* @return The found entity instance or null if the entity does not exist.
*/

public ZionUser findZionUserById(Integer id) throws MyException
{

try
{
return getDao().findZionUserById(id);

} catch (RuntimeException e)
{
throw new MyException("findZionUserById failed with the id " + id + ": " + e.getMessage());
}
}

/** *//**
* Return all persistent instances of the <code>ZionUser</code> entity.
*/

public List findAllZionUsers() throws MyException
{

try
{
return getDao().findAllZionUsers();

} catch (RuntimeException e)
{
throw new MyException("findAllZionUsers failed: " + e.getMessage());
}
}

/** *//**
* Return the persistent entities matching the given example entity.
*/

public List findZionUsersByExample(ZionUser zionUser) throws MyException
{

try
{
return getDao().findByExample(zionUser);

} catch (RuntimeException e)
{
throw new MyException("findZionUsersByExample failed: " + e.getMessage());
}
}

/** *//**
* Make the given instance managed and persistent.
*/

public void persistZionUser(ZionUser zionUser) throws MyException
{

try
{
getDao().persistZionUser(zionUser);

} catch (RuntimeException e)
{
throw new MyException("persistZionUser failed: " + e.getMessage());
}
}

/** *//**
* Remove the given persistent instance.
*/

public void removeZionUser(ZionUser zionUser) throws MyException
{

try
{
getDao().removeZionUser(zionUser);

} catch (RuntimeException e)
{
throw new MyException("removeZionUser failed: " + e.getMessage());
}
}


/** *//**
* Called by Spring using the injection rules specified in
* the Spring beans file "applicationContext.xml".
*/

public void setDao(IUserRoleDao dao)
{
this.dao = dao;
}

public IUserRoleDao getDao()
{
return this.dao;
}
}我现在的策略基本上就是用IDEA开发后台代码,而pojo,dao,daoImpl的自动生成,以及web/jsp/ajax都是通过workshop studio来做,感觉不错哦,你还不心动? :)
详情请参看官方网站 :
http://workshopstudio.bea.com/index.html再来一张在现场Bea的工程师Peter的一张照片,左边的是me :)

Peter给我留下了深刻的印象,技术娴熟,为人热情,互动也棒,说到兴奋处来一个响指,让你感觉到作开发也是如此的享受,和国内的开发氛围截然不可同日而语。说到这就多罗嗦几句,国内的开发氛围我感觉就是半死不活,用如下几个关键字做一个概括就是 : 不敬业,冷漠,不专业,不规范,无体系,不受重视,自己看不起自己,别人也看不起自己,自己认为自己像个傻B,结果自己真的变为一个傻B.
记住,主动权永远在你自己手里,你想成为什么你就会变成什么.
当寒流到来时你是什么心态? 强者的逻辑是:来得更猛烈些,来年春天地上会堆满尸体.