首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaEE6 DAO:应该是@Stateless还是@ApplicationScoped?

在JavaEE6中,DAO(数据访问对象)应该使用@Stateless注解而不是@ApplicationScoped。

@Stateless注解表示DAO是一个无状态的EJB(Enterprise Java Bean),它可以在多个客户端之间共享,并且可以在不同的应用服务器之间进行远程调用。这种设计模式可以提高性能和可扩展性,并且可以更好地管理事务。

相比之下,@ApplicationScoped是CDI(Contexts and Dependency Injection)注解,它用于定义应用程序范围的组件。这种组件在整个应用程序中只有一个实例,并且可以被注入到其他组件中。然而,这种设计模式可能会导致状态管理的问题,并且可能不适合用于DAO。

总之,JavaEE6中的DAO应该使用@Stateless注解,以便更好地管理事务并提高性能和可扩展性。

推荐的腾讯云相关产品:

  1. 腾讯云容器服务:提供弹性、可扩展的容器解决方案,支持Docker容器和Kubernetes集群。
  2. 腾讯云数据库:提供MySQL、PostgreSQL、MongoDB等多种数据库服务,支持自动备份和恢复、读写分离等功能。
  3. 腾讯云应用加速:提供CDN(内容分发网络)服务,加速全球访问速度,降低服务器负载。

产品介绍链接地址:

  1. 腾讯云容器服务:https://cloud.tencent.com/product/ccs
  2. 腾讯云数据库:https://cloud.tencent.com/product/cdb
  3. 腾讯云应用加速:https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

