tomcat5.0上部署jivejdon出现的问题,请banq大哥研究研究

ilovebbs

<################################>Action: JdonFramework core entrance
2000-09-16 17:29:08,875 [http8080-Processor24] DEBUG com.jdon.bussinessproxy.dyncproxy.DynamicProxyWeaving - [JdonFramework]<################>execute method=com.jdon.jivejdon.service.ForumService.getForums
2000-09-16 17:29:08,875 [http8080-Processor24] DEBUG com.jdon.aop.AopClient - [JdonFramework] enter AOP invoker2 for:com.jdon.jivejdon.service.imp.ForumServiceImp method:getForums
2000-09-16 17:29:08,875 [http8080-Processor24] DEBUG com.jdon.aop.joinpoint.AdvisorChainFactory - [JdonFramework] enter create PointcutAdvisor
2000-09-16 17:29:08,875 [http8080-Processor24] ERROR com.jdon.util.Debug - com.jdon.aop.AopClient
java.lang.NullPointerException
at java.util.ArrayList.addAll(ArrayList.java:473)
at com.jdon.aop.joinpoint.AdvisorChainFactory.create(AdvisorChainFactory.java:58)
at com.jdon.aop.AopClient.invoke(AopClient.java:92)
at com.jdon.bussinessproxy.dyncproxy.DynamicProxyWeaving.invoke(DynamicProxyWeaving.java:62)
at $Proxy0.getForums(Unknown Source)
at com.jdon.jivejdon.presentation.action.ForumListAction.getPageIterator(ForumListAction.java:38)
at com.jdon.strutsutil.ModelListAction.execute(ModelListAction.java:69)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet.create(AdvisorChainFactory.java:58)
at com.jdon.aop.AopClient.invoke(AopClient.java:92)
... 48 more
2000-09-16 17:29:08,875 [http8080-Processor24] ERROR com.jdon.strutsutil.ModelListAction - getPageIterator not be implemented, you must implement either of them
2000-09-16 17:29:09,000 [http8080-Processor25] DEBUG com.jdon.controller.service.WebServiceFactory - <==============================>start: JdonFramework core entrance
2000-09-16 17:29:09,000 [http8080-Processor25] DEBUG com.jdon.controller.service.WebServiceFactory - <===============>Looking up new service='forumMessageQueryService'

ilovebbs
2007-09-16 17:53

由于发帖文字限制所以中间一部分错误信息被截取,下面是JDNI的配置信息:
<Context path="/jivejdon" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\jivejdon" debug="0" reloadable="true">
<!--
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/security?user=root&password=3c508"
digest="MD5" userTable="user" userNameCol="name" userCredCol="password"
userRoleTable="role" roleNameCol="name"/>
-->

<Resource name="jdbc/jivejdon" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/jivejdon">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/jivejdon</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>3c508</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
<Resource name="jdbc/security" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/security">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/security</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>3c508</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>

ilovebbs
2007-09-16 17:54

下面是daos.xml的配置情况
<!-- DataSource -->
<component name="jdbcTempSource"
class="com.jdon.jivejdon.dao.sql.JdbcTempSource">
<!-- JBoss JNDI-->
<!-- tomcat jndi <constructor value="java:/JiveJdonDS"/> -->
<constructor value="java:comp/env/jdbc/jivejdon"/>
</component>

<!-- DataSource for SSO -->
<component name="jdbcTempSSOSource"
class="com.jdon.jivejdon.dao.sql.JdbcTempSSOSource">
<!-- jboss jndi --> <!-- tomcat jndi <constructor value="java:/Security"/> -->
<constructor value="java:comp/env/jdbc/security"/>
</component>

ilovebbs
2007-09-16 18:01

权限部分我使用的是tomcat的tomcat_user.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="Admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="admin" password="admin" roles="Admin"/>
</tomcat-users>
现在的 情况是论坛的 页面可以出来,但论坛的内容出不来,用http://localhost:8080/jivejdon/admin入口登录后管理功能不能用,或出现权限错误,或内容无法列表,列表系统tcp链接,没有链接mysql数据库的链接。我用jboss服务器就正常。请banq大哥研究研究!

banq
2007-09-17 12:03

目前不能在Tomcat下使用Jivejdon3.

我已经在JiveJdon3 readme中说了,由于Tomcat的权限realm对角色数据表有特定要求,JiveJdon3没有符合其设计,所以,JiveJdon3只能在对角色数据表没有限定设计的服务器上使用,例如JBoss/Weblogic等。

另外一种可能市更改JiveJdon3的角色数据表,这个以后会考虑。

ilovebbs
2007-09-17 13:11

我正在分析您的jdon框架,并尝试着把jivejdon运行在tomcat上,现在对框架的运行机理还不是很清楚,如果有问题请banq大哥不吝赐教.
个人认为快速与复杂是矛盾的,也就是快速与灵活性是矛盾的,jdon的定位很重要,限制越少,灵活性越高,但也复杂,掌握起来也越难.

ilovebbs
2007-09-22 00:59

最新情况:经过一周的调试,论坛在tomcat5.0下的部署有了点新进展,但有出现了下面错误,请banq大哥指个方向。

javax.naming.NameNotFoundException: Name TransactionManager is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:815)
at org.apache.naming.NamingContext.lookup(NamingContext.java:198)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:183)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.jdon.jivejdon.service.util.JtaTransactionUtil.<init>(JtaTransactionUtil.java:13)

