小编Joh*_*tle的帖子

grails如何禁用方法的事务

我有一种服务方法来转移资金到外部系统.

它应该首先在我们的系统中创建一个事务(所以我们有一个transactionId)然后我们调用外部系统.如果外部系统出现故障,我们需要回滚事务,然后在我们的付款审核日志表中写入新记录,无论呼叫是否失败或有效.

在这种情况下,我无法弄清楚如何控制交易.

我理解默认情况下服务是事务性的.

我假设我可以创建3个方法(它们现在都是1个方法,这不起作用,因为我无法控制提交的内容和回滚的内容)

  1. createPaymentTransaction()
  2. sendToPaymentSystem()
  3. createPaymentRecord()

如果1失败,我需要回滚1,并且不做任何其他事情.如果2失败,我需要回滚1,但是写3.如果1和2工作,我需要写3.

我不知道如何注释这些,或如何构建第4个请求来管理3.

grails transactions

5
推荐指数
2
解决办法
4756
查看次数

"无法找到ApplicationContext,首先正确配置Grails"

我们有一个带有一些域类和服务等的插件项目.我们有一个使用插件项目的应用程序项目.这是一种常见的模式.集成测试(击中数据库)无法在​​插件项目中运行,因为它没有应用程序上下文,因此我们在主应用程序项目中运行集成测试.

我们有一个非常简单的集成测试:

/*@TestFor(Site)*/
class SiteIntegrationSpec extends IntegrationSpec {
    static transactional=false;
    def setup() {
    }
    def cleanup() {
    }
    void "test something"() {
        Site site

        when:
        site = Site.get(1L)

        then:
        site.name == "root"
    }
}
Run Code Online (Sandbox Code Playgroud)

该网站只是一个域对象,类似于:

class Site {
    String name    
    // some more fields here
}
Run Code Online (Sandbox Code Playgroud)

注意:尝试使用TestFor(Site)也未注释 - 同样的错误.

如果我查看数据库,那里有网站条目.

好的,刚发现另一条线索.SiteIntegrationSpec测试用于工作.在我们添加第二个测试ParamIntegrationSpec之前,它工作正常.如果我们自己运行这些测试中的任何一个:

test-app --stacktrace --verbose ParamIntegrationSpec
Run Code Online (Sandbox Code Playgroud)

作品

test-app --stacktrace --verbose SiteIntegrationSpec
Run Code Online (Sandbox Code Playgroud)

作品

但如果我们同时运行它们:

test-app --stacktrace --verbose *IntegrationSpec
Run Code Online (Sandbox Code Playgroud)

SiteIntegrationSpec测试始终失败并出现上述异常.

有任何想法吗?

完整堆栈跟踪:

java.lang.IllegalStateException: Could not find ApplicationContext, configure Grails correctly first
at grails.util.Holders.getApplicationContext(Holders.java:97) …
Run Code Online (Sandbox Code Playgroud)

testing integration grails

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

grails withTransaction - 为什么它在域对象上?

我们需要能够回滚服务中的复杂事务,而不会向调用者抛出异常.我的理解是,实现这一目标的唯一方法是使用withTransaction.

问题是:

  1. 为什么我必须在域对象上调用它,例如Books.withTransaction
  2. 如果没有相关的域对象,选择一个随机的后果是什么?

以下是我正在尝试做的或多或少.用例是从帐户中提取并将其放入信用卡.如果传输失败,我们想要回滚事务,而不是支付记录日志,这必须在单独的事务中提交(使用RequiresNew).无论如何,服务方法必须返回一个复杂的对象,而不是异常.

someService.groovy

