- 浏览: 298557 次
- 性别:
- 来自: 东京
文章分类
最新评论
-
80后的童年2:
企业级分布式搜索平台Solr视频教程网盘地址:https:// ...
企业级搜索引擎Solr使用入门指南 -
springdata_spring:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene / Solr 开发经验 -
springdata-jpa:
java web开发分页demo源代码下载:http://ww ...
简易java分页标签 -
zjf_sdnu:
兄弟,script写错了
jqGrid初学备注 -
85600367:
你好,请教一个问题。当进行分布式查询时solr无法查询到Luc ...
Lucene / Solr 开发经验
简单的说,完全不知道Liferay下应该如何做开发。所以完全凭借SSH的背景知识,自己写了个独立的山寨版web应用弄进去,好在是跑起来了。如果哪位达人对Liferay下的开发比较熟悉,还望指点一下。
插件开发准备步骤,见以前的文章,现在直接上代码。
一个简单的Portlet:
package com.hrms.recruiting.portlet; import java.io.IOException; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.GenericPortlet; import javax.portlet.PortletException; import javax.portlet.PortletRequestDispatcher; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hrms.recruiting.common.BeanManager; import com.hrms.recruiting.entity.Candidate; /** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class BasePortlet extends GenericPortlet { private static final Log log = LogFactory.getLog(BasePortlet.class); protected String editJSP; protected String helpJSP; protected String viewJSP; public void init() throws PortletException { editJSP = getInitParameter("edit-jsp"); helpJSP = getInitParameter("help-jsp"); viewJSP = getInitParameter("view-jsp"); } public void doDispatch(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { Candidate candidate = new Candidate(); candidate.setName("clay"); candidate.setEmail("clay@test.com"); BeanManager.getServiceManager().getCandidateService().create(candidate); String jspPage = renderRequest.getParameter("jspPage"); if (jspPage != null) { include(jspPage, renderRequest, renderResponse); } else { super.doDispatch(renderRequest, renderResponse); } } public void doEdit(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { System.out.println("into do edit"); if (renderRequest.getPreferences() == null) { super.doEdit(renderRequest, renderResponse); } else { include(editJSP, renderRequest, renderResponse); } } public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { System.out.println("into do view"); include(viewJSP, renderRequest, renderResponse); } public void doHelp(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { System.out.println("into do help"); include(helpJSP, renderRequest, renderResponse); } public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { System.out.println("into process action"); } protected void include(String path, RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher(path); if (portletRequestDispatcher == null) { log.error(path + " is not a valid include"); } else { portletRequestDispatcher.include(renderRequest, renderResponse); } } }
Spring用了一个工厂类,这个做法很ugly,因为现在还不知道把portlet交给spring托管然后注入service会有什么后果,暂且如此吧
/** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class ServiceManager { private CandidateService candidateService; public CandidateService getCandidateService() { return candidateService; } public void setCandidateService(CandidateService candidateService) { this.candidateService = candidateService; } }
package com.hrms.recruiting.service.impl; import java.util.List; import com.hrms.recruiting.dao.CandidateDao; import com.hrms.recruiting.entity.Candidate; import com.hrms.recruiting.service.CandidateService; /** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class CandidateServiceImpl implements CandidateService { private CandidateDao candidateDao; public void create(Candidate candidate) { candidateDao.save(candidate); } public List<Candidate> list() { return candidateDao.list(); } public CandidateDao getCandidateDao() { return candidateDao; } public void setCandidateDao(CandidateDao candidateDao) { this.candidateDao = candidateDao; } }
通过读取context获取工厂类实例:
package com.hrms.recruiting.common; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.hrms.recruiting.service.ServiceManager; /** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class BeanManager { static String configFile = "../context/*.xml"; private static BeanFactory beanFactory = new ClassPathXmlApplicationContext(configFile); public static Object getBean(String tag) { return beanFactory.getBean(tag); } public static ServiceManager getServiceManager() { return (ServiceManager) beanFactory.getBean("serviceManager"); } }
紧接着当然是DAO和POJO:
package com.hrms.recruiting.dao; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.hrms.recruiting.entity.Candidate; /** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class CandidateDao extends HibernateDaoSupport { public void save(Candidate candidate) { getHibernateTemplate().save(candidate); } @SuppressWarnings("unchecked") public List<Candidate> list() { return getHibernateTemplate().loadAll(Candidate.class); } }
package com.hrms.recruiting.entity; /** * @author Clay Zhong, zjclay@gmail.com * * @date May 24, 2009 */ public class Candidate { private Integer id; private String name; private String email; private String resume; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getResume() { return resume; } public void setResume(String resume) { this.resume = resume; } }
然后当然是配置Spring和Hibernate,这个不用多说了
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> WEB-INF/context/applicationContext.xml, WEB-INF/context/applicationContext-dao.xml, WEB-INF/context/applicationContext-service.xml </param-value> </context-param> </web-app>
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/hrms?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="password" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> <value>com/hrms/recruiting/entity/Candidate.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.jdbc.batch_size">20</prop> </props> </property> </bean> </beans>
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="candidateService" class="com.hrms.recruiting.service.impl.CandidateServiceImpl"> <property name="candidateDao" ref="candidateDao" /> </bean> <bean id="serviceManager" class="com.hrms.recruiting.service.ServiceManager"> <property name="candidateService" ref="candidateService" /> </bean> </beans>
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="daoTemplate" abstract="true"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="candidateDao" class="com.hrms.recruiting.dao.CandidateDao" parent="daoTemplate" /> </beans>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hrms.recruiting.entity.Candidate" table="candidate" catalog="hrms"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="45" not-null="true" /> </property> <property name="email" type="java.lang.String"> <column name="EMAIL" length="256" not-null="true" /> </property> </class> </hibernate-mapping>
定义一个默认的显示页面:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <portlet:defineObjects /> This is the <b>Sample JSP Portlet</b>. Use this as a quick way to include JSPs.
最后就是配置Portlet了
<?xml version="1.0"?> <!DOCTYPE display PUBLIC "-//Liferay//DTD Display 5.2.0//EN" "http://www.liferay.com/dtd/liferay-display_5_2_0.dtd"> <display> <category name="HRMS"> <portlet id="recruiting-portlet" /> </category> </display>
<?xml version="1.0"?> <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 5.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_5_2_0.dtd"> <liferay-portlet-app> <portlet> <portlet-name>recruiting-portlet</portlet-name> <icon>/icon.png</icon> <instanceable>true</instanceable> <header-portlet-css>/css/test.css</header-portlet-css> <footer-portlet-javascript>/js/test.js</footer-portlet-javascript> </portlet> <role-mapper> <role-name>administrator</role-name> <role-link>Administrator</role-link> </role-mapper> <role-mapper> <role-name>guest</role-name> <role-link>Guest</role-link> </role-mapper> <role-mapper> <role-name>power-user</role-name> <role-link>Power User</role-link> </role-mapper> <role-mapper> <role-name>user</role-name> <role-link>User</role-link> </role-mapper> </liferay-portlet-app>
<?xml version="1.0"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"> <portlet> <portlet-name>recruiting-portlet</portlet-name> <display-name>Human Resource Recruiting</display-name> <portlet-class>com.hrms.recruiting.portlet.BasePortlet</portlet-class> <init-param> <name>view-jsp</name> <value>/view.jsp</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> </supports> <portlet-info> <title>Human Resource Recruiting</title> <short-title>Recruiting</short-title> <keywords>Human Recruiting</keywords> </portlet-info> <security-role-ref> <role-name>administrator</role-name> </security-role-ref> <security-role-ref> <role-name>guest</role-name> </security-role-ref> <security-role-ref> <role-name>power-user</role-name> </security-role-ref> <security-role-ref> <role-name>user</role-name> </security-role-ref> </portlet> </portlet-app>
差不多就是这样了,运行Plugin项目下的build,就可以将此发布到Liferay下。因为直接用的Liferay下的Spring和Hibernate包,所以备注一下其他需要引用的jar:
commons-collections.jar
commons-logging.jar
dom4j.jar
javassist.jar
jta.jar
log4j.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api.jar
slf4j-log4j12.jar
util-bridges.jar
util-java.jar
util-taglib.jar
评论
1 楼
ww_java
2010-07-10
个人的观点:这样做很不好,没实际意义
如果不用获取liferay本身的sessionfactory那么,那系统不就是>1个数据源?,如何有效管理,
如果在扩展一个,那不还要++,就算所有的portlet都写到这里面,那就把SDK方式的能力压制的很低.
推荐你看看官方例子,操作SSH,全部使用他自身的.什么都是一样的
如果不用获取liferay本身的sessionfactory那么,那系统不就是>1个数据源?,如何有效管理,
如果在扩展一个,那不还要++,就算所有的portlet都写到这里面,那就把SDK方式的能力压制的很低.
推荐你看看官方例子,操作SSH,全部使用他自身的.什么都是一样的
发表评论
-
Struts2 Jsonplugin 详解
2009-07-08 21:41 7107本文转自: http://www.blogjava.net/f ... -
一点struts json备注
2009-07-05 00:30 1539下载struts json插件:jsonplugin-0.33 ... -
Hibernate annotation简单配置
2009-06-29 00:04 1683<?xml version="1.0" ... -
Liferay plugin开发入门
2009-05-19 00:10 2736本篇部分引用以下文章: http://daoger.itey ... -
Hibernate通用DAO
2009-01-02 17:46 3630/** * @author Clay Zhong, zjcl ... -
Acegi获取用户信息
2008-12-04 23:38 2865import org.acegisecurity.Authen ... -
Acegi详解
2008-11-16 21:15 1791本文转自:http://www.yuanma.org/data ... -
velocity.properties source code
2008-11-04 22:37 3011# Licensed to the Apache Softwa ... -
DetachedCriteria,Hibernate模糊查询
2008-09-21 10:59 42051,假设存在Thesis对象: package org.cms ... -
lucene常用搜索排序摘录
2008-09-16 23:38 3166一,查询 一个关键字,对一个字段进行查询 Query ... -
Solr中SimplePostTool的修改
2008-09-15 22:38 3004将源代码修改为传递字符串,去掉files以及stdin模式。 ... -
Struts2,Spring2,Hibernate3整合
2008-09-15 11:44 33981. web.xml <?xml version=&qu ... -
企业级搜索引擎Solr使用入门指南
2008-09-10 22:43 16696本文转自 http://chuanliang2 ... -
Lucene / Solr 开发经验
2008-09-10 22:12 20064转自 Lucene/Solr开发经验[原] 作者 张驰有道 ... -
Lucene初学备注
2008-09-07 19:51 12721,检索文件目录,创建index import java.io ... -
JR各Ajax框架基础教程收集
2008-08-24 12:19 1226JQuery: http://www.javaresearch ... -
Spring 2.0 中配置 JPA
2008-04-20 16:57 3916翻译:SpringSide团队 转载请注明出处。 本文提供了 ... -
Hibernate延迟加载
2008-02-09 16:22 2740延迟初始化错误是运用Hibernate开发项目时最常见的错误。 ... -
Properties资源文件编码
2008-01-26 17:26 15251、展开Eclipse的Help菜单,将鼠标移到Softwar ... -
struts+hibernate分页
2007-12-17 20:53 1748新建表 sql 代码 DROP DATABAS ...
相关推荐
总的来说,Liferay基于Struts2+Hibernate+Spring的架构为开发者提供了一个强大且灵活的开发环境,允许创建功能丰富的portlet和门户应用,同时通过Spring的整合能力,使得各组件协同工作,提升了整体的开发效率和应用...
"liferay + struts2 + spring + ibatis"的整合开发案例就是一个典型示例,它展示了如何将这四个强大的技术结合在一起,构建出一个功能丰富的Web应用程序。下面我们将详细探讨这些技术以及它们在整合中的作用。 **...
本项目结合了"Maven"、"Liferay"、"Spring"和"Hibernate"这四大核心组件,旨在搭建一个高效、稳定且可扩展的Web应用程序。接下来,我们将详细探讨这些技术以及它们在项目中的作用。 **Maven** 是一个项目管理和综合...
liferay集成struts2 spring hibernate的完整示例,下载后将项目放入lifeRay的SDK下的portalet 目录,然后在本地数据库中创建BOOK表(bookId、bookName、BookType),修改portal.properties中JDBC连接属性,在Eclipse...
通过这个实例,开发者可以深入理解Liferay与Struts的集成方式,以及如何在实际项目中应用这种整合,提高开发效率和系统稳定性。对于初学者,这是一个很好的起点,可以从中学习到portlet开发、MVC设计模式以及企业级...
《Liferay6开发书籍》是一套全面...无论你是初学者还是有经验的开发者,都可以从中受益,提升自己在Liferay平台上的设计和开发技能。通过学习这些内容,你将能够构建出满足企业需求、高效且用户体验优良的Liferay应用。
Liferay 6还支持Spring框架,"plugins开发指南17-liferay中spring开发(1).pdf"和"plugins开发指南18-liferay中spring开发(2).pdf"两部分深入探讨了如何在Liferay环境中利用Spring进行服务和组件的管理。...
通过深入学习和理解这个项目,开发者可以掌握如何在Liferay中创建和部署Spring Portlet,了解portlet的生命周期和交互方式,以及Spring框架在portlet开发中的应用。同时,如果进一步集成Hibernate,还可以学习到如何...
Liferay是一个基于Java Enterprise Edition (J2EE) 的应用,它整合了多种技术,如EJB (Enterprise JavaBeans) 和JMS (Java Message Service),用于后台处理和通信。在前端,Liferay采用了Struts MVC框架,增强了用户...
2. **《liferay_4_installation_guide.pdf》** - 提供了详细的Liferay Portal安装和部署步骤,涵盖不同操作系统和服务器环境下的配置,包括JVM参数设定、数据库连接等,对初次接触Liferay的用户非常有帮助。...
为了在Eclipse环境中高效地开发和调试Liferay应用,我们需要进行一系列的配置步骤。以下将详细介绍如何在Eclipse中设置Liferay的开发和Debug环境。 1. **安装必要的软件和插件** - 首先,确保你已经安装了最新版本...
本开发指南将帮助开发者深入理解 Liferay 的核心概念和开发流程,以便充分利用其潜力来构建高效、定制化的Web应用程序。 ### 第 1 章 认识 Liferay 开发平台的价值 #### 1-1 节 关于本教程 本教程旨在引导开发者...
本压缩包包含了四个重要的Liferay开发文档,旨在帮助开发者深入理解和掌握Liferay的使用与开发技巧。 文档一:《Liferay Portal Developer's Guide》 这份文档详细介绍了Liferay Portal的开发流程,包括portlet的...
SSH(Spring、Struts、Hibernate)是Java企业级开发中的三大经典框架,它们各自承担着不同的职责。Liferay则是一款流行的开源门户系统,拥有丰富的API供开发者扩展功能。本资料包提供了这四个关键技术的中文参考文档...
- **核心技术和开发策略**:这部分涵盖了Liferay 6.0的关键组成部分和技术细节。 - **Portlets**:Portlets是Liferay中的重要组件之一,它们是用户界面的一部分,可以独立运行并显示特定的信息或提供某些功能。本书...
### Liferay 6 整合 Oracle 10g 步骤详解 在当前的企业级应用环境中,Liferay作为一款强大的企业门户系统,被广泛应用于构建各类业务应用平台。然而,在实际部署过程中,尤其是在与数据库的整合方面,经常会遇到...
在Liferay中整合GWT(Google Web Toolkit)是一项常见的任务,尤其对于开发复杂的企业级Web应用来说,这种集成可以利用GWT的强大力量来创建高性能的用户界面,同时利用Liferay的门户功能和社区特性。这篇博文提供了...
Liferay IDE是基于Eclipse的集成开发环境,它集成了许多Liferay特定的功能,如代码提示、部署和调试。另一方面,Liferay Workspace是一个预配置的Maven项目结构,包含了创建和管理Liferay模块所需的所有依赖。 搭建...
- **支持的技术框架**:Liferay集成了多种技术框架,如Java EE、Spring、Hibernate等,为开发者提供了广泛的选择。 2. **扩展和自定义Liferay** - **自定义展示外观**:通过创建主题(Theme),开发者可以定制...
文档也描述了如何在本地安装和配置Liferay的开发环境,包括设置`ANT_HOME`环境变量和使用`liferay-plugins-sdk-[version]`目录下的脚本创建新的Portlet项目。 ### Liferay IDE 配置和控制台编码 在Liferay IDE中,...