由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 本菜对EJB一问
相关主题
如何学spring和hibernateGoogle App Engine顽固错误跪求解决办法
入门问题:以Spring+JPA开发back end,那么表现层只能用jsp吗?Which Web service is better EJB or RPC
Questions on EJB3 Persistence/Hibernate大家都是搞技术的
guice, spring和ejb请问一个问题
webservices productsJava,EJB的performance
OpenShift怎么上数据库?ejb 3.1 seems very promising...
[合集] 这个annotation,...谁来给简单的讲讲JAAS
play有啥好处?j2ee without EJB
相关话题的讨论汇总
话题: ejb话题: spring话题: jar话题: hibernate话题: gae
进入Java版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
EJB是不是和hibernate做类似的事情,就是把对象存到数据库?
Google app engine可以直接存对象到DataStore,那我是不是可以不用hibernate了?
z*******3
发帖数: 13709
2
http://en.wikipedia.org/wiki/Enterprise_JavaBeans
ejb应该做的是跟spring core差不多的事
spring本来就是打算做一个轻量级的ejb
是business logic层
hibernate是jpa的实现
是persistence层
不是一层,以前ejb还包括entity bean
那entity bean是做跟hibernate一样的事
后来被hibernate干掉了,ejb3就取消了entity bean
这样ejb就再也不跟hibernate是类似的东西了
另外ejb还包括message driven bean
也就是jms机制,这个是spring所没有的
jms什么都是用来跟其它系统集成的
g*****g
发帖数: 34805
3
Yes, hibernate is for SQL DB, it implements JPA spec. GAE is more like JDO.

【在 b***i 的大作中提到】
: EJB是不是和hibernate做类似的事情,就是把对象存到数据库?
: Google app engine可以直接存对象到DataStore,那我是不是可以不用hibernate了?

z*******3
发帖数: 13709
4
business logic理论上是无状态的
换句话说,business这一层做的事情
一不碰web,二不碰persistence
只处理逻辑,最理想的business bean理论上都应该是无状态的
我们举个例子
比如有一个阿三,从web上发了一个request过来
那么如何handle这个request是web层的事
最基础的就是servlet了,然后是spring mvc,或者是struts,或者jsf etc.
然后这一层的这些东东把request里面的变量给取出来
包装成一个pojo,就是一个实体,set/get这些东西
然后把这个pojo留住,这是第一步
这一层是web层,spring里面叫做controller
或者是struts里面的action这些东西,这些都是controller
mvc里面其它的m就是刚才做的那个pojo
v就是jsp这些东西
然后第二步,用hibernate,ibatis等jpa实现包装db
封装所有的db操作,这是persistence层
一般来说你会写出一堆的dao类去封装各种db的操作
比如增删改查等等
spring里面叫做repository
第三步是由spring的bean或者ejb
来统筹规划,调用各种方法,把这些层都给连起来
然后由于要调用各种方法,而方法肯定是散落在各个java bean中
那么怎么管理这些java bean,那就是spring framework
或者是ejb container的事情了
这一层是指挥官,指挥官只负责处理逻辑,不负责处理跟其它软件打交道这种事
比如具体到如何跟db,web打交道,这都不是这一层应该去管的
这一层可以说只负责最基本的逻辑,在spring里面叫做service
然后controller,service和repository都是component
所以spring里面可以用component替换三个中的任何一个
但是不建议你这么做,因为这样会使得结构层次不明,从而使得维护成本大增
最早这样做的目的是为了能够复用这一层的代码
所以要剥离对其它所有东西的依赖,这就包括web和db
因为只要产生了依赖,就不能复用了
ejb是一个可复用的组件,jee分层最初的一个目的就是为了代码复用
这只是理论上的三层,也是最简单的,不绝对
但是在现实中,往往复杂度要远远超过这三层
尤其是大系统,系统越做越大,到后面工作流什么往上加
经常是任何一个层都有自己的db,一大就很麻烦了
另外hibernate只针对db,也不是万能的
比如我们这个行业,每个国家有自己的数据库
我们要跟这些数据库打交道,那这个时候就没有办法用上hibernate了
因为协议不一样,不是jdbc
而是xml的拓展,这就需要我们自己去写persistence这一层的东西
反正很麻烦
但是不管怎样,ejb和spring core里面的bean
都不应该涉及具体的web或者是db的操作
所以其实写ejb是最容易的,因为是pure java
你不需要知道其它任何额外的技术细节
比如什么web里面的request,session是什么,这个是web层的事
也不需要知道sql,这是persistence层的事
你只需要负责调用各种层提供的接口就行了
然后处理这里面的逻辑,而且有了spring framework和ejb container
还不需要处理多线程等事,所以写起来这一层应该是最轻松的
z*******3
发帖数: 13709
5
我换一种方式解释
java是这么一种东西
当你打算用java去写系统的时候
你面对的是一堆乱七八糟的软件
这就包括web服务器,数据库,操作系统等等
那么你打算让这些东东合作
好在呢,这些东东跟java都有自己的一套接口
坏处呢,这些接口都十分原始
也就是基本上都只能做到通过接口传递原始数据类型的地步
不是int就是string这些东西,比如web,基本上就只有string
而且更不妙的是,往往有私货,比如sql就是专门针对db而言的
除此之外,你还有自己需要实现的一套逻辑
因为这个系统肯定不是说把数据从web中拔出来
直接插进到数据库中去,或者从db中拔出来,直接扔给浏览器就ok了的
一般来说,你都需要在这中间再倒腾倒腾
那怎么办?
所以建议就是
你针对你需要与之合作的那个软件,单独写一层,用来封装这个软件产品
所以就用struts/spring mvc这些来封装web服务器
用hibernate/ibatis这些来封装db
保证最后通过这些接口进出的数据都是pojo,也就是java beans
然后你再用spring core或者ejb来处理这写pojo之间的关系
所以spring core和ejb理论上最好的都是无状态
因为不需要保存状态,他们只负责处理这些东西之间的关系
至于里面数据确切是什么,他们不关心
这套逻辑其实很容易拓展,比如我除了web服务器和数据库之外
我又塞给你一个东西,这个东西叫做r language
统计上的东西,那这个东西也有自己的一套跟java的接口
但是呢,也不够完善,那么为了更好地跟其它东西协作
建议你针对r language专门写一层,来封装这个软件
保证进出r的都是pojo,都是java的东西这样
然后再跟ejb什么连起来,这样就搞定了
所以理论上在ejb和spring的那个service中
不能出现html, sql这些语言,一句都不行
当然这是针对大系统而言
对于小系统,那又是另外一回事了
jsp中出现sql语句也不是没有,网络上还有例子
而且即便如此,不按照这种结构去写,系统还是能够运行的
换句话说,spring的service或者ejb可能压根就不存在于某些系统中
L*********s
发帖数: 3063
6
顶zhaoce大牛,茅塞顿开
z*******3
发帖数: 13709
7
突然明白为什么楼主会以为ejb跟hibernate一样了
看到wikipedias上的这个例子
@Stateless
public class CustomerService {
@PersistenceContext
private EntityManager entityManager;
public void addCustomer(Customer customer) {
entityManager.persist(customer);
}
}
这里面有persist操作,让楼主以为是跟hibernate一样的
其实这是不对的,这里的entityManager就是hibernate里面的sessionfactory和
session
简化了操作,但是并不代表ejb就是hibernate
而wikipedia里面的命名也遵守了传统的命名方式
你看是*Service,说明这是一个service
也就对应了spring里面的@Service注释
说明是business层的bean,不是persistence的bean
当然ejb容器都默认实现了jpa,所以不需要再额外倒腾什么hibernate
也就是等于帮忙实现了这一层,但是这并不代表ejb的功效跟hibernate是一样的
等同ejb功效的只有spring core,或者干脆自己去写
除此之外,貌似没有其它的选择
另外这个例子也充分说明了jboss等appserver的好用
如果用spring+hibernate,这里要折腾,自己要去实现hibernate等jpa层
而appserver直接用就好了
z*******3
发帖数: 13709
8
wikipedia上的例子很好,所以调用ejb的就是web层了
如果是persistence层的话,那应该有一层business层
Such an EJB can be used by a class in e.g. the web layer as follows:
@Named
@RequestScoped
public class CustomerBacking {
@EJB
private CustomerService customerService;
public String addCustomer() {
customerService.addCustomer(customer);
context.addMessage(...); // abbreviated for brevity
return "customer_overview";
}
}
越往后面变化越小
ejb干脆就干掉了hibernate之类的
直接变成api了
如果自己倒腾hibernate
还要搞定sessionfactory和session,还有transactionmanager
还要写dao,这就稍微麻烦了,再往前还要理解threadlocal
传统上是通过建各种table对应的dao
然后在dao里面调用hibernate的session做各种操作
但是ejb干脆就把这些dao集中管理
然后通过传入的参数类型,自动识别寻找对应的表格
然后将其持久化,这种模式其实可以理解成一个daomanager模式
所以wikipedia上起名叫做entitymanager
而且是一个简化版本的daomanager
因为一般daomanager需要先getdao,然后再persist
也就是
entitymanager.persist(customer)
=
daomanager.getdao(daoId).insert(customer)
但是直接跳过getdao这一步,直接insert进去
一般我们自己写不会这么做,我们喜欢先定位dao,再操作数据
但是其实这一步是可以简化的,因为操作customer的时候
不可能跑去用其它的dao,只有可能是customer的dao
那既然如此,干脆干掉这一步算了
所以jcp那批人帮着做了定位的事
传统模式是action(也就是controller)->service->dao(repository)
但是dao可以集中管理,而且可以很智能地管理起来
因为插入customer的时候不可能用到其它表,所以可以通过判断参数类型
来自动判断所要使用的table,然后再自动生产sql
所以最后一层dao层其实是可以让别人来代劳的,所以ejb3有了entitymanager
所以对于成熟的ejb3容器来说,传统的3层其实真正要写的只有2层
嗯,appserver使得事情变得越来越简单,很有趣啊,越来越吸引人了
迫不及待要用appserver了,比写core java有趣多了,懒人的挚爱啊
b***i
发帖数: 3043
9
根据goodbug所说,现在看来google app engine真不错,不仅不用考虑linux, apache,
jboss/tomcat,甚至连JDO都自带(不知道我理解对不对)。而且还有memCache。
我现在直接在servlet里面根据上传的信息生成文件对象,设置好property,然后存到
DataStore里面。存的时候就一句datastore.put(myEntity);
不知道我这样有什么不好?以前那样分层为什么要用bean, reflection等spring, 或者
ejb的实现方案把存对象这件事情复杂化呢?我感觉这种封装技术有点象电子元件,最
后用xml这种东西把输入输出连接起来,不知道我理解对不对。那是不是未来java可以
图形化编程?象LabView那样?Zhaoce的例子不错,但是我还不完全理解,能不能再具
体到某一个任务上,什么样的任务需要象spring/ejb那样做?假设我使用google app
engine, 不用自己的JDO,不用调试hibernate,GAE自带了DataStore。
z*******3
发帖数: 13709
10
如果你笃定要用google的话
google可以帮你把所有问题都搞定
就像微软一样,而且可以尽可能多地搞定不少问题
ibm也可以,oracle也没有问题
只要你愿意,选择一家公司,然后把所有基础的问题全部交给他们去做
不管是db还是os还是web server,都可以让这家公司搞定
但是这样做的后果就是,你严重依赖这家公司
将来做大了之后要换,就没那么容易了,这就是代价
值不值得,那就看你自己权衡了,世上没有免费的午餐
这也是这种服务提供商所乐于看到的结果,而且这里面的代码往往不规范
就不容易迁移,你想换到另外一家公司去,恐怕没那么容易
理论上说,什么server side的系统都可以写成三层
哪怕中间这一层business logic只不过是做了很简单的连接的工作
但是人们在设计这个系统的时候,最初目的是为了复用component
包括中间这一层的java beans
能够跑在不同的地方,比如汇丰用的银行系统逻辑
也能够在渣打银行中使用,哪怕汇丰用的是oracle和weblogic
而渣打用的是db2和websphere,都能够跑
当然现实中往往做不到,但是做不到归做不到,理想状态永远无法实现
也不代表不需要去逼近这个理想
这是理论
例子晚上说,下班了,要回家了