Class SomeService {
    @NotTransactional
    SomeComplexObject someMethod() {
        SomeDomainObject.withTransaction{ status ->
            DomainObject ob1 = new DomainObject.save()
            LogDomainObject ob2 = insertAndCommitLogInNewTransaction()
            SomeComplexObject ob3 = someAction()
            if (!ob3.worked) {
                 status.setRollbackOnly() // only rollback ob1, not ob2!
            }
            return ob3
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是有缺陷的 - 我假设"return ob3"不会从方法中返回ob3,因为它在闭包中.不确定如何从闭包内部到外部进行通信.

grails rollback

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

如何在 github 和 2FA 中使用 Visual Studio 代码

我们的组织要求我们将 2FA 添加到 github。不幸的是,现在我们无法在 Visual Studio 代码中提交我们的工作。VSCode 提示输入用户名和密码。它不知道 2FA。

有一些非常古老的帖子说使用个人访问令牌(PAT),例如

https://colinmackay.scot/2015/07/15/two-factor-authentication-with-github-and-visual-studio-2013/comment-page-1/#comment-29984

http://www.anilsezer.com/connecting-github-from-visual-studio-after-twofactor-authentication-enabled

但是,这也不起作用。

第一篇文章说在 VSCode github 登录对话框中输入 PAT 作为用户名并将密码留空。这不起作用,因为您无法使用空白密码进行提交。输入随机密码给出

Fatal: HttpRequestException encountered.
   An error occurred while sending the request.
fatal: HttpRequestException encountered.
   An error occurred while sending the request.
remote: Invalid username or password.
    fatal: Authentication failed for 'https://github.com/xxx/xxx.git/'
Run Code Online (Sandbox Code Playgroud)

第二篇文章说使用您的用户/电子邮件作为用户名,并输入 PAT 作为密码。这也是 VSCode 文档所说的。太累了,同样的问题。

任何人得到这个工作?

另外,有谁知道 VSCode 需要哪些“范围”?我只是勾选了“回购”。这可能是问题所在,是否需要更多?

github visual-studio-code

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

Grails:DomainClass.findAllBy*的返回类型是什么?

grails有findAllBy*的文档,但它没有告诉你它返回什么,或者如何使用它.例如

def results = Book.findAllByTitleLike("%Hobbit%)
Run Code Online (Sandbox Code Playgroud)

结果是一张地图?一套?一个列表?具有分页和附加功能的特殊对象,并包含一系列Books?

intellij不知道类型或结果是什么(它认为它是一本书),官方grails文档没有告诉你,谷歌没有返回任何例子(我能找到),那么怎么能找到这样的信息呢?

如果没有找到书籍,会返回什么?空值?和某种空集合?如何安全地确定找到的书籍数量?如何访问退回的书籍?他们订购了吗?

grails

3
推荐指数
1
解决办法
1749
查看次数

Netbeans 11 支持 grails 吗?

Netbeans 8 曾经很好地支持 grails 3,但不幸的是不能用于多模块项目。我尝试了 intellij Ultimate,但它的 grails 支持同样很差。

我刚刚下载了 netbeans 11 的 bin 发行版,并在隐私设置中“启用”了它(不幸的是,他们没有 mac dmg 或 pkg 安装程序),但它似乎没有任何 grails 支持(没有可用的插件)

我刚刚尝试导入我的 grails 3.3.8 项目,它只是说“损坏”。甚至不会向我展示源代码。

有人有幸吗?

grails groovy netbeans netbeans-11

3
推荐指数
1
解决办法
3224
查看次数

如何在 Jersey Invocation Builder 中使用 PATCH 方法?

WebTarget webTarget = httpClient.target(url);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON)
                .header(HttpUtils.AUTHORISATION_HEADER_NAME, "Bearer " + theAccessToken);
response = invocationBuilder.put(Entity.json(objectMapper.writeValueAsString(payload)));
Run Code Online (Sandbox Code Playgroud)

httpClient 是类型javax.ws.rs.client.Client并被注入。

invocatioBuilder 实现javax.ws.rs.client.Invocation.Builder,但在包中定义org.glassfish.jersey.client

invocationBuilder.put、invocationBuilder.post、invocationBuilder.get 都存在并且可以工作,但是这里没有 invocationBuilder.patch - 它丢失了。

关于如何修补的任何建议?

==== 更新 ====

经过一番谷歌搜索,似乎球衣客户端不支持补丁。由于我们所有的应用程序 API 调用都是使用 jersey 客户端进行的,因此这有点问题。我想我需要找到一个替代的库、方法和代码来调用补丁,但它也需要支持 OATH 2.0。如果存在这样的库,并且理想情况下有一些示例,您有什么想法吗?

仅供参考,使用 Java 1.8.0_131-b11

patch jersey-client

3
推荐指数
1
解决办法
4669
查看次数

我应该为新的 ios 应用程序使用“苹果开发”还是“ios 发行版”证书?

同样的问题在这里被问到,但它是关于 xcode 版本的,没有有用的答案: 我应该为移动应用程序使用 iOS 分发证书还是 Apple 分发证书?

第 3 方正在为我们构建一个 ios 应用程序。他们想要应用商店提交的配置文件等。我需要先创建证书。有 7 个选项。看起来最有可能的两个是:

  1. Apple 分发:签署您的应用程序以提交到 App Store 或进行临时分发。用于 Xcode 11 或更高版本

  2. iOS 分发(App Store 和 Ad Hoc):签署您的 iOS 应用程序以提交到 App Store 或进行 Ad Hoc 分发。

我不知道我应该选择哪个。1 是针对 ios 应用程序,还是仅针对 mac 应用程序?它不清楚。一个是另一个的更新版本吗?在哪种情况下?1. 提到 xcode 11。2 没有。这是否意味着 2 适用于 xcode 10 及以下?或者它的普遍性?奇怪的是,“苹果开发”证书确实适用于 ios,但“苹果分发”证书却没有。

这是非常不清楚的。

app-store ios

3
推荐指数
1
解决办法
1786
查看次数

如何将 Azure DevOps Git 存储库与 Azure 静态 Web 应用程序结合使用?

Azure 有一个新的静态托管产品,这将非常有用。这个想法是您可以将静态站点代码签入 Git,并将其部署到您的站点。您甚至可以将分支视为一种预览工作流程。

问题是 Azure 静态 Web 服务似乎仅适用于 Github。

我们的组织在 Azure DevOps 中拥有所有存储库,这是我们的存储库、构建管道和 Azure Web 服务的无缝统一环境。我们所有的开发人员都使用 Azure Dev ops git 帐户进行设置,他们没有(非私人)github 帐户。

我们不想在 Azure 之外设置重复的 git 托管 - 以及安全、授权或与 Active Directory 链接的痛苦。

我们希望将 Azure Git 与 Azure Static Web 结合使用。

在很大程度上,git 就是 git。

有没有人有任何解决方法、技巧或教程来使这两个 Microsoft Azure 产品相互通信?

azure azure-devops azure-static-web-app

3
推荐指数
1
解决办法
2306
查看次数

git pull 错误:无法锁定 ref 'ref/remotes/origin/xxx' ... 存在;不能创造

我今天已经做了几次 git pull,没有问题。我没有在本地更改或修改任何内容。

现在我又做了一次 git pull,突然得到了这个:

error: cannot lock ref 'refs/remotes/origin/task/DEV-2527/DEV-2535': 'refs/remotes/origin/task/DEV-2527' exists; cannot create 'refs/remotes/origin/task/DEV-2527/DEV-2535'
From https://dev.azure.com/xxx/xxx-web/_git/xxx-web
 ! [new branch]          task/DEV-2527/DEV-2535 -> origin/task/DEV-2527/DEV-2535  (unable to update local ref)
Run Code Online (Sandbox Code Playgroud)

我尝试了“git gc”,但这没有帮助。

我读过“git remote prune origin”可能有帮助,但我不想做任何可能损坏 azure 远程存储库的事情。

git

3
推荐指数
1
解决办法
6300
查看次数