51CTO技术论坛 » Web及应用服务器 » 大家有人用过TongWeb这个应用服务器么?        上一帖     下一帖    查看完整版本

页: [1]

hello123_1232008-7-14 05:39
大家有人用过TongWeb这个应用服务器么?

大家好啊,请教问题,最近公司中标了一个项目,应用服务器指定了国内的东方通,想问问有人用过没?

jiangye2008-7-14 07:28
东方通科技是中国专业的中间件技术、产品和解决方案供应商,是信息产业部、中关村科技园区的投资企业,也是国家规划布局内的重点软件企业。自1992年成立以来,东方通科技一直从事中间件及VSP(Vertical Solution Package)等基础架构软件的研发及技术推广,是中国中间件相关产品的开拓者和领导者,为国产技术软件的成长奠定了良好的基础。在这十几年里东方通与合作伙伴不断的共同努力,不断创新,实现了对于客户优质服务、系统整合的承诺,使众多客户在低成本、高集成性、高可扩展性下实现了系统的长期使用和灵活多变。
   作为一个独立软件厂商(ISV),东方通科技公司推动以中间件为基础的BOA(Business Oriented Architecture)作为自己的核心战略,为用户创造最大价值。BOA的三层体系架构分别为基础中间件、集成中间件和VSP。东方通科技公司以业务为导向,不断开发和丰富面向业务的VSP产品,为行业用户提供更贴近业务的产品和解决方案,帮助客户轻松实现其IT战略,使客户更加容易的应对变革、降低成本、提高效率。
   东方通科技覆盖了金融、通信、能源、交通、政府等行业,总装机量超过40万套,如:中国人民银行、中国工商银行、中国建设银行、中国农业银行、交通银行、华夏银行、中国人民保险公司、中国联通、中国网通、中国移动通信、交通部、农业部、中国海事局、中国外运、中国石化等都是全国性的大用户,在国内中间件市场份额达到了17.3%(数据来源:2005-2006 CCID Consulting),十几年来一直都在与全球顶尖的中间件厂商抗衡,实现了中国基础软件在市场占有率上的跨越式突破。
   东方通科技是国家重大科技项目的主要承担单位,被国家发展与改革委员会纳入国家高科技产业发展计划中间件产业化示范工程项目,被科技部列入国家863计划、重点国家级火炬计划、国家重大科技成果推广计划,被认定为“国家重点新产品”,荣获两项北京市科技进步奖。
   多年来,东方通科技获得了国家、政府、咨询机构、媒体等多方认可和支持,仅2005年,东方通科技荣获“中间件应用综合奖”、“优秀中间件交通行业应用方案奖”、“优秀电子政务统一应用平台技术方案奖”、“2005年度信息化贡献奖”以及多项单一产品奖,连续两年获得计世资讯(CCW)授予的“国内中间件品牌用户综合满意度第一”和“中间件产品满意度第一”,并被Red Herring杂志评为“亚洲科技100强”。

没有用过,他们负责开发,有细节问题直接咨询他们.
主页: [url]http://www.soft6.com/corp/474[/url]
TongWEB相关介绍:
[url]http://www.soft6.com/product/0/4828.html[/url]

北京东方通科技发展有限责任公司     电话:010-82652228 传真:010-82652226
公司地址:北京市海淀南路32号中信国安数码港8层

hello123_1232008-7-15 05:20
楼上的,这个不是广告么?是想听听有用过的朋友的建议,方便尽快入手啊,TongWeb的web容器用的好像是Tomcat,其他的都是自己实现的么?

jiangye2008-7-16 09:11
只是一点基本资料.
他只是众多网络服务公司的一个.好不好我不知道.

lxf9092008-7-17 11:18
没听说过,知道中国数据

hello123_1232008-7-20 15:28
看来大家都用的比较少啊,用了几天,觉得还是比较麻烦的,很多地方都比较模糊,有没有具体点的成功应用介绍啊,到东方通的网站上去,都是广告信息,没有具体一点的东西啊?急啊、

jiangye2008-7-21 05:38
还真帮不了你,我在上海.
这种公司随便一捞就一把.既然是指定的,那就用.所谓顾客是上帝.
你就好好行使上帝的权利.
把你要的先打电话咨询.做到满意了再给钱!~反正是总是不满意了!~
其他不多说了........