apache,

【在 b***i 的大作中提到】
: 根据goodbug所说,现在看来google app engine真不错,不仅不用考虑linux, apache,
: jboss/tomcat,甚至连JDO都自带(不知道我理解对不对)。而且还有memCache。
: 我现在直接在servlet里面根据上传的信息生成文件对象,设置好property,然后存到
: DataStore里面。存的时候就一句datastore.put(myEntity);
: 不知道我这样有什么不好?以前那样分层为什么要用bean, reflection等spring, 或者
: ejb的实现方案把存对象这件事情复杂化呢?我感觉这种封装技术有点象电子元件,最
: 后用xml这种东西把输入输出连接起来,不知道我理解对不对。那是不是未来java可以
: 图形化编程?象LabView那样?Zhaoce的例子不错,但是我还不完全理解,能不能再具
: 体到某一个任务上,什么样的任务需要象spring/ejb那样做?假设我使用google app
: engine, 不用自己的JDO,不用调试hibernate,GAE自带了DataStore。

相关主题
OpenShift怎么上数据库?Google App Engine顽固错误跪求解决办法
[合集] 这个annotation,...Which Web service is better EJB or RPC
play有啥好处?大家都是搞技术的
进入Java版参与讨论
z*******3
发帖数: 13709
11
说一下例子
其实有一个逻辑是一定要放到ejb或者是spring core里面去的
那就是当你用struts/spring mvc封装了web服务器之后
并用hibernate/ibatis这些封装了db之后
这两个怎么连起来?
如果你只有两台物理机器,这也许还比较容易
因为直接用spring mvc里面的controller去调用hibernate的sessionfactory就好了
但是问题在于,这样做不便于扩展
因为这只有两台机器,1对1,关联只有一条线
如果是4台机器的话,2台web服务器,2台db,那么就是2*2=4条关联
如果再多一点,6台机器,3台web服务器,3台db,那么就是9条关联
……
如果这里面再参合其它的系统,比如统计的r语言,sas,.net之类的
那就麻烦大了,到最后你会彻底迷失在网状的关系中
怎么办?很简单,搞一个中间件出来
所有的系统,只能跟这一个中间件去交流,剩下的其它的系统
别管是什么系统,都不允许直接调用
也就是web服务器不允许直接调用db
不管是web服务器还是db,都只允许跟中间件做交流
这样做就容易很多,而且极其便于扩展
因为如果有新系统进来,不需要考虑什么,直接找中间件就行了
所以不管是什么app server,它提供的接口是最全的
你看啊
web service(rest, soap)
rmi, ejb, jca, jms, jdbc, 针对特殊行业还有特殊的协议
如果你愿意,你也可以自己定义协议
反正最后都是tcp/ip,再往上有点不同而已
这是不同物理机器的
相同机器上的r之类的也都提供相应的接口,还有jni之类的
java从诞生的那一天起,就一天到晚琢磨怎么跟其它系统衔接
这个玩意的哲学就是,现有的工具能用就用
只有迫不得已时候才去重写
这也是所谓中间件概念的由来
后来spring其实倒是经过简化的中间件
因为spring发现,大多数时候用不到这么复杂
都只有一台甚至两台机器,两台机器要那么复杂没有必要
于是做了简化,同时提供了额外的framework
比如spring web service之类的,在你需要时候用这些东西予以扩展
但是要注意,这些都是针对“大”系统而言
小系统,如果是访问人少,这么做就是额外增加折腾的成本
但是世界上没有免费的午餐,如果你在前期做足了准备
后面一旦系统并发数上来了,要改要加东西就很容易
如果前期准备不足,怎么简单怎么来的话,那后面就很痛苦了
所以软件工程从来都强调,前期的工作是最难的,做慢一点
前期的各种构架都是为了后期服务的,因为一旦程序开始写
写到一定阶段,如果要改构架,那对于整个项目的冲击是毁灭性的
极有可能因此玩完,所以retry说,最后都是要还的
说的就是这个道理,前面怎么简单怎么来,后面折腾的代价就大
前面深思熟虑了,后面折腾的代价就小
很多问题都只会在eai时候才会出现,单机开发时候发现不了这些问题
所以面谈时候很喜欢问你做过最大的系统有多大
有大系统经验的人毕竟还是少,系统越小,就越多人合格
这也是可以理解的
b***i
发帖数: 3043
12
说了半天,感觉要在前台和数据库之间增加一层adapter?这样可以在更换一个组件(数
据库)的时候,不改变前台程序,只改变adapter?
我现在直接在前台程序servlet里面写逻辑。初步的打算是把这部分十几行代码拿出来
放到另一个class里面,这是我唯一能想到的了。可能需要到上千行的时候才会明白要
怎样分层吧。
z*******3
发帖数: 13709
13
是的,如果你只是做web的话
可能就只有这么简单
所以web上用php可能会更方便
因为涉及不到太复杂的东西
如果只是增删改查这些跟db完全匹配的操作
一般都只要3-5行就搞定
但是如果要涉及到复杂的商业应用
比如保险的保费计算,那这么大一个东西
放在servlet里面就不合适了,servlet很快就会膨胀到你无法忍受的地步
尤其是要在servlet之间互相调用的话,旧系统一个类几千几万行代码就这么发展起来的
把代码拿出来放到另外一个类里面去也是这些东西发展起来的第一步
还有就是pojo如果不管理的话,bean一多,内存的消耗会吃不消
尤其是如果新建一个对象需要涉及io操作的时候,就很慢
而自己去写,写得不好会内存泄漏,也麻烦
spring里面对于这些可以复用的bean全部缺省设置为singleton
这都是大系统而言,小系统无所谓,想怎么写都行

