小编yot*_*ain的帖子

对于未注册的令牌,FCM HTTP V1 API返回404

当设备未注册(应用程序已卸载)时,FCM HTTP v1 API应返回错误代码"UNREGISTERED".但是,API返回404"未找到请求的实体".

有没有人经历过这个?这是预期的吗?在文档中的任何地方都没有提到这一点.

当404错误并收到"未找到请求的实体"消息时,假设设备未注册是否安全?

以下是收到的错误的全部内容.

{
  "error": {
    "code": 404,
    "message": "Requested entity was not found.",
    "errors": [
      {
        "message": "Requested entity was not found.",
        "domain": "global",
        "reason": "notFound"
      }
    ],
    "status": "NOT_FOUND"
  }
}
Run Code Online (Sandbox Code Playgroud)

例外:

Caused by: com.google.firebase.messaging.FirebaseMessagingException: Requested entity was not found.
    at com.google.firebase.messaging.FirebaseMessaging.handleSendHttpError(FirebaseMessaging.java:266) ~[firebase-admin-5.9.0.jar:?]
Run Code Online (Sandbox Code Playgroud)

有关参考API文档:

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode

google-cloud-messaging firebase-cloud-messaging

19
推荐指数
1
解决办法
1万
查看次数

在现有数据库上使用liquibase

我们有一个现有的生产数据库.我们决定使用liquibase进行所有进一步更新并创建任何新数据库(如开发或集成).

我们已经基于现有的生产模式创建了liquibase脚本(以创建任何新的数据库,如开发,集成等).在该脚本之上,我们还添加了两个更新.展望生产数据库的所有进一步更新将由liquibase完成.

如果我们在生产中执行liquibase,它将尝试完成所有已经存在的完整更改,这不应该发生,因为生产已经拥有除了两个新更新之外的所有内容.现在我们想使用liquibase将这两个更改单独更新为制作.

我们怎么做到这一点?

database database-migration liquibase

16
推荐指数
1
解决办法
4747
查看次数

如何从ADB向设备发送FCM(firebase云消息传递)推送通知

我们正在使用firebase云消息传递将推送通知发送到Android应用程序.

目前,为了测试推送通知,我们需要将消息发送到FCM服务器并等待消息到达设备.大多数时候设备需要很长时间才能从FCM服务器获取通知.

我可以看到下面的一些链接解释了使用adb broadcast命令向设备发送推送通知(此示例说明使用GCM框架发送消息,但我们使用FCM) 是否可以从adb shell/am命令行模拟GCM接收?我收到了一个错误

有没有类似的方法使用adb向具有FCM的设备发送推送通知?

android adb firebase google-cloud-messaging firebase-cloud-messaging

16
推荐指数
2
解决办法
3118
查看次数

在Android 4.2中加载自定义字体的问题(API 17)

我有一个静态html文件"myhtml.html"存储在我的assets/html /目录中,这个html加载自定义字体(存储在assets/fonts /下),如下所示:

<style type="text/css">
    @font-face {
        font-family: 'MyFont';
        src: url('file:///android_asset/fonts/myfont.ttf');
    }
</style>
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码加载此html:

String html = getHtml(); // This method loads the myhtml.html from asset. This loads properly.
WebView webView = (WebView) findViewById(R.id.webbox);
WebSettings webSettings = webView.getSettings(); 
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setFixedFontFamily("fonts/myfont.ttf");
webView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

除了Android 4.2(API 17)之外,此代码适用于所有Android版本.

在Android 4.2中,加载了HTML但未加载自定义字体.

android-webview

11
推荐指数
1
解决办法
1094
查看次数

JPA条件API将'in'表达式转换为多个'OR'

具有'in'表达式的JPA条件API转换为多个'OR'而不是'in'

例如

我的主要模特

public class Person {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "department_id")
    private Department department;

    ...
}
Run Code Online (Sandbox Code Playgroud)

多对一的关系

public class Department {
    @Id
    @Column(name="department_id")
    private Integer departmentId;

    @OneToMany(mappedBy="department")
    private List<Person> person;

    ...
}
Run Code Online (Sandbox Code Playgroud)

在persistence.xml中定义了这两个模型(注意:它没有指定任何db方言)

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="primary" transaction-type="JTA">

        <jta-data-source>java:openejb/Resource/jdbc/myDS</jta-data-source>

        <class>com.xyz.Person</class>
        <class>com.xyz.Department</class>
        ...

        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

        <properties>
            <property name="openjpa.Log" value="${open.jpa.log}" />
            <property name="openjpa.ConnectionFactoryProperties" value="printParameters=true" />
            <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
        </properties>
    </persistence-unit>

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