jiangye2008-7-21 05:40
或者
LZ自己来做.实现那个应用服务器.虽然不知道怎么样的应用!~~~~

看广告,这个公司业务多是做银行系统的.真要是做好了还希望LZ分享经验呢.

[[i] 本帖最后由 jiangye 于 2008-7-21 13:46 编辑 [/i]]

single_code2008-7-21 05:53
首先需要声明的是,本人出于技术爱好的角度,以下的文字只是对所看到的一些情况的罗列,偶尔附加个人的一些感慨,不代表其它任何组织或公司的色彩。本人也并不希望这篇贴子成为某些别有用心的人用来攻击某些厂商的武器。

    作为一名有多年开发经验的J2EE技术人员,本人向来对J2EE应用服务器的相关知识比较感兴趣;或许又夹杂着一些民族感情,对号称国产中间件第一品牌东方通的应用服务器产品“TongWeb”倾慕不已。遗憾的是,东方通的网站上从来不放任何产品的下载,因此,对 TongWeb 到底是如何的庐山真面目,也无从得知。
    一个很偶然的机会,由于客户指定品牌的原因,获得了一份 TongWeb 的产品包,颇有些喜出望外,极欲一探究竟。在使用TongWeb的过程中,一个很偶然的因素,本人打开了TongWeb4.6\conf\ejb\trace.properties文件,发现了这样一行:
    log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory
    不由心中一动,objectweb,好熟悉的名字,国外的开源服务器 JOnAS 不就出自这个组织吗?
    抱着疑惑的态度和本着技术人员寻根问底的精神,就开始了 TongWeb 与 JOnAS 的对比之旅。

    进行Java程序的对比,自然是要对最主要的jar包进行对比了。
    根据“最大的就是最主要的”原则:TongWeb中最大的jar包是:TongWeb4.6\lib\tongweb.jar;JOnAS最大的jar包是:JOnAS-4.8.3\lib\commons\jonas\ow_jonas.jar
随便翻了关于 ejb 的一个包,以下是包名截图:
[attach]88188[/attach]

看起来很像?但不能够以最坏的恶意来揣测人家,不妨用反编译工具看一下具体的内容再说。
顺手选一个,就拿图片中显示的第一个类 BeanFactory 来说吧,以下是用Jad反编译出来的内容对比:

/***************org.objectweb.jonas_ejb.container.BeanFactory***************/
package org.objectweb.jonas_ejb.container;

import java.util.Hashtable;
import javax.naming.InitialContext;
import javax.transaction.Transaction;
import org.objectweb.jonas_ejb.deployment.api.BeanDesc;
import org.objectweb.transaction.jta.TransactionManager;


public interface BeanFactory {

    public abstract String getEJBName();

    public abstract BeanDesc getDeploymentDescriptor();

    public abstract int getPoolSize();

    public abstract void stop();

    public abstract void syncDirty(boolean flag);

    public abstract void reduceCache();

    public abstract JHome getHome();

    public abstract JLocalHome getLocalHome();

    public abstract TransactionManager getTransactionManager();

    public abstract JContainer getContainer();

    public abstract Hashtable getEnv();

    public abstract InitialContext getInitialContext();

    public abstract void initInstancePool();

    public abstract void restartTimers();

    public abstract void storeInstances(Transaction transaction);
}

/***********com.tongweb.teas_ejb.container.BeanFactory******************************/

package com.tongweb.teas_ejb.container;

import com.tongweb.teas_ejb.deployment.api.BeanDesc;
import java.util.Hashtable;
import javax.naming.InitialContext;
import javax.transaction.TransactionManager;



public interface BeanFactory {

    public abstract String getEJBName();

    public abstract BeanDesc getDeploymentDescriptor();

    public abstract int getPoolSize();

    public abstract void stop();

    public abstract void sync();

    public abstract void reduceCache();

    public abstract JHome getHome();

    public abstract JLocalHome getLocalHome();

    public abstract TransactionManager getTransactionManager();

    public abstract JContainer getContainer();

    public abstract Hashtable getEnv();