【在 b***i 的大作中提到】
: 说了半天,感觉要在前台和数据库之间增加一层adapter?这样可以在更换一个组件(数
: 据库)的时候,不改变前台程序,只改变adapter?
: 我现在直接在前台程序servlet里面写逻辑。初步的打算是把这部分十几行代码拿出来
: 放到另一个class里面,这是我唯一能想到的了。可能需要到上千行的时候才会明白要
: 怎样分层吧。

z*******3
发帖数: 13709
14
所以古德霸之前有总结过
如果是简单的web,并发量大,但是对于数据的精度以及可靠性等要求都不高的话
应该要用php,比如百度,google这些其实都是可以用php的http server放在前面
如果是复杂的计算,比如金融体系,民航系统这种
你输入之后,后面要计算半天,各种流程的时候,j2ee就上吧
所以搞java的人对于front end多少都有些轻视
因为front end很多时候无非是把东西给back end就好了
另外一个比较典型的例子就是事务的控制,transaction
这个是重要的复杂逻辑,一般就在ejb和spring中控制
这个不是db层的东西,当然很多时候很多公司会做很多stored procedure
但是实际上不应该这么做,因为这样做增加了db的负担
而且使得global transaction完全不可行,只能用local transaction
瓶颈就发生在这里,db做了一堆事情,但是又没有这个能力
系统一大,问题就来了,这个时候oracle就屁颠屁颠过来收钱了

【在 b***i 的大作中提到】
: 说了半天,感觉要在前台和数据库之间增加一层adapter?这样可以在更换一个组件(数
: 据库)的时候,不改变前台程序,只改变adapter?
: 我现在直接在前台程序servlet里面写逻辑。初步的打算是把这部分十几行代码拿出来
: 放到另一个class里面,这是我唯一能想到的了。可能需要到上千行的时候才会明白要
: 怎样分层吧。

b***i
发帖数: 3043
15
现在看来,我做的web是最简单的项目,既可以用php,也可以用java。不过我还是坚定
地用java。
因为,首先我有一个java web start要动态发布,就是说,java web start的参数是动
态产生的。
所有的客户端的逻辑都是在jws里面做的,不是javascript。既然用了java,何不再用
java写网站?
另外,google app engine提供了免费的测试开发,带宽远远超过goDaddy。三大语言PY
, J和go。
第三,GAE包含了所有在servlet之下的服务,不需要我调试维护linux,apache,
tomcat等任何软件
而且还提供了数据库api。这样一来,整个项目是用一个语言写的。
如果我转php,还要学新的语言,学维护linux,防DOS攻击。一个人写程序没时间搞这些
东西。
所以我非常看好GAE,这是一个面向未来的让开发人员完全使用Java的平台。
我后面做的transaction可能最多就是一个paypal收费这样的东西。其他没啥需要
transaction,
都是无关紧要的信息,比如用户登录了,用户访问了那些文件,这些信息及时不及时,
准确不准确不重要。我估计我这个网站程序不会超过2000行。真的是不需要spring/ejb
了。
这东西拿php写也就2星期搞定。我现在java业余时间写了不到两个星期吧,基本把网站
1/3搞定了。
以前没写过动态网站。

【在 z*******3 的大作中提到】
: 所以古德霸之前有总结过
: 如果是简单的web,并发量大,但是对于数据的精度以及可靠性等要求都不高的话
: 应该要用php,比如百度,google这些其实都是可以用php的http server放在前面
: 如果是复杂的计算,比如金融体系,民航系统这种
: 你输入之后,后面要计算半天,各种流程的时候,j2ee就上吧
: 所以搞java的人对于front end多少都有些轻视
: 因为front end很多时候无非是把东西给back end就好了
: 另外一个比较典型的例子就是事务的控制,transaction
: 这个是重要的复杂逻辑,一般就在ejb和spring中控制
: 这个不是db层的东西,当然很多时候很多公司会做很多stored procedure

z*******3
发帖数: 13709
16
听起来不错,我也试一下

PY

【在 b***i 的大作中提到】
: 现在看来,我做的web是最简单的项目,既可以用php,也可以用java。不过我还是坚定
: 地用java。
: 因为,首先我有一个java web start要动态发布,就是说,java web start的参数是动
: 态产生的。
: 所有的客户端的逻辑都是在jws里面做的,不是javascript。既然用了java,何不再用
: java写网站?
: 另外,google app engine提供了免费的测试开发,带宽远远超过goDaddy。三大语言PY
: , J和go。
: 第三,GAE包含了所有在servlet之下的服务,不需要我调试维护linux,apache,
: tomcat等任何软件

z*******3
发帖数: 13709
17
hoho
试了一下
对netbeans支持非常糟糕,搞了半天没有琢磨出怎么安装插件
对eclipse支持还算不错,可以自动生成部署
很有趣啊,另外我注意到,它可以上传jar
所以理论上spring framework应该是可以在gae上运行的
但是我还没有尝试,所以不知道会有神马问题
这是我写的hello world
http://mysticalscenario.appspot.com/
b***i
发帖数: 3043
18
是的,可以用sring, struts等。还可以上传静态文件,比如html等。GAE的DataStore
支持JDO, JPA的interface,所以其他的软件是可以移植的。

【在 z*******3 的大作中提到】
: hoho
: 试了一下
: 对netbeans支持非常糟糕,搞了半天没有琢磨出怎么安装插件
: 对eclipse支持还算不错,可以自动生成部署
: 很有趣啊,另外我注意到,它可以上传jar
: 所以理论上spring framework应该是可以在gae上运行的
: 但是我还没有尝试,所以不知道会有神马问题
: 这是我写的hello world
: http://mysticalscenario.appspot.com/

z*******3
发帖数: 13709
19
看了下自动生成的文件
果不其然,一堆的私货
统统删掉
z*******3
发帖数: 13709
20
hoho
忙了一个下午
总算把spring给整合上去了
spring很黑,居然xml配置文件的名字必需是mvc-dispatcher-servlet.xml
我换成spring-config.xml就出异常
而且是很恶心的异常,说少xalan.jar,我去下了之后再试,才出io异常
蛮好玩的,有点意思

DataStore

【在 b***i 的大作中提到】
: 是的,可以用sring, struts等。还可以上传静态文件,比如html等。GAE的DataStore
: 支持JDO, JPA的interface,所以其他的软件是可以移植的。

相关主题
请问一个问题谁来给简单的讲讲JAAS
Java,EJB的performancej2ee without EJB
ejb 3.1 seems very promising...vaadin
进入Java版参与讨论
z*******3
发帖数: 13709
21
但是用起来spring那叫一个慢啊
看来小程序暂时先不上spring比较好
z*******3
发帖数: 13709
22
认真研究了一下gae
发现这个不能这样搞
什么spring都不能上
jar越多它越慢,jsp都不能上
唯一能用的只有servlet
看来得大面积使用ajax和html了
g*****g
发帖数: 34805
23
ejb3 is a standard, hibernate implements ejb3 too. It has a big set of API
beyond the standard.

【在 z*******3 的大作中提到】
: 突然明白为什么楼主会以为ejb跟hibernate一样了
: 看到wikipedias上的这个例子
: @Stateless
: public class CustomerService {
: @PersistenceContext
: private EntityManager entityManager;
: public void addCustomer(Customer customer) {
: entityManager.persist(customer);
: }
: }

