小编Mar*_*lze的帖子

对sun.security.pkcs11.SunPKCS11的访问限制

我正在尝试设置PKCS11提供程序来访问智能卡.我在我的系统上安装了一个PKCS11库,并按照Java PKCS#11参考指南中的说明进行操作.在引用中,它们只是创建一个实例,sun.security.pkcs11.SunPKCS11并将配置文件的名称传递给构造函数.当我尝试编译以下代码时

Provider p = new sun.security.pkcs11.SunPKCS11("pkcs11.cfg");
Security.addProvider(p);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

访问限制:由于对所需库的限制,无法访问构造函数SunPKCS11(String)/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/ext/sunpkcs11.jar

我究竟做错了什么?我在Ubuntu x86下使用Eclipse 3.5和Java SE 1.6.

最好的祝福.

java security provider smartcard pkcs#11

15
推荐指数
4
解决办法
3万
查看次数

单元测试OSGi组件

我目前正在考虑"如何设计一个OSGi组件,以便使用jUnit和Mockito等框架轻松编写测试".

由于OSGi强化了DIP (依赖性倒置原则)并且通常存在注入器方法(例如设置器),因此模拟捆绑间依赖性非常容易.
但是捆绑内部依赖呢?

例如,看看这种情况.现在我想将它带入一个OSGi上下文...我们希望在OSGi平台中提供任何类型的网络协议作为声明性服务,并希望编写单元测试来测试直接与之交互的较低网络代码套接字对象.

如果我们将套接字创建重构为一个单独但仍然捆绑的内部POJO (Plain Old Java Object)类,我们应该如何将它注入协议实现?

  • 在单元测试中,我们可以简单地使用setter方法但是谁会在OSGi容器中为我们这样做?
  • 对测试类进行子类化并覆盖创建者方法只有在测试类未声明为final时才有效.

java osgi unit-testing dependency-inversion

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

Mockito + Spy:如何收集返回值

我使用工厂创建了一个用于创建对象的类.在我的单元测试中,我想访问工厂的返回值.由于工厂直接传递给类,并且没有提供创建对象的getter,我需要拦截从工厂返回对象.

RealFactory factory     = new RealFactory();
RealFactory spy         = spy(factory);
TestedClass testedClass = new TestedClass(factory);

// At this point I would like to get a reference to the object created
// and returned by the factory.
Run Code Online (Sandbox Code Playgroud)

是否有可能获得工厂的返回值?可能使用间谍?
我能看到的唯一方法是模拟工厂创建方法......

问候

java mockito spy

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

Eclipse RCP:目标平台 - Eclipse与Equinox?

我刚开始使用OSGi和Eclipse RCP.在创建新的eclipse插件项目时,有人可以向我解释"Eclipse"和"Equinox"作为目标平台之间的区别吗?
我仍然知道Equinox是Eclipse的OSGi实现.
我在一些文章中读到eclipse rcp也是基于Equinox.那么您必须在新的Eclipse插件项目中选择目标平台之间的区别在哪里?

最好的祝福

java osgi eclipse-plugin eclipse-rcp equinox

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

osgi:使用ServiceFactories?

我目前正在尝试获得一个包含Service Factory运行的简单包.

这是我的工厂类:

public class SvcFactory implements ServiceFactory<ServiceB> {

    @Override
    public ServiceB getService(Bundle bundle,
            ServiceRegistration<ServiceB> registration) {

        return new ServiceBImpl();
    }

