我要做的是编写一些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) 我有以下简单的JPA实体:
@Entity
@Table( name = myentity_table )
public class MyEntity {
private double a;
private double b;
//(...)
}
Run Code Online (Sandbox Code Playgroud)
a和b可以设置为Double.POSITIVE_INFINITY.当我尝试使用标准实体管理器将具有双重设置的实体存储到数据库(MySQL)中时,我得到异常:
java.sql.SQLException:'Infinity'不是有效的数值或近似数值
据我所知,MySQL可能不支持NaN/-INF/+ INF数字.有没有办法存储这个实体而不编写HQL查询并将+ INF转换为null(或max double)?理想情况下,我想像往常一样通过实体经理来做.
提前致谢.
我开发了一些基于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
我有一个组件扫描配置如下:
@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) 我尝试使用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
为了不重复代码,我前段时间已经决定重构我对编辑器框架使用的看法.目前,每个视图都是包含其他编辑器的编辑器.例如,"人员详细信息"视图包含诸如"人员地址","人物图像","人物描述"等编辑器.这些编辑器中的每一个都包含一些标准GWT小部件以及实例化和显示这些小部件所需的逻辑.
现在,我想在"人员列表"视图中重用其中一些组件.所以,我想要一张表格代表人物的表 - 一行 - 一个人.每行应包含例如:人名,姓,图像(编辑),简短描述(编辑).
是否可以使用GWT CellTable这样做?当我浏览官方和非官方文档时,很容易注意到它主要用于处理HTML代码而不是小部件.
提前致谢
我尝试使用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) 我一直在看谷歌,并没有真正指出这个问题.当我运行"mvn clean install"时,它返回以下错误.
[错误] Unresolveable新建扩建:插件org.sonatype.flexmojos:的Flexmojos - Maven的插件:3.8或它的一个依赖无法解析:无法收集org.sonatype.flexmojos依赖关系:的Flexmojos - Maven的插件:罐子: 3.8()
我正在试图弄清楚如何导入maven插件flexmojos,但没有明确的指示如何做到这一点.
如何将此插件导入我的项目?
EJAY
java ×3
classpath ×1
datagram ×1
ejb ×1
gwt ×1
gwt-editors ×1
infinity ×1
installation ×1
jboss ×1
jpa ×1
maven ×1
maven-2 ×1
maven-plugin ×1
mysql ×1
openejb ×1
plugins ×1
reflection ×1
spring ×1
transactions ×1
udp ×1
unit-testing ×1
xml ×1
xslt ×1