g*****g
发帖数: 34805
24
Nothing wrong with what you are doing. But you are tied to GAE and it's not
an option for most jobs.

apache,

【在 b***i 的大作中提到】
: 根据goodbug所说,现在看来google app engine真不错,不仅不用考虑linux, apache,
: jboss/tomcat,甚至连JDO都自带(不知道我理解对不对)。而且还有memCache。
: 我现在直接在servlet里面根据上传的信息生成文件对象,设置好property,然后存到
: DataStore里面。存的时候就一句datastore.put(myEntity);
: 不知道我这样有什么不好?以前那样分层为什么要用bean, reflection等spring, 或者
: ejb的实现方案把存对象这件事情复杂化呢?我感觉这种封装技术有点象电子元件,最
: 后用xml这种东西把输入输出连接起来,不知道我理解对不对。那是不是未来java可以
: 图形化编程?象LabView那样?Zhaoce的例子不错,但是我还不完全理解,能不能再具
: 体到某一个任务上,什么样的任务需要象spring/ejb那样做?假设我使用google app
: engine, 不用自己的JDO,不用调试hibernate,GAE自带了DataStore。

g*****g
发帖数: 34805
25
以前GAE的最大问题是不支持完整的JDK,有一些类不让用,貌似现在这个限制去掉了?

DataStore

【在 b***i 的大作中提到】
: 是的,可以用sring, struts等。还可以上传静态文件,比如html等。GAE的DataStore
: 支持JDO, JPA的interface,所以其他的软件是可以移植的。

b***i
发帖数: 3043
26
有些还是不支持,比如多线程。但是spring什么的没有多线程吧。我就是在GAE上学的
servlet,免费啊!

【在 g*****g 的大作中提到】
: 以前GAE的最大问题是不支持完整的JDK,有一些类不让用,貌似现在这个限制去掉了?
:
: DataStore

z*******3
发帖数: 13709
27
以后会剥离出ejb
Enterprise JavaBeans
The EJB 3.0 specification (itself part of the Java EE 5 platform) included a
definition of the Java Persistence API. However, end-users do not need an
EJB container or a Java EE application server in order to run applications
that use this persistence API.[1] Future versions of the Java Persistence
API will be defined in a separate JSR and specification rather than in the
EJB JSR/specification.
The Java Persistence API replaces the persistence solution of EJB 2.0 CMP (
Container Managed Persistence).

【在 g*****g 的大作中提到】
: ejb3 is a standard, hibernate implements ejb3 too. It has a big set of API
: beyond the standard.

z*******3
发帖数: 13709
28
只要是单机的系统
多线程的源头一般在web server上
由web server来管理多线程
问题在于如果引用不释放的话
可能会造成内存泄露
gae用了jar后会很慢,所以这意味着你可能要自己实现bean的管理

【在 b***i 的大作中提到】
: 有些还是不支持,比如多线程。但是spring什么的没有多线程吧。我就是在GAE上学的
: servlet,免费啊!

z*******3
发帖数: 13709
29
研究了一下minecraft的客户端
发现还是要自己去倒腾一下
对于linux来说,不用写任何东西,直接执行.jar,默认是四分之一内存
如果是windows,我用c写了一个小程序,.exe
#include "stdlib.h"
main(){
system("java -Xms128m -Xmx128m -jar myApp.jar");
}
现在问题是macosx下怎么办?
我看minecraft用的是.app,这个貌似要用到xcode?
谁知道的给解答解答该怎么操作
尤其是如何调用系统的命令java -version这种
包子酬谢
z*******3
发帖数: 13709
30
大概知道了
http://www.centerkey.com/mac/java/
但是问题是切换参数在哪里设置?
嗯,有趣
相关主题
java的东西好多入门问题:以Spring+JPA开发back end,那么表现层只能用jsp吗?
搞不懂为什么hibernate为什么这么流行?Questions on EJB3 Persistence/Hibernate
如何学spring和hibernateguice, spring和ejb
进入Java版参与讨论
z*******3
发帖数: 13709
31
cool
macosx对java的支持很好
有默认的转换工具
直接点开Jar Bundler就行了
而且还可以自由定义最大和最小内存参数

楼主我觉得可以不用web start部署你的application
web start那个sand box很麻烦
而且如果要读取本地文件,图片什么还需要数字签名
巨恶心,我决定直接返回最原始的desktop application
b***i
发帖数: 3043
32
GAE默认好像128M内存,免费可用,on demand。交费后为$0.08/h, =600MHz CPU, 如果
内存, CPU翻番,则收费加倍,如果再翻番,再加倍。估计512M内存, 2.4GHz就很爽了
。另外,reserve的会便宜。

【在 z*******3 的大作中提到】
: 只要是单机的系统
: 多线程的源头一般在web server上
: 由web server来管理多线程
: 问题在于如果引用不释放的话
: 可能会造成内存泄露
: gae用了jar后会很慢,所以这意味着你可能要自己实现bean的管理

b***i
发帖数: 3043
33
我直接读网上的文件,另外可以放进jar里面,不需要签名。另外我本身开始就是
desktop app,现在转型为java web start,不需要改什么东西。将来改android。
你做什么和minecraft很象?

【在 z*******3 的大作中提到】
: cool
: macosx对java的支持很好
: 有默认的转换工具
: 直接点开Jar Bundler就行了
: 而且还可以自由定义最大和最小内存参数
: 爽
: 楼主我觉得可以不用web start部署你的application
: web start那个sand box很麻烦
: 而且如果要读取本地文件,图片什么还需要数字签名
: 巨恶心,我决定直接返回最原始的desktop application

z*******3
发帖数: 13709
34
web start只能读取jnlp所在的网站上的图片和其他资源
这样做的话,对于网站的负担就比较重
如果要cache的话,就一定要数字签名
包括jar内部的resources如果没有签名都不能读
没有继续提示你很可能是你之前的数字签名点确定之后还在生效
所以就不提示你,另外数字签名有时限
当然可以设定十年二十年,但是数字签名的提示框的确是个很恶心的东西
我情愿搞一个exe和app给windows还有macosx
也不是太麻烦,另外改android的话恐怕web start更不容易
android其实就是exe或者app,而且是从编译开始就不同
exe和app都是在jar外面加东西
书呆子的东西就在这里体现得很明显
pc上的安全搞得很认真,结果严重妨碍了客户的体验

【在 b***i 的大作中提到】
: 我直接读网上的文件,另外可以放进jar里面,不需要签名。另外我本身开始就是
: desktop app,现在转型为java web start,不需要改什么东西。将来改android。
: 你做什么和minecraft很象?

z*******3
发帖数: 13709
35
主要是java client的heap有限
尤其是在windows上默认是64m
要人命啊
我初步打算就是用这种方式生成
jar给linux
exe给windows
app给macosx
android用什么格式不知道,没有做过
但是貌似不难,就是api不一样而已
核心都是mvc的jar
然后对于andorid的v不同
z*******3
发帖数: 13709
36
你可以通过http header里面的内容判断对方的操作系统
从而自动定位下载文件的格式
minecraft和jre的主页面提示下载就是用这种方式判断
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tuto
b***i
发帖数: 3043
37
正因为负担重所以放在GAE上,scale的事情由google去做。
另外jar内部的resource是不需要签名的,我从来没有签过名。开发jws用签名谁敢用。
就不签名,都有人不打开java,甚至jnlp就当文件存起来。去apple店试过,有一次我
还要点击下载的jnlp才能启动。
android我感觉和applet没啥大区别。

【在 z*******3 的大作中提到】
: web start只能读取jnlp所在的网站上的图片和其他资源
: 这样做的话,对于网站的负担就比较重
: 如果要cache的话,就一定要数字签名
: 包括jar内部的resources如果没有签名都不能读
: 没有继续提示你很可能是你之前的数字签名点确定之后还在生效
: 所以就不提示你,另外数字签名有时限
: 当然可以设定十年二十年,但是数字签名的提示框的确是个很恶心的东西
: 我情愿搞一个exe和app给windows还有macosx
: 也不是太麻烦,另外改android的话恐怕web start更不容易
: android其实就是exe或者app,而且是从编译开始就不同

z*******3
发帖数: 13709
38
不行吧
http://stackoverflow.com/questions/7306965/getting-resources-fr
http://blog.xuite.net/matt72228/code/29732027
网络上不少问这种问题的
jar内部文件在沙盒模式下需要对jar签名才能访问
可以自己签名,但是自己的签名无法验证,假设客户会点确定接受
如果从网络上读取资源也不是办法
每一次启动都反复去服务器端下载
尤其是如果资源比较大,就会比较慢
每一次都慢就比较麻烦
jnlp不过是一个xml,下载后再双击打开是常态

