利用Liferay开发portal应用(插件)
随着portal的应用在中国越来越广泛,越来越受欢迎,Liferay在中国的用户数也随之增长。每个Liferay的开发人员都会面临一个问题,到底通过应用liferay的哪种方式进行开发是最好的呢?
我认为在Liferay上开发portal主要有两种方法:
第一种,利用Extension Environment形式进行开发,设置Extension Environment的方法网上已有很多,在这里不再做详细说明,大家可以参考官方的http://wiki.liferay.com/index.php/Setting_up_the_Extension_Environment,或者我们group里面的http://liferay.group.javaeye.com/group/blog/126024。
用该方式进行开发存在着以下问题:
1)和Liferay绑定得太紧,从version4.1到version4.2目录结构发生变化,从version4.2到version4.3底层程序实现发生变化。这样结果就是,我们升级存在着一定的风险,虽然官方提供了升级方案,但是随着数据的增长了,开发过程的不规范,升级带来的风险是无法估计的;
2)开发成本,Liferay用的是类似MDA模型的构架,但是过度使用设计模式和代码的复杂性,让开发成本不能保持在一个相对底的水平,更重要的是他的代码没有注释,学习起来比较费劲,这样的一个结果就是必须要有水平相对高的程序员去做这方面的研究,防止出异常后无法解决。
第二种,利用plugin的形式进行开发,plugin的概念liferay很早就已经有了,但是一直表现得不是很强,相对的例子也比较少。从Liferay4.3开始,plugin在这个portlet container上面有了非常强的体现,官方发布了专门开发plugin的SDK,hot deploy的bugs也比前几个版本减少了不少。Plugin支持java、php、ruby…
现在我们看看通过plugin开发portlet到底有哪些必需元素,以java的开发为例,liferay-plugin-package.properties和liferay-plugin-package.xml――对plugin的一个描述,包括需要下载的tld文件和jar文件;liferay-display.xml――portlet所属的category;portlet.xml和liferay-portlet.xml――这两个文件如果接触过liferay的人都不会陌生,就是对portlet的详细描述。这几个文件是必需的,liferay的就是通过解析这几个文件,通过listener来把你的应用以portlet的形式发布并加载到这个container里面。而portlet加载后,直接访问你的应用是通过portal-bridge进行的。
p.s. 4.3的版本plugin通过修改tomcat的classloader的机制,修改一些context的配置
<Context> <Loader loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader" /> </Context>
让当前的war包能共享liferay war中的所有jar包,各自的应用只需要保留自己的jar包(在liferay中没有)就可以了。
开发plugin最简单的方法是用官方提供的SDK,直接运行ant命名或已经定义好的脚本,就可以生成相关的应用。

例如,我要生成一个名为”hello world”的portlet,只需要在portlets下运行脚本:create hello-world “hello word”就会自动生成一个名为”hello world”的项目,必需的所有配置文件都已经自动的生成

p.s.个人来说我并不喜欢他自动生成的目录结构,既然是用plugin的形式进行开发,那直接用自己喜欢的目录结构和开发方法,最后在加上这些配置文件就好了。
同样的方法,你可以开发theme,layouttpl等等

