小编opt*_*ude的帖子

使用@Configurable进行Spring自动装配

我正在尝试使用Spring @Configurable并将@AutowireDAO注入域对象,这样他们就不需要直接了解持久层了.

我正在尝试关注http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable,但我的代码似乎没有效果.

基本上,我有:

@Configurable
public class Artist {

    @Autowired
    private ArtistDAO artistDao;

    public void setArtistDao(ArtistDAO artistDao) {
        this.artistDao = artistDao;
    }

    public void save() {
        artistDao.save(this);
    }

}
Run Code Online (Sandbox Code Playgroud)

和:

public interface ArtistDAO {

    public void save(Artist artist);

}
Run Code Online (Sandbox Code Playgroud)

@Component
public class ArtistDAOImpl implements ArtistDAO {

    @Override
    public void save(Artist artist) {
        System.out.println("saving");
    }

}
Run Code Online (Sandbox Code Playgroud)

在application-context.xml中,我有:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springsource.org/dtd/spring-beans-2.0.dtd">
<beans>

    <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
    <bean class="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" factory-method="aspectOf"/>

</beans>
Run Code Online (Sandbox Code Playgroud)

类路径扫描和初始化由弹簧模块执行Play!框架,虽然其他autowired …

java spring aspectj spring-aop

32
推荐指数
3
解决办法
7万
查看次数

从Python中的WSDL文件创建模拟Web服务

我们正在为远程服务编写客户端,该服务公开SOAP Web服务并为这些服务发布WSDL定义.

我们在测试期间无法访问系统,因此我们想编写一个模拟服务.我们正在为客户端使用Python,所以理想情况下我们希望将Python用于模拟服务器,尽管我认为它并非绝对必要.

我们的梦想是能够从我们可以填写的WSDL文件中生成存根,然后使用Paste Deploy作为WSGI服务器提供存根,尽管它不必是Paste Deploy或WSGI,只要它可靠地工作即可.主要的是我们需要从"真正的"WSDL文件生成存根,以便我们不会意外地编写不兼容的模拟服务器.

我们在客户端库中使用suds,并查看了soaplib和ZSI.然而,soaplib中的wsgi2py内容在顶部说"不要使用",ZSI似乎要吞下很多东西.人们通常会用这种东西做什么?

马丁

python soap wsdl mocking

14
推荐指数
2
解决办法
7738
查看次数

DDD:何处放置持久性逻辑,以及何时使用ORM映射

我们正在仔细研究我们的(Java)Web应用程序模式.在过去,我们遭受了过度贫血的对象模型以及控制器,服务和DAO之间的过度程序分离,其中简单的价值对象(基本上只是数据包)在它们之间传播.我们使用声明性(XML)管理的ORM(Hibernate)来实现持久性.所有实体管理都在DAO中进行.

在尝试转向更丰富的域模型时,我们发现自己在如何最好地设计持久层方面遇到了困难.我花了很多时间阅读和思考领域驱动设计模式.但是,我想要一些建议.

首先,我更自信的事情:

  • 我们前面有"瘦"控制器,只处理HTTP和HTML - 处理表单,验证,UI逻辑.

  • 我们将有一层无状态业务逻辑服务,它们实现常见的算法或逻辑,不知道UI,但非常了解(并委托)域模型.

  • 我们将拥有一个更丰富的域模型,其中包含该域模型中对象固有的状态,关系和逻辑.

问题出在持久性上.以前,我们的服务将通过Spring注入(通过Spring),并使用find()和save()等DAO方法来执行持久性.但是,更丰富的域模型似乎暗示对象应该知道如何保存和删除自己,也许更高级别的服务应该知道如何定位(查询)域对象.

在这里,出现了一些问题和不确定性:

  • 我们是否要将DAO注入域对象,以便它们可以在save()方法中执行"this.someDao.save(this)"?这有点尴尬,因为域对象不是单例,所以我们需要工厂或DAO的后期构建设置.从数据库加载实体时,这会变得混乱.我知道Spring AOP可以用于此,但我无法使用它(使用Play!框架,另一行实验),它看起来非常混乱和神奇.

  • 我们是否将DAO(存储库?)完全分开,与无状态业务逻辑服务相提并论?这可能有一定道理,但这意味着如果"保存"或"删除"是域对象的固有操作,则域对象无法表达这些操作.

  • 我们是否完全免除了DAO并使用JPA让实体自行管理.