【在 b***i 的大作中提到】
: 正因为负担重所以放在GAE上,scale的事情由google去做。
: 另外jar内部的resource是不需要签名的,我从来没有签过名。开发jws用签名谁敢用。
: 就不签名,都有人不打开java,甚至jnlp就当文件存起来。去apple店试过,有一次我
: 还要点击下载的jnlp才能启动。
: android我感觉和applet没啥大区别。

b***i
发帖数: 3043
39
看了一下,那个人要访问的不是资源,而是一个目录本身。另外java web start可以通
过url等方式来读取,不能通过File,来读取jar内部的资源。不需要sign。我从来不
sign,因为和你想的一样,用户肯定不会同意的。
既然这个不成问题,那么也就不用每次从网上下载了。我其实每次从网上下载的是不同
的东西,不是每次都用到的资源,是一些比如音乐什么的,本来就很大,本来就准备只
播放一次。所以,就stream就可以了。所以我用GAE,速度特别快。我下载1M文件只用不
到1秒钟。GAE是个平台,所有人都在上面用,不会因为一个人下载10个文件就变慢。它
的整体速度是一定的。下载多了,GAE会增加运行的机器。当然,下载是算钱的,大概$
0.13/GB吧。希望以后能继续降下去。两年前$0.17/G

【在 z*******3 的大作中提到】
: 不行吧
: http://stackoverflow.com/questions/7306965/getting-resources-fr
: http://blog.xuite.net/matt72228/code/29732027
: 网络上不少问这种问题的
: jar内部文件在沙盒模式下需要对jar签名才能访问
: 可以自己签名,但是自己的签名无法验证,假设客户会点确定接受
: 如果从网络上读取资源也不是办法
: 每一次启动都反复去服务器端下载
: 尤其是如果资源比较大,就会比较慢
: 每一次都慢就比较麻烦

z*******3
发帖数: 13709
40
是的,对于google这种公司来说
没有必要分流图片,可以尽情折磨他们
能不能访问反正也是最后才看,到时候看看吧
如果可以就用web start,如果不行,大不了我发三个包出去
针对不同的平台,各种工具都准备好了
貌似google的域名也可以直接登记
所以可以直接定向一级域名到这个app上去
省不少事

概$

【在 b***i 的大作中提到】
: 看了一下,那个人要访问的不是资源,而是一个目录本身。另外java web start可以通
: 过url等方式来读取,不能通过File,来读取jar内部的资源。不需要sign。我从来不
: sign,因为和你想的一样,用户肯定不会同意的。
: 既然这个不成问题,那么也就不用每次从网上下载了。我其实每次从网上下载的是不同
: 的东西,不是每次都用到的资源,是一些比如音乐什么的,本来就很大,本来就准备只
: 播放一次。所以,就stream就可以了。所以我用GAE,速度特别快。我下载1M文件只用不
: 到1秒钟。GAE是个平台,所有人都在上面用,不会因为一个人下载10个文件就变慢。它
: 的整体速度是一定的。下载多了,GAE会增加运行的机器。当然,下载是算钱的,大概$
: 0.13/GB吧。希望以后能继续降下去。两年前$0.17/G

相关主题
guice, spring和ejb[合集] 这个annotation,...
webservices productsplay有啥好处?
OpenShift怎么上数据库?Google App Engine顽固错误跪求解决办法
进入Java版参与讨论
z*******3
发帖数: 13709
41
但是这个不能用spring之类的很崩溃啊
我要自己去写service bean
还要自己管理,对于我的core java真是挑战
而且麻烦的是万一内存泄露了,那钱真是哗哗地流
z*******3
发帖数: 13709
42
appengine还是有问题
在国内不能访问
嗯,目前看用appengine还是比较方便的
但是长期看,还是要考虑考虑red hat这种跟政府关系良好的企业
做服务器端的好处就是普通人不知道
所以一般什么ibm, red hat这种公司争议较少
不象m$和google还有apple这种
屁股后面总跟着一群人骂
z*******3
发帖数: 13709
43
red hat用的cloud产品是open shift
https://openshift.redhat.com/community/developers/pricing
完全兼容主流的open source产品
jboss, postgresql什么都在呢
就是比较贵,需要114刀一个月,适合企业用
我又看了一下vmware的cloud
被吓到了,基础的要7000多刀一个月,天哪
http://www.vmware.com/products/datacenter-virtualization/vcloud
果然很贵,看来以后ejb3会越来越多人用了
spring这样搞,谁有办法在cloud上用啊
果然,资本的獠牙开始露出来了
还有人幻想什么spring免费之类的
在shit到cloud的时候会有大麻烦
出来混,总是要还的
z*******3
发帖数: 13709
44
所以比较合适一家企业成长的路线应该是
先用appengine,然后转到openshift上去
同时要注意剥离对google产品的依赖
google产品私货太多,便宜是比较便宜
但是基本上都不标准,vmware就更是借着open source大旗收费
也不标准,只有red hat是标准的兼容性产品
b***i
发帖数: 3043
45
要不,你申请个付费的,加大内存到512M看能不能用spring?

【在 z*******3 的大作中提到】
: 但是这个不能用spring之类的很崩溃啊
: 我要自己去写service bean
: 还要自己管理,对于我的core java真是挑战
: 而且麻烦的是万一内存泄露了,那钱真是哗哗地流

z*******3
发帖数: 13709
46
内存不是问题,现在用的免费的内存就够用
问题在于如果一定时间不用的话,你的application就会被关掉
然后有新的request过来,才会重新启动application
spring每次启动都很慢,这是主要问题
而且appengine的速度跟jar的数量多少有关
能不用jar就不用jar,所以还不如自己去写java bean方便

【在 b***i 的大作中提到】
: 要不,你申请个付费的,加大内存到512M看能不能用spring?
b***i
发帖数: 3043
47
嗨,我以为啥问题呢。还是付费就可以的,免费的叫on demand,没人用就关掉。付费
的可以让它一直运行着,不久好了。
你说的jar是啥?不是jar是啥?

【在 z*******3 的大作中提到】
: 内存不是问题,现在用的免费的内存就够用
: 问题在于如果一定时间不用的话,你的application就会被关掉
: 然后有新的request过来,才会重新启动application
: spring每次启动都很慢,这是主要问题
: 而且appengine的速度跟jar的数量多少有关
: 能不用jar就不用jar,所以还不如自己去写java bean方便

z*******3
发帖数: 13709
48
jar就是你要用到的类库
你用spring什么不可能不用jar的
但是只要用上了jar,appengine的响应速度就会下降
所以能不用就不用,连jsp都不用
因为jsp要用6个jar,会明显拖慢速度
建议用freemarker,这个只有1个jar

【在 b***i 的大作中提到】
: 嗨,我以为啥问题呢。还是付费就可以的,免费的叫on demand,没人用就关掉。付费
: 的可以让它一直运行着,不久好了。
: 你说的jar是啥?不是jar是啥?

b***i
发帖数: 3043
49
我还是不知道spring是干嘛的。还有那个古老的struts

【在 z*******3 的大作中提到】
: jar就是你要用到的类库
: 你用spring什么不可能不用jar的
: 但是只要用上了jar,appengine的响应速度就会下降
: 所以能不用就不用,连jsp都不用
: 因为jsp要用6个jar,会明显拖慢速度
: 建议用freemarker,这个只有1个jar

g*****g
发帖数: 34805
50
所有的PAAS,现在都不成气候。以AWS为代表的IAAS才是最普遍的部署模式。
IAAS上spring当然可以用,俺team里几乎所有的项目都用spring,都部署在AWS上。事
实上Cloud是典型的机器弱,机器多的模式,基本上没有人会用收费的ejb container。
jboss用的人恐怕都很少。

【在 z*******3 的大作中提到】
: red hat用的cloud产品是open shift
: https://openshift.redhat.com/community/developers/pricing
: 完全兼容主流的open source产品
: jboss, postgresql什么都在呢
: 就是比较贵,需要114刀一个月,适合企业用
: 我又看了一下vmware的cloud
: 被吓到了,基础的要7000多刀一个月,天哪
: http://www.vmware.com/products/datacenter-virtualization/vcloud
: 果然很贵,看来以后ejb3会越来越多人用了
: spring这样搞,谁有办法在cloud上用啊