以下是使用Criteria API构建查询的代码:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> criteriaQuery = cb.createQuery(Person.class);
Root<Person> personRoot = criteriaQuery.from(Person.class); …
Run Code Online (Sandbox Code Playgroud)

java jpa openjpa

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

将 AWS QuickSight 分析复制到另一个账户

我们在一个账户中有很多 AWS quicksight 报告,需要迁移到另一个账户。

在同一个账户中,我们可以使用仪表板的“另存为”功能来创建报告的副本,但是有没有办法从一个账户中导出分析并导入到另一个账户中?

目前,似乎只有我们的方法是在新帐户中从头开始重新创建所有报告,但有人有其他选择吗?

amazon-quicksight

9
推荐指数
1
解决办法
5393
查看次数

Spring cloud SQS - 轮询间隔

使用Spring云监听AWS SQS队列,如下所示:

@SqsListener(value = "${queue.name}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void queueListener(String message, @Headers Map<String, Object> sqsHeaders) {
    // code
}
Run Code Online (Sandbox Code Playgroud)

Spring配置:

<aws-messaging:annotation-driven-queue-listener
    max-number-of-messages="10" wait-time-out="20" visibility-timeout="3600"
    amazon-sqs="awsSqsClient" />
Run Code Online (Sandbox Code Playgroud)

AwsSqsClient:

@Bean
public com.amazonaws.services.sqs.AmazonSQSAsyncClient awsSqsClient() {
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    return new AmazonSQSAsyncClient(new DefaultAWSCredentialsProviderChain(), executorService);
}
Run Code Online (Sandbox Code Playgroud)

这很好用.

在SQS客户端中配置了10个线程来处理这些消息,如上所示.这也工作正常,在任何时间点处理最多10条消息.

问题是,我无法弄清楚控制轮询间隔的方法.默认情况下,一旦所有线程都空闲,弹出轮询.

即考虑以下示例

  1. 大约有3条消息被发送到Queue
  2. Spring轮询队列并获得3条消息
  3. 处理每条消息的3条消息大约需要20分钟

与此同时,大约有25条消息被送到队列.在完成之前传递的所有3条消息之前,Spring不会轮询队列.从上面的例子来看,只有20分钟之后春季民意调查,尽管有7个线程仍然免费!

知道我们如何控制这种民意调查吗?即如果有任何线程空闲,则应该开始轮询,并且不应该等到所有线程都空闲

message-queue amazon-sqs amazon-web-services aws-sdk spring-cloud

7
推荐指数
1
解决办法
1821
查看次数

无法在事务中登记连接:enlistResource返回'false'

突然间,我连续得到以下错误的选择查询.

Unable to enlist connection in transaction: enlistResource returns 'false'
Run Code Online (Sandbox Code Playgroud)

这似乎是从DBCP抛出的(https://commons.apache.org/proper/commons-dbcp/jacoco/org.apache.commons.dbcp2.managed/TransactionContext.java.html)

本质上,此代码调用javax.transaction.Transaction.enlistResource

查看API,它说"使用与目标Transaction对象关联的事务指定资源.如果资源已成功登记,则为true;否则为false."

我仍然不清楚为什么抛出这个异常.

  1. 什么是资源到交易?
  2. 当enlist资源返回false时?我的意思是什么时候交易无法登记资源?
  3. 如何避免这个问题?

技术堆栈:

  • TomEE 7.0.4
  • JPA
  • MariaDB的

数据源配置:

<Resource id="jdbc/myDS" type="javax.sql.DataSource">
    dataSourceCreator = tomcat
    jtaManaged        = true
    driverClassName   = ${jdbc.driver}
    url               = ${jdbc.url}
    username          = ${jdbc.username}
    password          = ${jdbc.password}
    initialSize       = 5
    maxActive         = 100
    maxIdle           = 10
    minIdle           = 5
    maxWait           = 30000
    validationQuery   = SELECT 1
    testOnBorrow      = false
    testOnReturn      = false
    testWhileIdle     = true
    timeBetweenEvictionRunsMillis = 1800000
    numTestsPerEvictionRun = 2 …
Run Code Online (Sandbox Code Playgroud)

jpa jta jdbc tomee

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

java zipentry getsize返回-1

Java zipEntry.getSize()返回实际文件的大小,有时返回-1(尽管文件大小大于0)。

Java API文档说:“返回条目数据的未压缩大小;如果未知,则返回-1。”

不确定在什么情况下它将返回-1,即在什么情况下将未知?

java zip zipinputstream

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