下面是下一个细微之处:使用JPA映射实体非常方便.表演!框架为我们提供了一个很好的实体基类,具有save()和delete()等操作.但是,这意味着我们的域模型实体与数据库结构紧密相关,并且我们使用大量持久性逻辑传递对象,可能一直到视图层.如果不出意外,这将使域模型在其他环境中的可重用性降低.

如果我们想避免这种情况,那么我们需要某种映射DAO - 使用简单的JDBC(或至少是Spring的JdbcTemplate),或使用数据库实体和"业务"实体的并行层次结构,DAO永远复制来自一个层次结构到另一个

这里适当的设计选择是什么?

马丁

oop dao design-patterns domain-driven-design

13
推荐指数
1
解决办法
4838
查看次数

从WSDL生成Python soaplib存根

我想基于现有的WSDL使用Python soaplib模块生成存根SOAP Web服务类.我们的想法是为第三方Web服务生成模拟.

是否存在任何此类代码生成器,或者我们必须编写自己的代码

马丁

python soap

10
推荐指数
1
解决办法
7437
查看次数

不解决或拒绝承诺是否安全

想象一个Web应用程序,其路由需要在继续之前检查是否允许用户访问给定资源."经过身份验证"检查依赖于数据库调用.

在每条路线中,我可能有:

authorizeOwnership(req, res)
.then(function() {
    // do stuff
    res.send(200, "Yay");
});
Run Code Online (Sandbox Code Playgroud)

我希望authorizeOwnership()函数处理403(拒绝访问)和500(例如数据库查询错误)响应,以便每个路由不需要明确地这样做.

我有一个函数可以查询数据库以检查所有权.