相关主题
Which Web service is better EJB or RPCJava,EJB的performance
大家都是搞技术的ejb 3.1 seems very promising...
请问一个问题谁来给简单的讲讲JAAS
进入Java版参与讨论
b***i
发帖数: 3043
51
JSP要用哪6个?我现在用jsp了,但不是必须的。我以为挺方便呢。

【在 z*******3 的大作中提到】
: jar就是你要用到的类库
: 你用spring什么不可能不用jar的
: 但是只要用上了jar,appengine的响应速度就会下降
: 所以能不用就不用,连jsp都不用
: 因为jsp要用6个jar,会明显拖慢速度
: 建议用freemarker,这个只有1个jar

z*******3
发帖数: 13709
52
struts是把程序员从手写servlet的恶梦中解救出来,释放到pojo的天然环境中去
你现在要写doget和dopost,但是如果用了struts
你就可以不需要写这两个方法了,剥离了继承
其实我个人觉得这点改进并不明显,尤其是在早期的struts版本中
后期好点,无所谓了,反正现在用的人少了
至于spring,这个搜索一下就有,比如这个
http://www.myexception.cn/j2ee/12825.html

【在 b***i 的大作中提到】
: 我还是不知道spring是干嘛的。还有那个古老的struts
z*******3
发帖数: 13709
53
你没发现在deploy时候eclipse会先扫描一下是否有jsp文件嘛?
http://www.listry.com/blog/2010/03/google-app-engine-cold-start
这个我也是网络上看来的,但是从我添加spring的感觉看
的确jar越多越慢,哪怕我不用它也慢,加到20个的时候就有些无法忍受了
我删了ar后,速度快了
动态页面一定是比静态页面要慢的
ddos之类的也是针对动态页面以及servlet做攻击
如果你用html等静态页面,攻击的成本会翻倍上去
所以能不用jsp等动态页面就不用,用的话也有限考虑php
如果你的页面变动不是那么大的话,可以用ajax+servlet来部分刷新页面
jquery等有现成的工具,但是again,jar越多越慢
所以估计要自己写ajax

【在 b***i 的大作中提到】
: JSP要用哪6个?我现在用jsp了,但不是必须的。我以为挺方便呢。
z*******3
发帖数: 13709
54
paas更多的是针对楼主这样的小业主吧
只要提供了p,就会设下陷阱,提供私货
大多数人很容易上当,尤其是没有实际经验的
时间一久,就离不开了,哪怕将来有更好的平台服务提供商
为了节省迁移的成本,可能也就不去用了
世界上没有免费的午餐,迟早都得还回去的

【在 g*****g 的大作中提到】
: 所有的PAAS,现在都不成气候。以AWS为代表的IAAS才是最普遍的部署模式。
: IAAS上spring当然可以用,俺team里几乎所有的项目都用spring,都部署在AWS上。事
: 实上Cloud是典型的机器弱,机器多的模式,基本上没有人会用收费的ejb container。
: jboss用的人恐怕都很少。

z*******3
发帖数: 13709
55
我推荐你用freemarker,这个很好用
我们几个m的并发量,都用这个来做东西,包括email,html,xml什么的
jsp真的是很烂

【在 b***i 的大作中提到】
: JSP要用哪6个?我现在用jsp了,但不是必须的。我以为挺方便呢。
b***i
发帖数: 3043
56
看起来不错,我先用servlet把这堆东西搞起来,先得知道我到底需要什么。然后我试
试这个。

【在 z*******3 的大作中提到】
: 我推荐你用freemarker,这个很好用
: 我们几个m的并发量,都用这个来做东西,包括email,html,xml什么的
: jsp真的是很烂

b***i
发帖数: 3043
57
现在有GAE这样全面的平台吗?基本上变成了java计算机了。以后出java芯片指日可待。
GAE不仅有页面方面的所谓front side,还有长期运行的back end,可以连续运行,就
是比AWS贵。front side页面必须在30秒内返回,好象。back end的程序可以连续执行
。我感觉GAE这个模型比AWS的云的颗粒更细小,更象雾。可以叫雾计算。高手可以搞
AWS,我这种入门级别的就只能GAE了。Zhao兄说得对,GAE就是app的引擎,是给
android上的app用的。

【在 z*******3 的大作中提到】
: paas更多的是针对楼主这样的小业主吧
: 只要提供了p,就会设下陷阱,提供私货
: 大多数人很容易上当,尤其是没有实际经验的
: 时间一久,就离不开了,哪怕将来有更好的平台服务提供商
: 为了节省迁移的成本,可能也就不去用了
: 世界上没有免费的午餐,迟早都得还回去的

z*******3
发帖数: 13709
58
paas的都是啊
比如openshift
现在唯一的问题就在于google提供的平台上的api不规范
全部交给google
可以肯定可以
但是一旦跟google闹翻
要换恐怕不那么容易
而且google提供的免费功能也的确是很有限
稍微东西一多就要收费了,先用着了
有个免费的servlet容器也不是什么坏事,至少可以测试页面什么的
最近倒腾了一下css,觉得css和attribute真是好东西
而且很多功能跟javascript开始重叠
比如input的一些校验功能,type="email"这种
我看好css逐步替换掉javascript的validation
本来在客户端用javascript做validation就是不合理的
因为一来影响客户体验,javascript慢
css的实现则是通过发布标准,然后所有浏览器去implement,这样合理很多
二来就算客户端校验了,为了安全,服务器端还是要校验
所以唯一的好处就在于那么一点客户体验,很不值得
等css3出来之后,这些东西肯定都会被搞定的,哦也

待。

【在 b***i 的大作中提到】
: 现在有GAE这样全面的平台吗?基本上变成了java计算机了。以后出java芯片指日可待。
: GAE不仅有页面方面的所谓front side,还有长期运行的back end,可以连续运行,就
: 是比AWS贵。front side页面必须在30秒内返回,好象。back end的程序可以连续执行
: 。我感觉GAE这个模型比AWS的云的颗粒更细小,更象雾。可以叫雾计算。高手可以搞
: AWS,我这种入门级别的就只能GAE了。Zhao兄说得对,GAE就是app的引擎,是给
: android上的app用的。

z*******3
发帖数: 13709
59
看了这个列表,就大概知道为什么ie没人用了
对标准的支持严重滞后
http://www.w3schools.com/tags/tag_input.asp
z*******3
发帖数: 13709
60
appengine里面的httpservlet不正常
虽然还是abstract class
但是把doget和dopost给实现了
嗯,有趣啊,也就是说这个servlet其实可以不用定义成abstract
可能只是为了保留原来的一些属性而已
其实本身的httpservlet就是一个prototype
继承后可以直接使用
相关主题
j2ee without EJB搞不懂为什么hibernate为什么这么流行?
vaadin如何学spring和hibernate
java的东西好多入门问题:以Spring+JPA开发back end,那么表现层只能用jsp吗?
进入Java版参与讨论
z*******3
发帖数: 13709
61
tutorial:
http://shulgadim.blogspot.com.au/2012/01/simple-java-mvc-for-go
freemarker有gae专用版本
http://freemarker.org/freemarkerdownload.html
还有中文专用说明书哦
简直就是为楼主你这样的人量身定做的
b***i
发帖数: 3043
62
我觉得我需要的就是这样的模板。我要做的网站非常简单,就是实现一个文件系统,然
后用户可以登录,看到自己的一些信息,能够访问文件。所以对我这种应用来说,没什
么迁移的困难。就1个月的事,对高手来说。我现在文件系统设计了2个星期,基本成形
,主要是平滑升级,就是用户开始访问A版本的文件,我更新到B,他session结束前访
问的其他文件都是A版本的,但是别的用户在 我更新完后开始访问就直接访问B版本。
就是这么 个东西,就是我的核心了。最适合GAE和freemarker了。我还担心Freemarker
会不会太大了,因为页面里面各种逻辑,函数什么的我可能都不需要,放java里面不会
快一点?也许列表循环可以用一下。

【在 z*******3 的大作中提到】
: tutorial:
: http://shulgadim.blogspot.com.au/2012/01/simple-java-mvc-for-go
: freemarker有gae专用版本
: http://freemarker.org/freemarkerdownload.html
: 还有中文专用说明书哦
: 简直就是为楼主你这样的人量身定做的