    @Override
    public void ungetService(Bundle bundle, ServiceRegistration<ServiceB> registration,
            ServiceB service) {

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我应该由工厂创建的服务:

public class ServiceBImpl implements ServiceB {

    private ServiceA svcA;

    public void setA(ServiceA a) {
        svcA = a;
    }

}
Run Code Online (Sandbox Code Playgroud)

最后是OSGI-INF/component.xml

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="bundleb.internal.SvcFactory">

   <implementation class="bundleb.internal.SvcFactory"/>

  <reference bind="setA" cardinality="1..1" interface="bundlea.ServiceA" name="ServiceA" policy="static"/>

   <service servicefactory="true">
      <provide interface="bundleb.ServiceB"/>
   </service>
</scr:component>
Run Code Online (Sandbox Code Playgroud)

如果我在equinox中运行我的测试包(A,B和C),我收到以下错误:

org.osgi.framework.ServiceException: org.eclipse.equinox.internal.ds.FactoryReg.getService() returned a service object that is …
Run Code Online (Sandbox Code Playgroud)

java osgi service-factory

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

如何在tycho中引用mockito?

我目前正试图通过tycho完成我的构建(~30个捆绑).在我的单元测试中
使用Mockito时遇到了一些令人困惑的问题.
eclipse-test-plugin为测试包创建了一个as片段项目.由于tycho应该使用清单解析所需的包,我从中删除了对mockito的依赖pom.xml.
然后,当我尝试将mockito添加到清单中所需的包中时,未列出mockito.我找到了这篇文章并创建了一个指向eclipse indigo的目标平台.
我包含了平台细节,所以我不需要eclipse delta包.然后发生了第一件奇怪的事情.Eclipse告诉我有一些不可靠的依赖关系,当我在eclipse中将新创建的目标平台设置为活动时,eclipse不再org.osgi.framework能解决诸如此类的软件包等问题.但是,当我构建一个eclipse-product使用tycho和目标平台时,它正在工作.

我的目标平台

如果我将当前的eclipse安装设置为活动平台,则会解析捆绑包.我选择了以下的indigo版本:

  • Eclipse RCP插件开发人员资源
  • Equinox目标组件
  • Jetty目标组件

所以我的第一个问题是"我的目​​标平台出了什么问题,以便tycho能够使用它而不是eclipse?"

为了更接近我原来的问题(让mockito运行)我将当前的eclipse安装设置为活动目标平台.然后Eclipse可以解析org.osgi.framework包和其他包.
pom.xml在上面提到的帖子中再次添加了之前删除的依赖于mockito .但是当我尝试将它添加到清单中所需的包时,我仍然找不到mockito.

所以我的第二个问题是"我做错了什么?你如何引用未在eclipse更新站点发布的包,例如maven中央存储库?"

更新:在我的研究过程中,我发现了两种方法,在我的目标平台中包含来自非p2-update-sites的 bundle :

  1. Nexus Pro Nexus
    的专业版支持p2-Proxy存储库,可以将Maven Central存储库等默认maven存储库包装到p2更新站点,但专业版本每年的成本约为800美元.
  2. 创建一个eclipse-repository
    您可以使用打包创建一个新的maven项目, eclipse-repository 其中包括所有需要的包.然后将创建的工件部署到公共Web服务器.

在您的目标平台中,您可以参考Nexus p2-proxy仓库或Web托管的p2-repo.
有谁知道其他方式 - 可能更方便/更便宜?

请帮助我理解混乱的tycho世界......
提前谢谢

java mockito tycho maven

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

JPA + Hibernate(J2SE)@OneToMany - 数百万条记录减慢了添加新对象的速度

我在J2SE项目中使用JPA + Hibernate和PostGre SQL数据库.
我有2个实体一个.AB有@OneToMany关系.
在我的域模型一个可能会引用数百万的.当我向集合添加新对象时,需要几分钟才能完成.

@OneToMany(cascade=CascadeType.PERSIST)
Collection<B> foo = new ArrayList<B>(); // might contain millions of records
//...
// this takes a lot of time
foo.add(new B());
Run Code Online (Sandbox Code Playgroud)

我认为JPA在插入新对象之前获取整个集合.是否有可能配置关系,以便通过向集合中添加新对象而不执行获取操作?

java performance hibernate jpa

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

MongoDB的Spring数据中的非阻塞查询?

我想通过Spring Data使用MongoDB的Async Client API访问MongoDB来执行非阻塞数据库查询。

到目前为止,我只看到返回一个

  • java.util.concurrent.Future
  • java.util.concurrent.CompletableFuture
  • org.springframework.util.concurrent.ListenableFuture

和注释与查询方法@Async,例如

公共接口UserRepo扩展了Repository <User,Long> {

  @异步
  ListenableFuture <User> findByName(String name);

}

但是文档明确指出实际情况[...] query execution will occur in a task that has been submitted to a Spring TaskExecutor。因此,这并不是真正的非阻塞,而是使用无法很好扩展的线程池来解耦我的线程。

因此我的问题是:

如何使用MongoDB异步驱动程序的NIO功能以非阻塞模式执行查询?

到目前为止,我看到的唯一解决方法是摆脱掉Spring Data并使用Mongo Async Driver API自行实现数据库查询。但是希望我只是想念一些东西,并且那里有一个直截了当的答案。;)

java mongodb-java spring-data spring-data-mongodb

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

春天反应安全| 如何实现反应式 PermissionEvaluator

假设我们有一个带注释的休息控制器方法:

@PreAuthorize("hasPermission(#username, 'USER_PROFILE', 'WRITE')")
Run Code Online (Sandbox Code Playgroud)

在 Spring MVC 中,我们将实现一个PermissionEvaluator来实现隐藏在以下方法签名后面的授权

boolean hasPermission(
  Authentication authentication, 
  Serializable targetId, 
  String targetType,
  Object permission
)
Run Code Online (Sandbox Code Playgroud)

只要您不需要在 hasPermission 方法中调用反应式服务/方法,这在使用 Spring WebFlux 时似乎仍然有效,我想这种情况很少发生,因为您通常希望为数据库层使用反应式接口以及。如果您无论如何都要在此方法中调用反应式服务,您将需要在某个时间调用block()一些服务Mono,从而遇到麻烦,因为您是从反应式管道中调用的。

Josh Long关于 Spring WebFlux 安全性的教程中,他解释了如何SecurityWebFilterchain通过提供自定义ReactiveAuthorizationManagers直接在使用路径匹配器上实现授权。但是PreAuthorize在 Spring WebFlux 中没有解释如何使用注解。

我期待实施一些 ReactivePermissionEvaluator

Mono<Boolean> hasPermission(
  Authentication authentication, 
  Serializable targetId, 
  String targetType,
  Object permission
)
Run Code Online (Sandbox Code Playgroud)

这也将允许在实现中使用反应式服务,但我无法找到ReactiveAuthorizationManager可以扫描PreAuthorize注释并将评估分派给反应式的PermissionEvaluator任何实现,ReactivePermissionEvaluator接口也不存在。

所以最后的问题是,如何实现一个PermissionEvaluator允许调用反应式服务的反应式,例如在不阻塞的情况下查询数据库以获取授权信息?

spring-security spring-webflux

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

Quarkus - 反应式文件下载

使用Quarkus,有人可以举一个例子,说明服务器和客户端代码如何使用反应式 API 通过 http 下载文件?

到目前为止,我尝试返回 nio ByteBuffers 的 Flux 但似乎不支持:

@RegisterRestClient(baseUri = "http://some-page.com")
interface SomeService {