function confirmOwnership(resourceId, userId) {
    // SequelizeJS... returns a bluebird promise
    return Resource.find({
        where: {id: resourceId, userId: userId}
    })
    .then(function(resource) {
        if(!resource) {
            return null; // no match for this resource id + user id
        } else {
            return resource;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

然后用于authorizeOwnership:

function authorizeOwnership(req, res) {
    var rid      = parseInt(req.params.rid, 10),
        userId   = parseInt(req.authInfo.userid, 10);

    return new Promise(function(resolve, reject) {
        confirmOwnership(rid, …
Run Code Online (Sandbox Code Playgroud)

promise bluebird

8
推荐指数
1
解决办法
4367
查看次数

使用本地模拟器为 Cloud Functions 和 Cloud Firestore 编写 Firebase 集成测试

我想编写一些集成测试(使用jest,尽管这可能不是很重要)来测试写入 Cloud Firestore 的“HTTPS 可调用”Firebase Cloud 函数。这些写入又会触发其他 Cloud Functions 函数。我想使用模拟器套件来做到这一点,即不使用远程 Firebase 项目,也不模拟整个 Firebase 机器。我希望能够在 Firestore 中管理装置数据。

仿真器之间的相互作用,@firebase/testingfirebase-functions-test不是在所有明显的给我。

我有这样的助手,我用它们来管理客户端函数或助手函数(在 Cloud Functions 中使用)的测试装置,使用 admin SDK:

const firebase = require('@firebase/testing');
const fs = require('fs');

/**
 * Set up mock app. `auth` can be an object like `{uid: "123"}` to simulate
 * authentication. `data` is used to set up some mock data ahead of time:
 * 
 * 
 * data={
 *   'collection123/doc123': {
 *     foo: …
Run Code Online (Sandbox Code Playgroud)

firebase google-cloud-firestore firebase-cli

8
推荐指数
0
解决办法
389
查看次数

用流星铁路由器中止导航

我在Meteor应用程序中有一个(客户端)路由器,并使用{{pathFor}}帮助程序进行链接.

我在用户更改表单字段时设置了一个dirty标志Session,并且我想触发警告并允许用户在设置标志时停止从页面导航,基本上就像onunload处理程序一样.

我试过这样做:

Router.onBeforeAction(function(pause) {
    var self = this;

    if (!this.ready()) {
        return;
    }

    if(Session.get('dirty')) {
        if(!confirm("Are you sure you want to navigate away?")) {
            pause();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

然而,当我得到提示时,我仍然被引导离开.也就是说,pause()似乎没有停止后续的路由器操作,无论它是什么.

我究竟做错了什么?

meteor iron-router

7
推荐指数
2
解决办法
1015
查看次数

在Java中使用SOAP Web服务的最难痛的方法是什么

大多数项目,我们似乎都在做某种SOAP Web服务消费.而且每一次,感觉都像是用砖块反复击中头部.例如,我们最终得到:

  • 我们的开发人员几乎不了解数十个生成的类
  • 笨拙的API(特别是在使用.NET Web服务时)
  • 黑客来处理我们通常从本地WSDL文件生成的事实(远程服务在我们开始开发时很少存在)

在Python中,我使用了Suds(https://fedorahosted.org/suds),它提供了一种非常自然(但显然不太类型安全)的API.我知道这是比较苹果和橙子,但调用远程Web服务的方法必须比生成如此多的代码少得多.

我们可能会暂时在Play框架中使用它,尽管如果可能的话我会喜欢通用的东西.我们也经常使用Spring,虽然我现在正在研究Guice以获得更简单的替代方案.

马丁

java soap web-services

6
推荐指数
1
解决办法
940
查看次数

Flux中的AJAX:当依赖状态发生变化时刷新存储

我正在使用MartyJS构建一个Flux应用程序(它非常接近"vanilla"Flux并使用相同的底层调度程序).它包含具有固有依赖关系的商店.例如,a UserStore跟踪当前用户,以及InstanceStore跟踪当前用户拥有的数据实例.实例数据是异步从API获取的.

问题是如何处理InstanceStore用户更改时的状态.

我开始相信(例如,阅读@fisherwebdev在SO上的答案),最适合在动作创建者函数中发出AJAX请求,并在动作中产生AJAX"成功"结果,从而导致商店发生变化.

因此,为了获取用户(即登录),我正在动作创建者函数中进行AJAX调用,当它结算时,我RECEIVE_USER将作为有效负载向用户发送动作.在UserStore这个监听并相应地更新其状态.

但是,InstanceStore如果用户更改,我还需要重新获取所有数据.

选项1:我可以RECEIVE_USER在其中监听InstanceStore,如果是新用户,则触发AJAX请求,该请求又创建另一个动作,从而导致InstanceStore更新.这个问题就是它感觉像是级联动作,虽然技术上它是异步的,所以调度员可能会允许它.

选项2:另一种方式是InstanceStore听取发出的变化事件UserStore并进行请求 - 动作舞蹈,但这也是错误的.

选项3:第三种方式是动作创建者编排两个AJAX调用并分别发送这两个动作.但是,现在动作创建者必须知道很多关于商店如何相互关联的信息.

在Flux应用程序中应该哪里进行ajax请求?让我觉得选项1是正确的,但Flux文档也暗示商店触发行动并不好.

ajax reactjs-flux

5
推荐指数
1
解决办法
765
查看次数

模板被销毁时正确停止autorun()函数

我有一个包含图表的模板,使用MorrisJS渲染.当currentData会话变量发生变化时,图表应该会更新,因此我将其作为一个反应数据源:

Template.chart.rendered = function() {

    var template = this;

    Deps.autorun(function(c) {

        // Stop if the template is removed from the dom
        // Q: Is this really right?
        if(template.__component__.dom.parentNode() === null) {
            c.stop();
            return;
        }

        var results = Session.get('currentData');

        // ... render a chart with `results` as the data

        Morris.Bar({element: template.$(".chart-container"), data: results, ...});

    });

};
Run Code Online (Sandbox Code Playgroud)

请注意我如何检查何时停止上面的自动运行.这是必要的,因为没有这个,当我使用模板(我正在使用iron-router)离开页面到另一个页面并返回时,我会在日志中收到警告,例如"无法选择删除的DomRange".我很确定这种情况正在发生,因为模板实例已被删除,但自动运行仍在运行.

不过,我觉得我在这里做错了.是否有(a)更好的地方放置自动运行以便它没有这个问题,或者(b)在从DOM中删除模板实例时停止计算的更好方法是什么?

我试图找到一种方法来处理createddestroyed处理程序,但我无法弄清楚如何.

meteor

4
推荐指数
1
解决办法
1204
查看次数