z*******3
发帖数: 13709
63
遵循了jpa标准蛮好
至少持久化对象不需要象以前那么麻烦去实现了
以前又是dao又是repository又要写xml的
麻烦
z*******3
发帖数: 13709
64
gwt是一个额外的东西
validation要上去的话,要额外5个jars
比较麻烦,看来要手写validation了
z*******3
发帖数: 13709
65
对于gae来说
有一个超轻量级的类似spring一样的东西
叫做google guice
我用的是guice-3.0-no_aop.jar
为了减少jar包数量,就用这个最好了
这个只有额外的一个jar,原来框架有一堆的jars
所以还是用这个就好了,麻烦的就是不能用aop
如果要用aop的话,那还不如直接上spring算了
我就用guice no aop版本做了一个beam的管理出来
认真看了看annotation,果然,还是老样子
又塞了一堆的私货,哪怕是这么小的东西
统统不用,只用标准的annotation
hoho
现在就剩下validation没有超轻量级的框架可以用了
用guice替代spring
用自带的jpa替代hibernate
用freemarker替代jsp
如果能找到一个超轻量级的validation就好了
在想要不然我自己写一个算了
z*******3
发帖数: 13709
66
guice下载地址
http://code.google.com/p/google-guice/downloads/list
标准的annotation都在javax.inject这个包里面
什么@Inject都可以跟google发布的替换着用
所以建议不要用com.google下面的annotation
用标准的东西,spring和ejb都支持@Inject
将来要换的话,写一个beans.xml就行了,容器会自动读取
在guice里面因为轻量级考虑,能写在代码里面就写在代码里面
所以xml最好不用,jar也最好减少,所以要自己写module
多了一小步
z*******3
发帖数: 13709
67
gae是一个不错的锻炼平台啊
各种优化,挺考验基本功
z*******3
发帖数: 13709
68
对于gae来说
validation一般有三种选择,jsr303标准
第一种是用validation in gwt,那么这个其实用的是hibernate validation
配置简单点,跟gwt集成
第二种是自己去搞其他jar包,包括hibernate validation
不集成
第三种是用gwt-validation这个超轻量级的东西
也只有一个jar
http://code.google.com/p/gwt-validation/
hoho
这样validation一个jar
guice一个jar
和freemarker一个jar
三个jar,就把一个小型的j2ee搞出来鸟
麻雀虽小,五脏俱全
该有的也都有了
z*******3
发帖数: 13709
69
validation貌似还是不行
明天再试试
guice是一个比较新的框架
所以默认每一次getinstance的时候
都会新生成一个对象,因为随着时间的进步
虚拟机生成对象已经没有以前那么慢了
所以只要不读取xml之类的,速度还都可以接受
基本上guice就是一个写好的factory
直接用就行了
spring则是默认是singleton
每一次得到的都是同样的对象
z*******3
发帖数: 13709
70
发现用了jpa之后很慢
看来跟jsp一样,也是被加了私货
我打算用objectify
http://code.google.com/p/objectify-appengine/wiki/BestPractices
相关主题
入门问题:以Spring+JPA开发back end,那么表现层只能用jsp吗?webservices products
Questions on EJB3 Persistence/HibernateOpenShift怎么上数据库?
guice, spring和ejb[合集] 这个annotation,...
进入Java版参与讨论
b***i
发帖数: 3043
71
我就直接put,有这么难吗?为嘛要jpa?

【在 z*******3 的大作中提到】
: 发现用了jpa之后很慢
: 看来跟jsp一样,也是被加了私货
: 我打算用objectify
: http://code.google.com/p/objectify-appengine/wiki/BestPractices

z*******3
发帖数: 13709
72
主要是因为jpa是标准,为了将来迁移考虑
精简了jpa那一堆的jar后
感觉还是有点问题
因为一个是启动servlet环境慢,大概要3s左右
另外一个是启动guice框架慢,大概要4-5s左右
网络上看了下,都差不多
想了想,要么自己去处理jar,把所有jar全部拆开
然后再打成一个jar,同时还要自己写ant
麻烦,而且以后变通也不太容易
算了,就这样吧,把启动servlet和启动guice的部分拆开
分成两步走,第一步先启动servlet环境和freemarker
第二步再启动guice和objectify
这样第一步最多4s,第二步精简到2s
启动之后就无所谓了

【在 b***i 的大作中提到】
: 我就直接put,有这么难吗?为嘛要jpa?
b***i
发帖数: 3043
73
启动servlet,是说1分钟不访问,idle了,然后启动是吗?那就换付费的,可以一直开
着。
guice,这个不清楚。我猜测一下,你是否可以压缩jar?能快吗?还是会更慢?是GWT的
?我不用GWT,就是直接用serlet,html。开始学习本来应该12年前学的东西。

【在 z*******3 的大作中提到】
: 主要是因为jpa是标准,为了将来迁移考虑
: 精简了jpa那一堆的jar后
: 感觉还是有点问题
: 因为一个是启动servlet环境慢,大概要3s左右
: 另外一个是启动guice框架慢,大概要4-5s左右
: 网络上看了下,都差不多
: 想了想,要么自己去处理jar,把所有jar全部拆开
: 然后再打成一个jar,同时还要自己写ant
: 麻烦,而且以后变通也不太容易
: 算了,就这样吧,把启动servlet和启动guice的部分拆开

z*******3
发帖数: 13709
74
我觉得没有换付费的,如果流量没达到的话
现在主要是启动servlet环境和guice两个东西比较慢
就好比启动tomcat和spring会比较慢一样
freemarker和objectify还行
我回来试了一下,启动大概是6s总共
鉴于启动servlet容器都要4s,所以再优化的空间也有限
先这样吧,把6s分成4s和2s,我觉得可以接受
对于jar包,你可以把所有的jars全部拆开,然后重新打成1个jar
这样说是会快,但是eclipse的plugins就不支持了
要自己去写ant,比较恶心,算了,没有必要
我没有用gwt,gwt-dispatch跟jsf有点像,command模式
先不用了,要缴费什么的,那也等流量上去了再说

【在 b***i 的大作中提到】
: 启动servlet,是说1分钟不访问,idle了,然后启动是吗?那就换付费的,可以一直开
: 着。
: guice,这个不清楚。我猜测一下,你是否可以压缩jar?能快吗?还是会更慢?是GWT的
: ?我不用GWT,就是直接用serlet,html。开始学习本来应该12年前学的东西。

z*******3
发帖数: 13709
75
就这样了,一个超轻量级的框架
freemarker-gae + guice + objectify
对应了
jsp + spring + hibernate
其实选择越来越多
微型用户,比如楼主这样的,就用google
稍微大一点的中小型用户,可以用red hat和vmware
再大了的大型用户,就可以用ibm或oracle
这样一个成长的轨迹
google提供了一堆微型框架
都是轻量级的,讲究启动时间快的玩意
大一点之后用red hat或者vmware
这两个一个有jboss一个有spring
难说哪个更重一点
我看可以
z*******3
发帖数: 13709
76
第一次玩微型的系统
hoho,蛮有趣的
z*******3
发帖数: 13709
77
用guice的好处主要是为了将来用spring
标准的annotation,比如@inject这种
guice, spring和ejb都通用
guice和spring的区别就在于
spring可以用beans.xml,也可以扫描文件的annotation
但是guice要硬编码,就很像自己写的factory
所以单纯用guice其实优化不了多少
可能还没有我自己去写快,但是唯一牺牲的就是启动的那2s时间
算了,我觉得值得
z*******3
发帖数: 13709
78
从小到大提供的服务
google->red hat/vmware->ibm/oracle
objectify->hibernate->websphere/weblogic
guice->spring/jboss->websphere/weblogic
appengine->tomcat->websphere/weblogic
还有db和os
另外,jboss其实也包括了hibernate和tomcat
j2ee这部分东西比较多,多个公司提供多个产品
然后在不同产品上挂上相同的标签,就容易引发混乱
z*******3
发帖数: 13709
79
速度跟编译的jdk版本也有关系
如果是6,会慢1s
如果在家里搞,我自己用7,会快一点
z*******3
发帖数: 13709
80
更新了一下下
今晚找到比较好看的icon了
放了一个上去
http://mysticalscenario.appspot.com/
准备得差不多了
下面可以开始准备做实际功能了
相关主题
play有啥好处?大家都是搞技术的
Google App Engine顽固错误跪求解决办法请问一个问题
Which Web service is better EJB or RPCJava,EJB的performance
进入Java版参与讨论
b***i
发帖数: 3043
81
一个问题啊,
向datastore写入一个entity,能否出现这样一个情况,我写的entity.name="
AABBCCEEED",然后我再次写"XXXXXXXXXXX",一个用户读的时候能否读到各占一半的时
候,就是XXXXXXXEEED?还是说datastore对一个entity永远是atomic的?是不是数据库
都是这样?只是多个entity的时候需要transaction?

