我想使用Jersey在我的REST服务中实现自定义授权.此自定义授权检查方法的注释以及方法接收的实际参数.
我的jax-rs注释方法如下:
@GET
@Path("customers")
@Requires(Role.CustomerManager)
public Customer getCustomer(@ParseFromQueryString @CheckPermission final Customer customer) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这@ParseFromQueryString是一个注释,指示Jersey(通过Injectable提供程序)Customer从查询字符串中解组a .代码如下:
public class QueryStringCustomerInjectable implements Injectable<Customer> {
public Customer getValue() {
final Customer customer = new Customer();
// ... a UriInfo was injected using the @Context annotation
// ... extract parameters from QueryString and use setters
return customer;
}
}
Run Code Online (Sandbox Code Playgroud)
该@CheckPermission注释指示我的自定义authoriser该权限是对客户进行检查.有些用户可以访问某些客户的信息.类似地,@Requires注释扮演调用者应具有的角色.这些不是java的安全角色(字符串),而是它们是枚举值.
使用Jersey ResourceDebuggingFilter作为起点,我已经能够知道将调用哪个方法.但是,我仍然没有想出如何确定实际使用哪些参数来调用该方法.
在我的头脑中,我可以想到两个工作:
QueryStringCustomerInjectable,但这看起来有点草率.这会是一个做得太多的课.然而,我真的 …
我们的项目将整合突变测试作为其构建周期的一部分.目前,我们正处于评估阶段.
到目前为止,我只发现Jester有一个maven-plugin(Grester).我无法找到其他可用的突变测试工具(Jumble,μJava和Javalanche).当然,我们需要完整的maven集成.我们不想重新发明轮子(即,为我们选择的工具编写我们自己的maven插件).
你知道那些Jumble,μJava和Javalanche的maven-plugins吗?我已经google了,就像我说的那样,只找到了Grester.此外,如果你知道任何其他java的变异测试工具,任何提示将不胜感激.
我知道这个问题已经存在至少3年(问题92),但我仍然不满意它的当前状态.我也知道如果你在重新部署后重新启动(如Guice + Tomcat潜在的内存泄漏中所建议的那样),这不会影响Tomcat .
我的问题是我OutOfMemoryError: PermGen在重新部署后遇到了错误.请注意,我没有明确使用google-collections,我只使用Guice 3.0(通过maven).在分析堆转储之后,我仍然看到线程com.google.inject.internal.Finalizer仍处于活动状态,保持对Tomcat的WebappClassLoader的引用,从而阻碍了垃圾收集.
如果我实际上需要重新部署而不重新启动并使用Guice,该怎么办?我有什么选择?
我想将CXF与Google Guice集成.我已经在我的项目中使用Guice,我想避免添加额外的依赖项.
CXF是我的选择,因为其中一个要求是能够为服务的用户提供XML,JSON,JSONP和SOAP接口,而不需要重复的代码(现在我们有特定于SOAP的类,对于XML我们使用Struts和for JSON我们编写了自己的解析器,我知道,我也觉得很脏.
无论如何,afaik,CXF可以满足这个要求,所以我似乎被CXF困住了.
关于如何将Guice与CXF集成的任何想法,指示或建议?我想扩展CXFNonSpringJaxrsServlet课程并将Guice归入其中,但它似乎在某种程度上我会做其他人已经做过的事情.
我在一个相当大的项目中工作.我们有很多项目,每个项目都有依赖项.我们使用maven,通常我们没有任何问题.因此,在没有提供太多细节的情况下,想象一下对于给定项目,例如,tps-reports依赖性部分pom.xml看起来像:
<name>TPS-Reports</name>
<description>
TPS Reports frontend.
</description>
<dependencies>
<dependency>
<groupId>com.initech</groupId>
<artifactId>gui-components</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>multithreading</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>utils</artifactId>
<version>2.3.0.0</version>
</dependency>
<dependency>
<!-- TODO: update to new version -->
<groupId>com.initech</groupId>
<artifactId>object-pooling</artifactId>
<version>1.9.3.1</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
现在,Initech拥有大量依赖于项目的项目object-pooling,这些项目还依赖于许多其他更多组件,例如(utils和multithreading).
生活对object-pooling开发者来说是好事.这是一个非常稳定的模块,一切顺利.与任何其他模块一样,它也具有依赖性.object-pooling开发人员都是绅士和公平的女士,每当他们发现一个关键的错误时,他们都会更新所有依赖的项目object-pooling.
现在,版本1.9.3.1的object-pooling稳定,没有已知的严重的安全漏洞.开发人员很难添加大量新功能,经过一段时间后,他们发布了版本2.0.0.0.当然,之间1.9.3.1和2.0.0.0,有中间的版本(例如1.9.3.1,1.9.3.2,1.9.4.0,1.9.5.3等等).正如我所说,生活对object-pooling开发者来说是好事.版本2.0.0.0具有新功能和许多修复.
然而,对于tps-reports开发人员来说,地狱即将到来.他们已经使用 …
采取以下java代码:
public class SomeClass {
private boolean initialized = false;
private final List<String> someList;
public SomeClass() {
someList = new ConcurrentLinkedQueue<String>();
}
public void doSomeProcessing() {
// do some stuff...
// check if the list has been initialized
if (!initialized) {
synchronized(this) {
if (!initialized) {
// invoke a webservice that takes a lot of time
final List<String> wsResult = invokeWebService();
someList.addAll(wsResult);
initialized = true;
}
}
}
// list is initialized
for (final String s : someList) {
// …Run Code Online (Sandbox Code Playgroud) java concurrency multithreading synchronization memory-model
我写了以下代码:
public class JavaErrorTest {
public static void main(String[] args) {
if (1 < 2) {
throw new OutOfMemoryError();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我调用它:
$ java -XX:OnError="echo %p" JavaErrorTest
Run Code Online (Sandbox Code Playgroud)
在我的控制台中,我得到以下内容:
Exception in thread "main" java.lang.OutOfMemoryError
at JavaErrorTest.main(JavaErrorTest.java:5)
Run Code Online (Sandbox Code Playgroud)
不知何故,我怀疑-XX:OnErrorJVM选项没有被选中.我正在使用cygwin调用java,使用jdk 1.6.0_30,在Windows 64位下运行.
我究竟做错了什么?
编辑
以下命令产生相同的输出:
$ java -XX:OnOutOfMemoryError="echo %p" JavaErrorTest
Run Code Online (Sandbox Code Playgroud) 我正在使用Quartz Enterprise Job Scheduler(1.8.3).作业配置来自几个xml文件,我们有一个特殊的作业,可以检测这些xml文件中的更改并重新计划作业.这很有用,但问题是我还需要这个"调度程序工作"来重新安排自己.一旦这个工作重新安排自己,由于某种原因,我看到它被执行了很多次.但我没有看到任何例外.
我已经复制并隔离了这个问题.这将是切入点:
public class App {
public static void main(final String[] args) throws ParseException, SchedulerException {
// get the scheduler from the factory
final Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// start the scheduler
scheduler.start();
// schedule the job to run every 20 seconds
final JobDetail jobDetail = new JobDetail("jobname", "groupname", TestJob.class);
final Trigger trigger = new CronTrigger("triggername", "groupname", "*/20 * * * * ?");
// set the scheduler in the job data map, so the job can re-configure …Run Code Online (Sandbox Code Playgroud) java ×6
guice ×2
jax-rs ×2
maven ×2
build ×1
concurrency ×1
cxf ×1
dependencies ×1
jax-ws ×1
jersey ×1
jvm ×1
maven-2 ×1
memory-leaks ×1
memory-model ×1
rest ×1
tomcat ×1
unit-testing ×1