    public abstract InitialContext getInitialContext();
}
这两个类很相像?在本人看来,何止是相像,简直就是一个模子刻出来的!只能说的是,版本不同而已!
还是不能以最坏的恶意来揣测TongWeb,不妨再换个包来看看。东方通不是号称消息中间件最强吗?不妨看看jms这个包。
不看不知道,一看吓一跳:

[attach]88189[/attach]

这个包下的所有类名称,竟然都是一模一样的,只不过一个位于org.objectweb.jonas_jms包下,一个位于com.tongweb.teas_jms 包下而已。
随便找个类JConnection来看看:

/**********************************org.objectweb.jonas_jms.JConnection***********/
package org.objectweb.jonas_jms;

import java.util.LinkedList;
import javax.jms.*;
import org.objectweb.transaction.jta.TransactionManager;
import org.objectweb.util.monolog.api.BasicLevel;
import org.objectweb.util.monolog.api.Logger;


public class JConnection
    implements Connection
{

    protected XAConnection xac;
    protected boolean closed;
    protected String user;
    protected boolean globaltx;
    protected static TransactionManager tm;
    protected JConnectionFactory jcf;
    protected LinkedList sessionlist;
    protected static final String INTERNAL_USER_NAME =
"anInternalNameUsedOnlyByJOnAS";[/b]

    protected JConnection(JConnectionFactory jcf, String user)
        throws JMSException
    {
        globaltx = false;
        sessionlist = new LinkedList();s
        this.user = user;
        this.jcf = jcf;
        closed = false;
        if(tm == null)
            tm = JmsManagerImpl.getTransactionManager();
        try
        {
            globaltx = tm.getTransaction() != null;
        }
        catch(Exception e) { }
    }

    public JConnection(JConnectionFactory jcf, XAConnectionFactory xacf, String user, String passwd)
        throws JMSException
    {
        this(jcf, user);
        xac = xacf.createXAConnection(user, passwd);
    }

    public JConnection(JConnectionFactory jcf, XAConnectionFactory xacf)
        throws JMSException
    {
        this(jcf, "anInternalNameUsedOnlyByJOnAS");
        xac = xacf.createXAConnection();
    }

    protected synchronized boolean sessionOpen(Session s)
    {
        if(!closed)
        {
            sessionlist.add(s);
            return true;
        } else
        {
            return false;
        }
    }

    protected synchronized void sessionClose(Session s)
    {
        sessionlist.remove(s);
        if(sessionlist.size() == 0 && closed)
            notify();
    }

    public String getUser()
    {
        return user;
    }

    public void close()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        if(globaltx)
        {
            jcf.freeJConnection(this);
        } else
        {
            synchronized(this)
            {
                while(sessionlist.size() > 0)
                    try
                    {
                        wait();
                    }
                    catch(InterruptedException e)
                    {
                        TraceJms.logger.log(BasicLevel.ERROR, "interrupted");
                    }
            }
            closed = true;
            xac.close();
        }
    }

    public void finalClose()
        throws JMSException
    {
        if(!closed)
            xac.close();
    }

    public ConnectionConsumer createConnectionConsumer(Destination destination, String messageSelector, ServerSessionPool sessionPool, int maxMessages)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return xac.createConnectionConsumer(destination, messageSelector, sessionPool, maxMessages);
    }

    public ConnectionConsumer createDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return xac.createDurableConnectionConsumer(topic, subscriptionName, messageSelector, sessionPool, maxMessages);
    }

    public Session createSession(boolean transacted, int acknowledgeMode)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return new JSession(this, xac);
    }

    public String getClientID()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return xac.getClientID();
    }

    public void setClientID(String clientID)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        xac.setClientID(clientID);
    }

    public ConnectionMetaData getMetaData()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return xac.getMetaData();
    }

    public ExceptionListener getExceptionListener()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return xac.getExceptionListener();
    }

    public void setExceptionListener(ExceptionListener listener)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        xac.setExceptionListener(listener);
    }

    public void start()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        xac.start();
    }

    public void stop()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        xac.stop();
    }
}
/***********************com.tongweb.teas_jms.JConnection**************************/
package com.tongweb.teas_jms;

import java.util.LinkedList;
import javax.jms.*;
import javax.transaction.TransactionManager;
import org.objectweb.util.monolog.api.BasicLevel;
import org.objectweb.util.monolog.api.Logger;