【在 z*******3 的大作中提到】
: 更新了一下下
: 今晚找到比较好看的icon了
: 放了一个上去
: http://mysticalscenario.appspot.com/
: 准备得差不多了
: 下面可以开始准备做实际功能了

z*******3
发帖数: 13709
82
数据读写的并发控制的问题
这个应该没有什么问题的
这要是都不行,那没得搞了

【在 b***i 的大作中提到】
: 一个问题啊,
: 向datastore写入一个entity,能否出现这样一个情况,我写的entity.name="
: AABBCCEEED",然后我再次写"XXXXXXXXXXX",一个用户读的时候能否读到各占一半的时
: 候,就是XXXXXXXEEED?还是说datastore对一个entity永远是atomic的?是不是数据库
: 都是这样?只是多个entity的时候需要transaction?

z*******3
发帖数: 13709
83
datastore里面不提供unique index
其他人建议要unique的字段变成pk
但是我的做法是这样
我首先让所有跟datastore里面打交道的dao class统统singleton掉
这个在guice里面很容易实现,用.in(Singleton.class)就好了
如果自己写的话,用enum可以很容易实现
http://www.vogella.com/articles/GoogleAppEngineJava/article.htm
然后再在外面写一层service类以调用这些dao
也同样对这些service类singleton
然后再对于需要检查数据库中不存在后再create的方法
做synchronized
这样保证检查和插入是线程安全的,排除了并发的干扰
这样就可以不用transaction了
在程序这一层控制事务,而不是依赖datastore
z*******3
发帖数: 13709
84
我现在只有很少数的功能需要用到unique
其实包括发帖什么的这些功能其实都可以不用unique
只有用户注册这种需要用到unique index
其他都还好,所以我打算抛弃transaction
用了transaction也是一堆的事要做
b***i
发帖数: 3043
85
只有一个instance肯定可以这样做。但是,如果gae给你开了10个instance,还能
synchronize吗?我感觉玄啊。

【在 z*******3 的大作中提到】
: datastore里面不提供unique index
: 其他人建议要unique的字段变成pk
: 但是我的做法是这样
: 我首先让所有跟datastore里面打交道的dao class统统singleton掉
: 这个在guice里面很容易实现,用.in(Singleton.class)就好了
: 如果自己写的话,用enum可以很容易实现
: http://www.vogella.com/articles/GoogleAppEngineJava/article.htm
: 然后再在外面写一层service类以调用这些dao
: 也同样对这些service类singleton
: 然后再对于需要检查数据库中不存在后再create的方法

z*******3
发帖数: 13709
86
你可以让一个instance专门做注册,其他的instance做其他事情

【在 b***i 的大作中提到】
: 只有一个instance肯定可以这样做。但是,如果gae给你开了10个instance,还能
: synchronize吗?我感觉玄啊。

z*******3
发帖数: 13709
87
楼主有个问题问你
如果你打算收费的话
这个钱用什么方式收费?
paypal还是visa等信用卡?
貌似美帝那边如果要有一个merchant account的话
需要注册一个公司
g*****g
发帖数: 34805
88
This will work only if you have one instance and you don't need high
concurrency write on that table. The better way is to use UUID as the key.

【在 z*******3 的大作中提到】
: datastore里面不提供unique index
: 其他人建议要unique的字段变成pk
: 但是我的做法是这样
: 我首先让所有跟datastore里面打交道的dao class统统singleton掉
: 这个在guice里面很容易实现,用.in(Singleton.class)就好了
: 如果自己写的话,用enum可以很容易实现
: http://www.vogella.com/articles/GoogleAppEngineJava/article.htm
: 然后再在外面写一层service类以调用这些dao
: 也同样对这些service类singleton
: 然后再对于需要检查数据库中不存在后再create的方法

b***i
发帖数: 3043
89
象我这种连ssl都买不起的,就只能paypal, amazon, google checkout,还有掏宝了。
当然,就是这样,我觉得都得办个公司。要不别人sue我,我就破产了。

【在 z*******3 的大作中提到】
: 楼主有个问题问你
: 如果你打算收费的话
: 这个钱用什么方式收费?
: paypal还是visa等信用卡?
: 貌似美帝那边如果要有一个merchant account的话
: 需要注册一个公司

z*******3
发帖数: 13709
90
刚把gwt一脚踢出俺的appengine
速度立马快上2s
之前用向导创建项目
没有注意google给塞的私货gwt
昨天重新建了一个新项目
把gwt给踢出去,现在整个速度快了不少
相关主题
ejb 3.1 seems very promising...vaadin
谁来给简单的讲讲JAASjava的东西好多
j2ee without EJB搞不懂为什么hibernate为什么这么流行?
进入Java版参与讨论
z*******3
发帖数: 13709
91
objectify4一直没有出来
期待最新版本的发布
3.1用得不能说不好
但是他们文档都已经更新到4了
b***i
发帖数: 3043
92
我现在就直接用datastore.put来放文件。我做了一个后台文件系统,可以放目录,可
以放版本,可以放文件。不知道spring是不是也是干这个用的?

【在 z*******3 的大作中提到】
: objectify4一直没有出来
: 期待最新版本的发布
: 3.1用得不能说不好
: 但是他们文档都已经更新到4了

z*******3
发帖数: 13709
93
不是,spring是管理bean的
建议你用上guice,具体写几个类之后就知道了

【在 b***i 的大作中提到】
: 我现在就直接用datastore.put来放文件。我做了一个后台文件系统,可以放目录,可
: 以放版本,可以放文件。不知道spring是不是也是干这个用的?

b***i
发帖数: 3043
94
bean有点象dll吧?或者说是COM?activeX?
我有大约10-20个页面要写,需要spring吗?

【在 z*******3 的大作中提到】
: 不是,spring是管理bean的
: 建议你用上guice,具体写几个类之后就知道了

z*******3
发帖数: 13709
95
我对dll什么不熟
bean就是普通的.class对象
你自己写的那些
guice这些框架的好处就在于可以控制这些bean的数量
一般来说常用的spring, guice都是singleton
一个就搞定
不排除有一些会有额外的对象
但是一般都只有1个
ejb除非声明是singleton
否则stateless都是每一个线程独占的
换句话说就是每一个stateless ejb只能被一个线程同时访问
singleton的就是无数个并发

【在 b***i 的大作中提到】
: bean有点象dll吧?或者说是COM?activeX?
: 我有大约10-20个页面要写,需要spring吗?

b***i
发帖数: 3043
96
我明白了,文件系统是hibernate的事情,数据persistence

【在 z*******3 的大作中提到】
: 不是,spring是管理bean的
: 建议你用上guice,具体写几个类之后就知道了

z*******3
发帖数: 13709
97
用了session会有私货
appengine会在datastore里面塞_ah_session
要定期清理
官方给的是用cron+servlet来搞
我看看能不能用task来做
z*******3
发帖数: 13709
98
游戏里面转职怎么说?
我现在用国际象棋的棋子临时当一下职业图标
b***i
发帖数: 3043
99
完成了网页servlet的初步设计,现在调入一个网页,从servlet进入到网页render完成
,共3秒多。其中包括2个mp3, 3个jpg/png图片,一些javascript文件,一些文字,共
695KB。这个时间有点多,基本是从datastore/memcache里面读文件内容然后返回。下
面准备从blob直接返回看是否会快。

【在 z*******3 的大作中提到】
: 用了session会有私货
: appengine会在datastore里面塞_ah_session
: 要定期清理
: 官方给的是用cron+servlet来搞
: 我看看能不能用task来做

1 (共1页)
进入Java版参与讨论
相关主题
j2ee without EJBwebservices products
vaadinOpenShift怎么上数据库?
java的东西好多[合集] 这个annotation,...
搞不懂为什么hibernate为什么这么流行?play有啥好处?
如何学spring和hibernateGoogle App Engine顽固错误跪求解决办法
入门问题:以Spring+JPA开发back end,那么表现层只能用jsp吗?Which Web service is better EJB or RPC
Questions on EJB3 Persistence/Hibernate大家都是搞技术的
guice, spring和ejb请问一个问题
相关话题的讨论汇总
话题: ejb话题: spring话题: jar话题: hibernate话题: gae