小编omn*_*nom的帖子

在maven插件中扫描java classpath

我要做的是编写一些Maven插件,它扫描应用程序类,寻找特定接口的实现(它可能是带有一些注释的类),并根据结果生成一些代码.我已经成功实现了在generate-sources阶段运行的插件,并将源代码编写到generated-sources目录.

问题在于使用某些注释扫描具有特定接口实现/类的类路径.我使用Reflections库以下列方式扫描类:

private Set<Class< ? extends MyInterface >> scan(final String packageName) {
  final Reflections reflections = new Reflections(packageName);  
  return reflections.getSubTypesOf(MyInterface.class);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,此方法返回空集.当我在类扩展中打印我的类路径时org.apache.maven.plugin.AbstractMojo(我正在使用Reflection),我得到以下结果:

/home/pd5108/apache-maven-2.2.1/boot/classworlds-1.1.jar

我希望使用Reflections找到的类存在于dependend JAR以及配置插件的模块中.看看打印出来的类路径,似乎此时(生成源阶段)maven中定义的依赖关系在类路径上都不可用 - 可能它们会在下一阶段添加.真的吗?我还可以使用其他方法吗?

以下是打印类路径的方法:

URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();

for(int i=0; i< urls.length; i++) {
  System.out.println(urls[i].getFile());
}
Run Code Online (Sandbox Code Playgroud)

java reflection maven-2 classpath maven-plugin

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

在MySQL中存储Double.POSITIVE_INFINITY(EJB实体/ JBoss)

我有以下简单的JPA实体:

@Entity
@Table( name = myentity_table )
public class MyEntity {

  private double a;
  private double b;
  //(...)
}
Run Code Online (Sandbox Code Playgroud)

ab可以设置为Double.POSITIVE_INFINITY.当我尝试使用标准实体管理器将具有双重设置的实体存储到数据库(MySQL)中时,我得到异常:

java.sql.SQLException:'Infinity'不是有效的数值或近似数值

据我所知,MySQL可能不支持NaN/-INF/+ INF数字.有没有办法存储这个实体而不编写HQL查询并将+ INF转换为null(或max double)?理想情况下,我想像往常一样通过实体经理来做.

提前致谢.

mysql jboss ejb jpa infinity

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

"丢失"的UDP数据包(JBoss + DatagramSocket)

我开发了一些基于JBoss + EJB的企业应用程序的一部分.我的模块需要处理大量传入的UDP数据包.我已经完成了一些负载测试,看起来如果以11ms的间隔发送数据包,一切都很好,但是在10ms间隔的情况下,一些数据包会丢失.在我看来这是相当奇怪的,但我做了10/11ms间隔负载测试比较几次,它总是相同的结果(10毫秒 - 一些"丢失"数据包,11毫秒 - 一切都很好).

如果同步出现问题,我希望在11ms测试(至少丢失一个数据包,或者至少有一个错误的计数器值)的情况下也可以看到它.因此,如果不是因为同步,那么我接收数据包的DatagramSocket可能无法正常工作.

我发现接收缓冲区大小(SO_RCVBUF)具有默认的57344值(可能是它的底层IO网络缓冲区依赖).我怀疑,也许当这个缓冲区满了,然后新的传入UDP数据报被拒绝.我尝试将此值设置为更高,但我注意到,如果我夸大,缓冲区将返回其默认大小.如果它的底层依赖,我如何从JBoss级别找出某个OS /网卡的最大缓冲区大小?

是否可能是由接收缓冲区大小引起的,或者57344值是否足以处理大多数情况?你对这些问题有经验吗?

我的DatagramSocket上没有设置超时.我的UDP数据报包含大约70个字节的数据(不包含数据报头的值).

[已编辑] 我必须使用UDP,因为我收到了Cisco Netflow数据 - 它是网络设备用来发送一些流量统计信息的协议.另外,我对发送的字节格式没有影响(例如,我不能为数据包添加计数器等).预计不会处理所有数据包(某些数据报可能会丢失),但我希望我将处理大部分数据包.在10ms间隔测试期间,大约30%的数据包丢失.

慢速处理不太可能导致此问题.目前,singleton组件在循环中保持对DatagramSocket调用receive方法的引用.收到数据包时,会将其传递给队列,并通过从池无状态组件中选择进行处理."Facade"Singleton仅负责接收数据包并将其传递给处理(它不等待处理完成事件).

提前谢谢,Piotr

java udp datagram

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

组件扫描接口上的自定义注释

我有一个组件扫描配置如下:

   @Configuration
   @ComponentScan(basePackageClasses = {ITest.class},
                  includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = JdbiRepository.class)})
   public class MyConfig {

   }
Run Code Online (Sandbox Code Playgroud)

基本上我想创建具有JdbiRepository注释的扫描界面

@JdbiRepository
public interface ITest {
  Integer deleteUserSession(String id);
}
Run Code Online (Sandbox Code Playgroud)

我想创建我的接口的代理实现.为此,我注册了一个SmartInstantiationAwareBeanPostProcessor基本上创建必要实例的自定义,但上面的配置不扫描具有JdbiRepository注释的接口.