banq
2007-09-22 09:48

这是有关JTA事务错误。

1.需要tomcat中有JTA.jar这样的Jar包。
2.需要有JTA JNDI名称,因为Tomcat缺省是不支持JTA的,所以,我也不知道其缺省的JTA JNDI名称是什么,你可以查查有关资料。

非常佩服你的能力,不过我前面说关于容器权限认证方面问题不知你是否明白?JiveJdon3的角色数据表设计不符合Tomcat的Realm规定的数据表格式,所以,就无法使用Tomcat的权限认证,JiveJdon3的权限登录机制无法启用。
http://www.onjava.com/pub/a/onjava/2002/06/12/form.html
http://tomcat.apache.org/tomcat-5.0-doc/realm-howto.html

如果你确实有所突破,也发布一下你的心得,帮助JiveJdon这个开源软件在Tomcat上有所发展。

ilovebbs
2007-09-22 11:18

从网上下了一个开源的jta包,现在试试在server.xml中配置jndi,仔细读了您的源码,对您的框架有了大概的了解,您说得JiveJdon3的角色数据表设计不符合Tomcat的Realm规定的数据表格式,我知道是什么意思,你的论坛权限是三个表,tomcat要求的是两个表,不过用tomcat_user.xml的方式大概可以解决这个问题。从您的框架代码中也看到了许多模式的实例,很有启发。

ilovebbs
2007-09-22 22:06

修改了JtaTransactionUtil.java这个文件的代码静态创建了transactonmanager这个对象,而不是从jndi查询,现在论坛基本正常了,但弊端就是系统被帮定到固定的jta实现上了,tomcat的jndi写法试了好几种都没弄好,没信心了。

ilovebbs
2007-09-22 22:08

对了,用户系统还不正常,现在只能在tomcat_user.xml中手动加

ilovebbs
2007-09-23 06:58

已经可以用正常方式验证用户了,我在权限认证数据表上加了一个视图就把三个表变成两个表了,哈哈

banq
2007-09-23 19:41

>我在权限认证数据表上加了一个视图就把三个表变成两个表
太棒了,能否将详细方法贴出来,我补充进入JiveJdon3中,这样让更多初学者分享,,JiveJdon3本身就是开源,需要靠大家来丰富它,我会注明作者版权的,谢谢。
[该贴被banq于2007年09月23日 19:43修改过]

ilovebbs
2007-09-23 20:51

要求在mysql5.0以上版本,因为只有5.0才支持视图
CREATE VIEW security.user_role_v AS
select rl.name AS Roles,u.name AS name
from ((security.role RL join security.user U)
join security.users_roles RU)
where ((u.userId = ru.userId)
and (ru.roleId = rl.roleId))

下面是在server.xml中的认证配置
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/security?user=root&password=3c508"
digest="MD5" userTable="user" userNameCol="name" userCredCol="password"
userRoleTable="user_role_v" roleNameCol="roles"/>

另有点不成熟的意见,如果把事务管理做成组件而不是到JDNI中搜索会不会更好一点,可能我说的不对,因为我在这方面的知识还很欠缺。

很高兴能为你的开源论坛尽点微薄之力,人人为我,我为人人。

banq
2007-09-24 10:35

非常感谢, JTA需要在Tomcat中配置,是否使用JOTM的JTA?网上资料搜索有如下配置:
相关资料:
http://cymulacrum.net/writings/adv_tomcat/c225.html

在Tomcat中使用JDBC与JTA

关于为什么不在JdonFramework中整入JTA和权限认证,这两点我认为是使Spring变得复杂难用的一个原因,Spring在后来整入了JTA,致使其线程ThreadLocal方面异常复杂,很难保证不出错,另外一个开源Acegi实现权限认证,Acegi也是基于ThreadLocal异常复杂。

Spring虽然花了这么大力气的好处,就是能够在Tomcat这样Web容器运行标准的JEE程序,对于初学者Web程序员或者不理解JavaEE是个组件世界的人是一个好事。

JavaEE世界是一个组件世界,就象自助餐,每个应用就是需要自己动手配置,这样才能满足个性化的需求。初学者进入Java世界以后,迟早会意识到这个问题,会动手自己组合Jar包的。

一个框架如Spring为了使用者方便整入了很多的组件,但是不可能将所有组件都整合进去,这点不象.NET,.NET可以打包很多组件,那些都是微软自己生产的组件;但是在Java世界,有各种不同或者类似竞争的组件,Spring只能整入一两个,不可能全部整入,而且整入哪个也是一个困难判断依据,比如你今天整入Hibernate,明天要整入IBatis,如果Hibernate/IBatis有类似竞争开源组件,那么是否对其他组件不公平?

JTA/权限认证,这些都是在JavaEE标准文档规定的,必须是JavaEE服务器提供的功能,而且Weblogic/Webshere这些商业服务器为什么不会因为有JBoss/Tomcat而停止销售,他们的核心竞争力就是分布式事务以及集群,也就是说JTA事务是一个水很深,技术异常复杂的领域,作为轻量级开发框架JdonFramework还是把这些推给依赖服务器实现吧,自己只做一些更靠近业务的支持。

[该贴被banq于2007年09月24日 11:10修改过]