    // same interface for client and server
    @GET
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    @Path("/somePath")
    fun downloadFile(): reactor.core.publisher.Flux<java.nio.ByteBuffer>
}
Run Code Online (Sandbox Code Playgroud)

尝试在服务器端返回 Flux 会导致以下异常:

ERROR: RESTEASY002005: Failed executing GET /somePath
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: kotlinx.coroutines.reactor.FlowAsFlux of media type: application/octet-stream
    at org.jboss.resteasy.core.ServerResponseWriter.lambda$writeNomapResponse$3(ServerResponseWriter.java:124)
    at org.jboss.resteasy.core.interception.jaxrs.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:403)
    at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:251)
    ...
Run Code Online (Sandbox Code Playgroud)

http download kotlin reactive quarkus

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

用于检查 API 与 Android 的兼容性的 Maven 插件

我正在寻找一个 Maven 插件,可以检查 Jar/Class 文件是否符合 Android 指定的 API 级别。例如,所有类和方法都可以在 Android API 中解析吗?
有人知道这样的插件吗?DX 工具似乎没有提供这样的功能,或者我错过了什么?

用例:
我编写了一些 Jar 文件,它们应该在桌面 Java 应用程序以及 Android 应用程序中使用。现在我想确保这些 Jar 文件符合一定级别的 Android API。

我当前的解决方法是在 Android 模拟器中运行单元测试。

java android maven

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