quarkus依赖注入之一:创建bean

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于依赖注入 对一名java程序员来说,依赖注入应该是个熟悉的概念...; @ApplicationScoped public class ClassAnnotationBean { public String hello() { return...运行服务,再用浏览器访问classannotataionbean接口,肉眼判断返回内容是否符合要求,这样虽然可行,但总觉得会被嘲讽低效… 还是写一段单元测试代码吧,如下所示,注意要用QuarkusTest...IDEA,也可以用它的图形化工具执行测试,如下图,能得到更丰富的测试信息 掌握了最基础的实例化方式,接着看下一种方式:修饰在方法上 创建bean实例:注解修饰在方法上 下一种创建bean的方式,我们还是先看...这样的作用域注解,那么Produces可以省略掉,写成下面这样也是正常运行的 public class MethodAnnonationBean { @ApplicationScoped

1.1K50

quarkus依赖注入之六:发布和消费事件

发送事件的代码还是写在MyPorducer.java,如下,有两处要注意的地方稍后提到 public int asyncProduce(String source) { MyEvent...发送事件的线程不会等待,所以myEvent实例的计数器在消费线程还没来得及加一,myProducer.asyncProduce方法就已经执行结束了,返回值是0,所以单元测试的assertEquals位置,期望值应该是...,普通用户也发送XXX类型的事件,消费者应该是处理普通用户事件的方法,简单的说就是同一个数据结构的事件可能用在不同场景,如下图 从技术上分析,实现上述功能的关键点是:消息的消费者要精确过滤掉不该自己消费的消息....fire(event); return event.getNum(); } } 上述发送消息的代码,有以下两处需要注意 不论是Admin事件还是...两种消息发送方式并无区别 事件元数据 在消费事件时,除了从事件对象中取得业务数据(例如MyEvent的source和consumeNum字段),有时还可能需要用到事件本身的信息,例如类型是Admin还是

56450
  • quarkus依赖注入之四:选择注入bean的高级手段

    ,用MyQualifier修饰HelloQualifier类型的成员变量,这样成员变量就会被注入HelloQualifierA实例 仅凭文字描述,很难把信息准确传递给读者(毕竟欣宸文化水平极其有限),还是写代码实现上述场景吧...; @ApplicationScoped public class HelloQualifierA implements HelloQualifier { @Override public...} HelloPriority的第二个实现类HelloPriorityC,可见Priority属性值是1003,代表选择的时候优先级比HelloPriorityA和HelloPriorityB更高 @ApplicationScoped...String hello() { return this.getClass().getSimpleName(); } } 接下来是单元测试,验证注入的bean是否符合预期,理论上注入的应该是优先级最高的...; @ApplicationScoped public class HelloInstanceA implements HelloInstance { @Override public

    84250

    quarkus依赖注入之十:学习和改变bean懒加载规则

    编码体验懒加载 改变懒加载规则的第一种手段 改变懒加载规则的第二种手段(居然和官方资料有出入) 小结 关于懒加载(Lazy Instantiation) CDI规范下的懒加载规则: 常规作用域的bean(例如ApplicationScoped...),在注入时就会实例化 quarkus也遵循此规则,接下来编码验证 编码验证懒加载 为了验证bean的懒加载,接下来会写这样一些代码 NormalApplicationScoped.java:作用域是ApplicationScoped...,这样消费事件的bean就会实例化 咱们给NormalApplicationScoped增加下图红框中的代码,让它消费StartupEvent事件 运行代码前,先预测一下修改后的结果 首先应该是...NormalApplicationScoped代理、NormalSingleton, 上述推测的依据来自Startup源码中的注释,如下图,官方表示StartupEvent和Startup效果一致 官方都这么说了,我岂敢不信,不过流程还是要完成的...,也就是说,下面这段代码中,ApplicationScoped注解写不写都一样 @ApplicationScoped @Startup public class NormalApplicationScoped

    58920

    quarkus依赖注入之三:用注解选择注入bean

    SelectBeanConfiguration { @LookupIfProperty(name = "service.alpha.enabled", stringValue = "true") @ApplicationScoped...service.alpha.enabled,所以,理论上SelectBeanConfiguration.tryLookupIfPropertyAlpha方法应该会执行,也就是说注入的TryLookupIfProperty应该是...SelectBeanConfiguration.tryLookupIfPropertyBeta方法应该会执行,实例化的应该就是TryLookupIfPropertyBeta,那么本次单元测试就不能通过了 如下图,果然,注入的实例变成了TryLookupIfPropertyBeta,但是预期的还是之前的...SelectBeanConfiguration { @LookupIfProperty(name = "service.alpha.enabled", stringValue = "true") @ApplicationScoped...尽管service.alpha.enabled不存在,但lookupIfMissing属性起了作用,SelectBeanConfiguration.tryLookupIfPropertyAlpha方法还是执行了

    73340

    并发编程-什么是线程安全?

    如果一个对象被正确的实现,那么无论你是调用它的public方法还是读写public fields都不会违背它的任何不变性以及后置条件(post conditions)。...一个线程安全的类的instance(实例)无论是在串行和并行的情况下都应该是坚挺的。(ps:就是说一个线程安全的类在任何情况下都应该是表现正常的。)...StatelessFactorizer就像大多数的servlets一样,无状态,也就是stateless:什么样的类是stateless类呢?就是没有fields,没有引用其他类的fields的类。...由于访问一个stateless的对象的线程的各种操作并不会影响到其他的线程操作的正确性,所以只要是stateless对象都一定是线程安全的。...stateless对象一定是线程安全的 事实上大多数servlets都是无状态的,这就减轻了我们确保servlet线程安全的负担。

    82270

    从一个 issue 修复看运维人员和资深程序员的思维碰撞

    后来还是重看代码,发现是key_func 函数中因为测试脚本不符合规则,引起返回出错代码造成的。...https://github.com/datafuselabs/datafuse/blob/master/tests/suites/0_stateless/README.md 于是我给的修复提示:May...Please revise your file naming format. refer to: cat suites/0_stateless/README.md Test Name xx_yyyy_[...Sunndy 观点:程序应该是健状的。这个程序设计上不合理。主要有两个原因: 函数返回值,不管是什么地方都应该是一样的。这种方式的函数在 rust 直接都编译不过。所以需要把先这个函数修复。...哈,忽然感觉运维人员的思维和开发人员,想的还是不太一样。从运维的人员思维就是遇到不能处理的,就报错停下来就行;开发人员可能追求的更加完美。

    41720

    quarkus依赖注入之九:bean读写锁

    可以用写锁加锁,这样所有做读操作对象的线程,在获取读锁时就会block住,直到写锁释放 为了演示bean锁的效果,咱们先来看一个经典的多线程同步问题,如下图,余额100,充值10块,扣费5块,正常情况下最终余额应该是...package com.bolingcavalry.service.impl; import io.quarkus.logging.Log; import javax.enterprise.context.ApplicationScoped...; @ApplicationScoped public class AccountBalanceService { // 账户余额,假设初始值为100 int accountBalance...上述代码中,有以下几点需要注意 在主线程中新增了三个子线程,分别执行查询、充值、扣费的操作,可见deposit和deduct方法是并行执行的 初始余额100,充值一共20元,扣费一共10元,因此最终正确结果应该是...get方法可以被调用,而且可以多线程同时调用,因为每个线程都能顺利拿到读锁 一旦deposit或者deduct被调用,其他线程在调用deposit、deduct、get方法时都被阻塞了,因为此刻不论读锁还是写锁都拿不到

    49530

    java从入门到精通二十八(Spring注解开发)

    先创建一个接口,放在dao层,然后创建sevice包,在这里我们创建接口service继承dao,然后在改包下创建impl,里面创建类来实现sevice接口类。...例如这样,我们上面的代码与此类似 然后呢,我们还是需要去spring 的配置文件配置一下。你要开启包扫描 <?xml version="1.0" encoding="UTF-8"?...方便我们后期在编写类的时候能很好的区分出这个类是属于表现层、业务层还是数据层的类。 注解改造spring配置文件 首先将原来的配置文件删掉。因为实在太麻烦。或者你可以注销掉。...无状态对象(Stateless Bean),就是没有实例变量的对象 .不能保存数据,是不变类,是线程安全的。...实际开发我们的dao层一般是不会直接去写实现。我们这里主要来看注入效果。

    25730

    Spring在单例模式下的线程安全

    无状态对象(Stateless Bean),就是没有实例变量的对象 ,不能保存数据是不变类,是线程安全的。...但用的最多的还是singleton单态与prototype多态。 singleton表示该bean全局只有一个实例,Spring中bean的scope默认也是singleton。...DAO对象必须包含一个数据库的连接Connection,而这个Connection不是线程安全的,所以每个DAO都要包含一个不同的Connection对象实例,这样一来DAO对象就不能是单实例的了。...对的是“每个DAO都要包含一个不同的Connection对象实例”这句话,错的是“DAO对象就不能是单实例”。...当然,这个例子本身很粗糙,将Connection的ThreadLocal直接放在DAO只能做到本DAO的多个方法共享Connection时不发生线程安全问题,但无法和其它DAO共用同一个Connection

    98110

    近两年来大家都觉得要火,却还没火起来的潜力赛道

    过去的几个月,无论是龙头DYDX,还是龙二Perp,龙三Mcdex, token价都是一泻千里,反倒只有GMX一枝独秀,稳涨缓跌。...还是另有其因? 感觉原因同样有下面2个: 暂时,对于大多数用户来说,真的不需要。...记得V神之前提到过,隐私,更应该是一个功能,而不是一个token,或是一条链,我们应该在未来的公链,或是Defi项目上把他做成一个用户可以开启的可选项,而不是为了隐私而隐私,单独再去发个token,做条链...在我看来,隐私最应该做成的,应该是Link或者Graph的样子。 就是一个对于对用户来说无感,各个链或是其他项目方都可以选择接入或是合作的中间件。...但说归说,这俩在2022年还是一定程度上相当可期的。

    25830

    区块链技术与应用07 北大肖臻

    如果和大多数人意见不合,拆分DAO(Split DAO),得到child DAO,投资者取回投资和收益的唯一途径。拆分之前有七天的辩论期,拆分之后有28天的锁定期。...正确的操作顺序应该是先把账户清零再转账,黑客就是利用了这个漏洞进行的攻击。黑客转走了五千万美元的以太币,一共资产才一个多亿以太币。 image.png Too big to fail....现在还是两条链新链旧链并存。后来给两条链加了chainID了。 为什么锁定The DAO的所有账户,而不只是黑客的账户?...这里不能只锁定黑客的账户,因为如果这么做,后来的黑客还是可以利用这个 split DAO的 bug 再次攻击。...开源的,本应该很多人都看,本应该是安全的,但是实际上很少人去仔细看,能看懂的也很少。 What does decentralization mean?

    96100

    项目中 Dao,Service,Controller,Util,Model 是什么意思,为什么划分?

    好的结构应该是通用的。 好的结构应该是有明确定义的。 这其实就是所谓的脚手架提供的最大的价值,一般而言,Java,Android,IOS都有一套明确的框架体系,JS本来没有,后来有了,然后。。...它就应该是一个纯数据的集合,就是被各种东西传来传去,被各种加工处理的数据团。 通常会有很多Model,一条业务流就是对应一条或者多条数据流,拿知乎为例子。...看你的是让这个小妹妹帮你脱,还是别的小妹妹脱,还是自动脱鞋机。 如果是你自动脱。。。说明你在Model里面加上了功能,你的脚就不是一个纯粹的数据模型了,而是一个包含业务功能在里面的充血模型。...4.Dao Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。 是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。...分层结构一直都不是JS社区里最注重的,在JQuery时代更是如此,不管是Html还是JS还是CSS混在一起是正常的。 那个时候叫插件,现在改名了,叫组件。

    49820

    项目中Dao,Service,Controller,Util,Model是什么意思,为什么划分?

    好的结构应该是通用的。 好的结构应该是有明确定义的。 这其实就是所谓的脚手架提供的最大的价值,一般而言,Java,Android,IOS都有一套明确的框架体系,JS本来没有,后来有了,然后。。...它就应该是一个纯数据的集合,就是被各种东西传来传去,被各种加工处理的数据团。 通常会有很多Model,一条业务流就是对应一条或者多条数据流,拿知乎为例子。...看你的是让这个小妹妹帮你脱,还是别的小妹妹脱,还是自动脱鞋机。 如果是你自动脱。。。说明你在Model里面加上了功能,你的脚就不是一个纯粹的数据模型了,而是一个包含业务功能在里面的充血模型。...4.Dao Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。 ? 是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。...分层结构一直都不是JS社区里最注重的,在JQuery时代更是如此,不管是Html还是JS还是CSS混在一起是正常的。 那个时候叫插件,现在改名了,叫组件。

    7.7K53

    Spring中bean的配置

    很简单的例子,在进行数据库操作的时候,总是业务层调用DAO层,DAO一般采用接口开发,这在一定程度上满足了松耦合,使业务逻辑层不依赖于具体的DAO。...但是我们在使用的时候还是会new一个特定数据库的DAO,这无形中与特定的数据库绑定了,虽然我们可以使用抽象工厂模式来获取DAO 实现类,但除非我们一次性把所有数据库的DAO写出来,否则在进行数据库迁移的时候我们还是得修改...通过IOC,我们就可以在不修改任何代码的情况下,无缝的实现数据库的换库迁移,当然前提还是必须得写一个实现特定数据库的DAO。...,还是将各个bean的关系进行组织和编写清楚为好。        ...我们上面的bean配置对应的实际代码就应该是: …… public static Object getBean() {     return "hello world"; } …

    54810
    领券