Conclusion:Liferay是一个非常好的portlet container,由于文档的缺少,代码的复杂性,升级的频繁性等等问题,如果直接用Liferay进行二次开发,会带来不少的风险。所以个人的观点是把Liferay只看成是一个portlet container,作为一个建站工具,应用他的用户管理和权限管理的功能,然后通过plugin的形式,用你自己熟悉的方式进行开发,然后再发布到Liferay中,这样能把风险降到最低。
(转载请注明出处)
评论
是不是在DocRoot/web-inf/src目录下放Java类,要是 是的话,我为什么在Eclipse里打 点 不出提示呢。也不报错。
并且,在Deploy的时候就说 什么什么包找不到,比如说,com.liferay.portal.struts.PortletAction包。当我把这个包考过来,放在DocRoot/web-inf/lib目录下后,虽然不再报错,但把这个包也打了进来。导致Liferay无法启动。如果放在根目录下的Lib下又不起作用。那我应该怎么办呢。
现在想解决以下几个问题:
1,在写类的时候,打 点 不出提示。也不报错。
2,把Liferay已有的包打了进去。
<Context> <Loader loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader" /> </Context>
打成war包后要去掉lib下的jar包
我的表达有点问题
文章中我做了修改
Xml代码
<Context>
<Loader
loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader"
/>
</Context>
<Context>
<Loader
loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader"
/>
</Context>让当前的war包能共享liferay war中的所有jar包,各自的应用只需要保留自己的jar包(在liferay中没有)就可以了。
这一块我比较迷惑,请教一下:
将两个应用整合在一起(在同一个上下文中),他们不是使用同一个classloader吗?
我现在的做发是:
1、将Liferay瘦身,去掉多余的Portlet等
2、与我们的应用打包在一起(放在一个war包中),这样就做到了你所说的share一个classloader了吧?
3、开发一个页面容器(就是自己的Portal page),这个Portal page也可以向Liferay那样设置Layout等。因为我们除了要在这个Portal page中放置portlet外,还要存放其余的资源,比如url(连接到别的网站)。
4、权限也是用自己的。抛弃Liferay的权限系统。
也就是说我们只是需要Liferay的portlet容器。
感觉要做的工作很多,头绪很乱。
现在也只是在做方案,看看这样做行得通不。
请提一些好的建议!多谢!
porlet container有很多,如果单单是为了这样一个container,我建议你还是用别的,因为Liferay相对来说还是挺复杂的。象你所说的做法,和我所说的第一种开发模式是一样的,存在升级等方面的风险。今天下了个4.4的version看了一下,和4.3又有点区别了,所以如果不是用plugin的方式,又得做升级了!而我plugin开发出来的应用,测试过了是兼容的。
另外,他share同一个classloader的方法不是说打到同一个war包中,而是通过设置
<Context>
<Loader
loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader"
/>
</Context>
谢谢。
我现在的做发是:
1、将Liferay瘦身,去掉多余的Portlet等
2、与我们的应用打包在一起(放在一个war包中),这样就做到了你所说的share一个classloader了吧?
3、开发一个页面容器(就是自己的Portal page),这个Portal page也可以向Liferay那样设置Layout等。因为我们除了要在这个Portal page中放置portlet外,还要存放其余的资源,比如url(连接到别的网站)。
4、权限也是用自己的。抛弃Liferay的权限系统。
也就是说我们只是需要Liferay的portlet容器。
感觉要做的工作很多,头绪很乱。
现在也只是在做方案,看看这样做行得通不。
请提一些好的建议!多谢!
比如自己实现了Portal page,调用Liferay的相关API,获取Portlet的代码片段(html),然后显示在自己的Portal page上面,不知道可行不?
可以,taglib现在都在util-java.jar这个包里面。调用Liferay的api有两种方法,一种是和Liferay的应用share一个classloader,这样的话可以调用api得到theme等等;另一种方法是用client包,通过ws的方式取得
比如自己实现了Portal page,调用Liferay的相关API,获取Portlet的代码片段(html),然后显示在自己的Portal page上面,不知道可行不?
发表评论
我的相册
共 12 张
最新评论
-
liferay权限开发(一)
我想知道程序 验证 的过程。(代码级别) 可否告知? 续集在那里?
-- by java.fan -
提高Liferay生产环境下的 ...
没有,哪里的gmail?
-- by devilbaby -
提高Liferay生产环境下的 ...
devilbaby你好,以前你联系过 liferaychina@gmail.co ...
-- by 010lead -
利用Liferay开发portal应 ...
hhhhhh
-- by yangzh -
利用Liferay开发portal应 ...
我现在遇到了一个问题,再问,问题之前。我想先确认一下我做的是否正确。 是不是在D ...
-- by 眼镜蛇







评论排行榜