如何通过自定义注释扫描界面?

编辑:

似乎org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#isCandidateComponent只接受具体的课程.

/**
 * Determine whether the given bean definition qualifies as candidate.
 * <p>The default implementation checks whether the class is concrete
 * (i.e. not abstract and not an interface). Can be overridden in subclasses.
 * @param beanDefinition the bean definition …
Run Code Online (Sandbox Code Playgroud)

spring

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

Java中的XSLT转换极其缓慢

我尝试使用XSLT转换XML文档.作为输入,我有www.wordpress.org XHTML源代码,而XSLT是虚拟示例检索站点的标题(实际上它什么都不做 - 它不会改变任何东西).

我使用的每个API或库,转换大约需要2分钟!如果你看看wordpress.org源代码,你会发现它只有183行代码.正如我用Google搜索,这可能是由于DOM树的构建.无论XSLT多么简单,它总是2分钟 - 所以它确认它与DOM构建有关,但无论如何它不应该花2分钟.

这是一个示例代码(没什么特别的):

  TransformerFactory tFactory = TransformerFactory.newInstance();
   Transformer transformer = null;

   try {
       transformer = tFactory.newTransformer(
           new StreamSource("/home/pd/XSLT/transf.xslt"));

   } catch (TransformerConfigurationException e) {
       e.printStackTrace();
   }

   ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

   System.out.println("START");
   try {
       transformer.transform(new SAXSource(new InputSource(
           new FileInputStream("/home/pd/XSLT/wordpress.xml"))),
           new StreamResult(outputStream));
   } catch (TransformerException e) {       
       e.printStackTrace();
   } catch (IOException e) {
       e.printStackTrace();
   }
   System.out.println("STOP");

   System.out.println(new String(outputStream.toByteArray()));
Run Code Online (Sandbox Code Playgroud)

它位于START和STOP之间,其中java"暂停"2分钟.如果我查看处理器或内存使用情况,则不会增加任何内容.它看起来真的是JVM停止了......

您是否有任何转换长度超过50的XML(这是随机数;))的经验?当我读到XSLT时,总是需要构建DOM树才能完成它的工作.快速转型对我来说至关重要.

提前谢谢,Piotr

java xml xslt

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

GWT CellTable和Editors框架

为了不重复代码,我前段时间已经决定重构我对编辑器框架使用的看法.目前,每个视图都是包含其他编辑器的编辑器.例如,"人员详细信息"视图包含诸如"人员地址","人物图像","人物描述"等编辑器.这些编辑器中的每一个都包含一些标准GWT小部件以及实例化和显示这些小部件所需的逻辑.

现在,我想在"人员列表"视图中重用其中一些组件.所以,我想要一张表格代表人物的表 - 一行 - 一个人.每行应包含例如:人名,姓,图像(编辑),简短描述(编辑).

是否可以使用GWT CellTable这样做?当我浏览官方和非官方文档时,很容易注意到它主要用于处理HTML代码而不是小部件.

提前致谢

gwt gwt-2.2-celltable gwt-editors

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

使用OpenEJB进行EJB存储库测试 - 如何回滚更改

我尝试使用OpenEJB测试基于EJB的存储库.每次运行新单元测试时,我都希望我的数据库处于"初始"状态.测试完成后,应回滚所有更改(无论测试是否成功).如何以简单的方式完成它?我尝试使用UserTransaction - 在测试开始时开始并在完成时回滚更改(如下所示).我不知道为什么,但是使用这段代码,DB的所有更改(在单元测试期间完成)都会在执行换行后更改.正如我所写,我想以最简单的方式完成它,没有任何外部数据库架构等等.

提前感谢任何提示!

彼得·

 public class MyRepositoryTest {

    private Context initialContext;

    private UserTransaction tx;

    private MyRepository repository; //class under the test

    @Before
    public void setUp() throws Exception {
        this.initialContext = OpenEjbContextFactory.getInitialContext();
        this.repository = (MyRepository) initialContext.lookup(
                "MyRepositoryLocal");
        TransactionManager tm = (TransactionManager) initialContext.lookup(
                "java:comp/TransactionManager");
        tx = new CoreUserTransaction(tm);
        tx.begin();
    }

    @After
    public void tearDown() throws Exception {
        tx.rollback();
        this.initialContext = null;
    }

    @Test
    public void test() throws Exception {            
        // do some test stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

unit-testing transactions openejb

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

Maven:无法解析的构建扩展

我一直在看谷歌,并没有真正指出这个问题.当我运行"mvn clean install"时,它返回以下错误.

[错误] Unresolveable新建扩建:插件org.sonatype.flexmojos:的Flexmojos - Maven的插件:3.8或它的一个依赖无法解析:无法收集org.sonatype.flexmojos依赖关系:的Flexmojos - Maven的插件:罐子: 3.8()

我正在试图弄清楚如何导入maven插件flexmojos,但没有明确的指示如何做到这一点.

如何将此插件导入我的项目?

EJAY

installation plugins maven

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