public class JConnection
    implements Connection
{

    protected XAConnection xac;
    protected boolean closed;
    protected String user;
    protected boolean globaltx;
    protected static TransactionManager tm;
    protected JConnectionFactory jcf;
    protected LinkedList sessionlist;
    protected static final String INTERNAL_USER_NAME   =
"anInternalNameUsedOnlyByJOnAS";[/b]

    protected JConnection(JConnectionFactory jconnectionfactory, String s)
        throws JMSException
    {
        globaltx = false;
        sessionlist = new LinkedList();
        user = s;
        jcf = jconnectionfactory;
        closed = false;
        if(tm == null)
            tm = JmsManagerImpl.getTransactionManager();
        try
        {
            globaltx = tm.getTransaction() != null;
        }
        catch(Exception exception) { }
    }

    public JConnection(JConnectionFactory jconnectionfactory, XAConnectionFactory xaconnectionfactory, String s, String s1)
        throws JMSException
    {
        this(jconnectionfactory, s);
    }

    public JConnection(JConnectionFactory jconnectionfactory, XAConnectionFactory xaconnectionfactory)
        throws JMSException
    {
        this(jconnectionfactory, "anInternalNameUsedOnlyByJOnAS");
    }

    protected synchronized boolean sessionOpen(Session session)
    {
        if(!closed)
        {
            sessionlist.add(session);
            return true;
        } else
        {
            return false;
        }
    }

    protected synchronized void sessionClose(Session session)
    {
        sessionlist.remove(session);
        if(sessionlist.size() == 0 && closed)
            notify();
    }

    public String getUser()
    {
        return user;
    }

    public void close()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        if(globaltx)
        {
            jcf.freeJConnection(this);
        } else
        {
            synchronized(this)
            {
                while(sessionlist.size() > 0)
                    try
                    {
                        wait();
                    }
                    catch(InterruptedException interruptedexception)
                    {
                        TraceJms.logger.log(BasicLevel.ERROR, "interrupted");
                    }
            }
            closed = true;
        }
    }

    public void finalClose()
        throws JMSException
    {
        if(closed);
    }

    public ConnectionConsumer createConnectionConsumer(Destination destination, String s, ServerSessionPool serversessionpool, int i)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return null;
    }

    public ConnectionConsumer createDurableConnectionConsumer(Topic topic, String s, String s1, ServerSessionPool serversessionpool, int i)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return null;
    }

    public Session createSession(boolean flag, int i)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return new JSession(this, xac);
    }

    public String getClientID()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return null;
    }

    public void setClientID(String s)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
    }

    public ConnectionMetaData getMetaData()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return null;
    }

    public ExceptionListener getExceptionListener()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
        return null;
    }

    public void setExceptionListener(ExceptionListener exceptionlistener)
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
    }

    public void start()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
    }

    public void stop()
        throws JMSException
    {
        TraceJms.logger.log(BasicLevel.DEBUG, "");
    }
}
两个类除了包名不同,其它基本上完全一致!甚至于TongWeb中竟然还存在这样一个常量声明:protected static final String INTERNAL_USER_NAME   = "anInternalNameUsedOnlyByJOnAS"[/b];[/b]
东方通啊东方通,拜托你抄袭也要有点专业精神好不好,不要用“俯卧撑”来敷衍我们![/b]

   最后,很想说点啥,但心里又堵得慌,不知道该说啥。这就是号称“国内第一品牌”的东方通的产品?我们已经见识过了汉芯,见识过了麒麟,难道还要再见识一下TongWeb?

[[i] 本帖最后由 single_code 于 2008-7-21 13:56 编辑 [/i]]

sh_sky2008-7-21 15:18
表示震惊!!!!!!
这就是国内所谓的基础系统软件?!

hello123_1232008-7-22 02:10
楼上的长篇大论让人很是吃惊,上来就看到这个,心里很是迷惑。说实话看到这行代码:“protected static final String INTERNAL_USER_NAME ="anInternalNameUsedOnlyByJOnAS";”确实让人很无语。
顺便了解了一下JOnAS,感觉是一个拼起来的东西啊,Web容器用的是Tomcat/Jetty,EJB容器用的是EasyBeans,都是开源的软件啊。如果这是真的,那么花钱采购的TongWeb岂不是买了一堆的开源软件,呵呵,真叫钱都打了水漂。

iWorker2008-7-22 03:24
日前,新疆民政廳啟動流浪人員救助網絡信息管理平臺的建設,東方通公司自主研發的TongWeb產品在眾多產品中脫穎而出,贏得新疆民政廳的青睞。

新疆維吾爾自治區位於亞歐大陸中部,與8個國家接壤,是中國面積最大、陸地邊境線最長、毗鄰國家最多的省區。由於地理位置獨特和較為落後的經濟現狀,區內無業人員流動較大,貧困人員較多,不利於經濟的穩定和發展。

為了響應國務院和民政部的號召,實現以民政部為中心,建成新疆省級民政部門和救助站之間的廣域網連接,並通過互聯網提供集管理與服務為一體的多功能、集成化網絡體繫,完成全國救助信息資源的共享,切實可行地對城市生活無著的流浪人員進行管理和救助,新疆率先開展了省級民政部門業務監管子繫統和救助站管理子繫統的建設。之所以選擇東方通公司的TongWeb產品,是因為它是完全符合J2EE規範的企業應用支撐平臺,是基於互聯網平臺實現基礎構架集群必不可少的中間件產品,具有安全、穩定、集群能力強等特點,可以充分滿足新疆各級民政主管部門對救助業務的管理和服務需要。

hello123_1232008-7-22 04:40
[quote]原帖由 [i]iWorker[/i] 于 2008-7-22 11:24 发表
日前,新疆民政廳啟動流浪人員救助網絡信息管理平臺的建設,[color=Red]東方通公司自主研發的TongWeb[/color]產品在眾多產品中脫穎而出,贏得新疆民政廳的青睞。

新疆維吾爾自治區位於亞歐大陸中部,與8個國家接壤,是中國面積最大 ... [/quote]

不知道所谓的[color=Red]自主研发[/color]包不包括修改其他产品的包名这种“研发”?如果将开源的产品拿来修改一下包名就成了自主研发,那么开源=商业也就是一个包名区别了。

[[i] 本帖最后由 hello123_123 于 2008-7-22 12:43 编辑 [/i]]

north_focus2008-7-22 08:20
现在的国内软件行情就是这样,抄一抄,凑一凑,哪里有什么核心技术,能赚到钱能忽悠住客户就行,至于实现,网上一搜就有了,所以啊,在中国是应用软件多,基础软件少,行业软件多,平台软件少。

north_focus2008-7-23 08:56
网上找不到下载阿,不知道楼上的从哪里下的?

javafans81712008-7-24 02:44
不是吧?还可以这么搞呀?
有没有东西供我们下载来研究研究呀?

lanren_wan2008-7-25 09:14
[url]www.tongtech.com[/url]上只有产品介绍,没有下载阿,无从考证,不知道楼上的楼上讲的是不是真的?
仔细看了一下,觉得十有八九是确有其事,东方网站上也找不到示例,就一个光秃秃的介绍,这样也敢说是中间件第一品牌阿?中国的软件氛围就是被这样的行为给破坏殆尽了。表示一下愤怒,顶一下这个帖子,希望只能转载到其他论坛上。

[[i] 本帖最后由 lanren_wan 于 2008-7-25 17:16 编辑 [/i]]

discuss2008-7-27 14:34
这种事情司空见惯了,天下程序一大抄,也就是抄抄开源的产品了。不过,不见东方通的人出来辟谣阿,呵呵,难道是默认了?还是觉得无所谓。
说老实话,集成别人的产品拿来卖也无可厚非,只是做人要低调一点,别当了。。还要立牌坊,明明是集成了开源的产品,非要说自己是自主研发,就有点让人瞧不起了。

jiangye2008-7-28 04:49
虽然不能考证[color=red][size=4]single_code[/color][/size]所说的真实性.但是他所带来的信息被评分,希望有声音给出印证或者反驳!~



相关文章:
web站点崩溃的原因总结归纳 (上)
有关HTML语言的问题!
最好的weblgoci管理指南
服务器访问怪问题
今天帮客户搞定了一个超简单的问题-IIS权限问题

查看完整版本: 大家有人用过TongWeb这个应用服务器么?


Powered by 51CTO.COM