我在Jenkins中设置了一个大的Maven多模块构建.它是为增量构建而设置的.
触发后,它会解析所有POM并找出需要构建的内容.
它目前设置为触发SCM更改.
我想进行此构建,以便我可以执行以下操作:
我提到了第二点,因为从我看文档来看,这似乎只是戳了一般的构建并让它做了它的事情.(我可能错了.)我宁愿告诉詹金斯究竟发生了什么变化,并让詹金斯"知道"这些更改的存储库路径映射到哪些模块,这样Jenkins就不必进行轮询或额外的pom.xml解析以弄明白.
我已经准备好让一个经历过这场战争的人告诉我,看看,只是设置Subversion提交钩子,这就像你将要获得的一样好,但我问这个问题以防万一更好的食谱.
我正在尝试使用Tomcat,它目前作为服务在Windows 2003机器上运行,转储堆上OutOfMemoryError.
(Tomcat正在运行Hudson,它正在我的构建的尾端报告堆空间问题.手动运行构建不会产生这样的错误.Hudson家伙需要堆转储才能开始.)
正如其他地方所指示的那样,我已经告诉Apache Service Monitor配置JVM,它OutOfMemoryError通过在JVM选项中添加以下内容来运行Tomcat来转储堆:-XX:+ HeapDumpOnOutOfMemoryError然后我再次运行构建.果然,它报告存在堆错误.我扫描整个磁盘,寻找默认java_pid123.hprof文件(显然123由JVM的PID代替).任何.hprof地方都没有文件.
我遇到了陷阱22:我需要哈德森人员的堆转储来修复他们的内存泄漏,但如果我在Tomcat下运行Hudson,我就无法获得堆转储.
当Tomcat作为Windows服务运行时,是否有一些特殊方法可以在OutOfMemoryError上从中获取堆转储?
我尝试过的另一件事是在Startup和Shutdown选项卡上告诉它使用"Java"选项而不是"jvm"选项.我相信这应该告诉Service Manager尝试使用Java可执行命令启动Tomcat而不是jvm.dll直接启动它.当我这样做时,服务将无法启动.
当然其他人有类似的问题?
我没有看到一个选项javax.xml.stream.XMLEventWriter或javax.xml.stream.XMLOutputFactory以某种方式设置,以便写入空元素(而不是显式的开始和结束元素对).
我看到Woodstox有一个属性可以做到这一点,但它没有标准化.
我错过了任何明显的方法吗?
Glassfish JDBC领域具有您可以设置的几个不同属性.
我对摘要算法和密码加密算法属性感兴趣(这就是它们在管理控制台中的显示方式).
第二个是Glassfish 3.1.2的新版本,尽我所知.
我查阅了官方的Glassfish 3.1.1文档,但它没有解决新属性,也没有真正解释第一个属性的用途.
有一个文档错误引用了一个错误号(13363269),它必须指向一个已经失效的错误系统,因为我找不到它引用的错误.这个幻像错误可能会详细说明密码加密算法属性的用途,但唉似乎已经失去了时间的迷雾.
在命令行中,该场所被命名(不大可能)digestrealm-password-enc-algorithm.看起来这将住在酒店旁边digest-algorithm.
我试图阅读源代码,但JDBCRealm.java文件似乎丢失了,虽然我无疑只是在错误的地方找.我发现的先前副本并未在任何地方引用该属性.
这两个属性是什么? 我有一种朦胧的感觉,他们一起确保如果我使用领域以明文密码登录,我可以以某种方式将散列和比较操作委托给领域,前提是哈希用于存储原始密码和用于输入密码的哈希以相同的方式计算.
该手册还指出,如果我想使用摘要式身份验证,我应该指定jdbcDigestRealmJAAS上下文.如果我不想使用摘要式身份验证,那么我应该指定jdbcRealmJAAS上下文.在我看来,这看起来是另一个我有效指定涉及哪种哈希算法的地方.
提前感谢任何指针.
问题很简短. 为什么SOCKS感知套接字实现是抽象java.net.Socket类实现的默认选择? 天真地,我期待java.net.PlainSocketImpl.
背景有点复杂.
我正试图杀死GLASSFISH-12213(或者我真的想要解决它).错误本身的细节不是很重要 - 有一个本地库不是线程安全的,并且来自GlassFish编写的LDAP领域的一些并发使用会使JVM崩溃.
为了解决这个问题,我开始倒退了:我可以避免首先调用本机库吗?这导致我出于各种原因来看待sun.net.spi.DefaultProxySelector,它负责为给定的URI找到合适的代理(或不代理).在那里有一个位置,它进行本机方法调用,这就是JVM崩溃发生的地方.如果我可以避免这个电话,我会做生意.
我可以避免这种呼叫的一种方法是,如果我能确保sun.net.spi.NetProperties.getBoolean("java.net.useSystemProxies")虚假的价值.如果是这种情况,那么我之前提到的本机方法将不会被调用. false是默认值,我根本没有修改过这方面的任何内容.
(所以实际情况就是如此;在我在机器上运行的GlassFish实例中证明了这一点,我发现了这个bug.我不知道这段代码是如何可能仍然加载本机库的;这是另一天的主题.)
所以,在那条路上,我进一步支持:URI scheme在DefaultProxySelector.select(uri)呼叫中传递了什么协议?也许我可以以某种方式影响愚蠢的事情仍然以某种方式跳过本地电话.
事实证明,协议是socket(我以为它可能是类似的ldap,但没有).这个事实和我的反驳假设告诉我,在LDAP-realm-land中的某个地方正在手工打开一个直接套接字(即不使用像某个HttpUrlConnection或其他抽象的东西).果然,Sun编写的LDAP-JNDI桥就是这样做的; 传入的URI是socket://somehost:389.
所以尽管事实上我没有设置任何代理信息,配置任何东西或做除了使用直接默认值以外的任何事情,但事实证明JDK尝试使用SOCKS代理. 有关详细信息,请参阅第setImpl()java.net.Socket364行SocksSocketImpl.java和第364行中的方法并进行跟踪.
(这最终表明我可以通过简单地将一个socksNonProxyHosts=*系统属性添加到混合中来跳过整个代码路径.Jeez,这种行为不应该是默认的吗?)
结果 - 并且再次认为,尽管我或GlassFish没有对配置进行任何更改,但DefaultProxySelector出于某种原因hasSystemProxies设置了true其字段,由花园种类的Sun LDAP连接创建的花园种类套接字导致本机查找对于SOCKS代理服务器.也许这只是我,但这让我感到疯狂.
所有读过这篇文章的人 …
我有点高兴地偶然发现Constable了 JDK 15 之类的东西。我基本明白了。
在翻遍了所有编译器理论甚至理解了一点之后,我发现我仍然有一个问题:谁调用 aConstable的describeConstable()方法,何时调用? Brian 的演示似乎暗示它在编译时以某种方式被访问。对这些事情太天真了,我期待它出现在使用页面下jdk.compiler或其他东西中。相反,唯一的消耗似乎是在jdk.incubator.foreign包中。(显然,我知道它可能会被使用页面未公开的某些私人机器使用;因此我的问题。)
我放在Thread.dumpStack()一个describeConstable()哑类的实现,实现Constable和回报Optional.ofNullable(null)只是为了看看会发生什么,......什么都没有发生在编译期或运行时。
(我确实知道,在 JDK 12 之前,如果您想编写动态常量,您必须使用 ASM 或 ByteBuddy 或类似的东西。不过,在我幼稚的眼中,它看起来像是Constable允许您的用户类“插入”Java编译器并允许它为你做不断的写作。我也知道里面的类和方法java.lang.constant主要是为编译器编写者准备的,但Constable在我看来有点例外。最后,我显然明白我可以调用我希望随时使用这种方法,但这显然不是它的目的。)
编辑:(非常)感谢下面一些非常有帮助和耐心的答案和评论,我想我开始明白了(我不是编译器,这点应该很明显)。虽然我知道一旦一个X implements Constableexists的实例,那么ContantDesc它从它的返回describeConstable()必须由其他常量描述符(本身)组成,虽然我知道ClassDesc#of()可以在编译时调用“常量工厂”(例如等等),显然必须只接受其他常量作为他们可能需要的任何参数,我仍然不清楚 X implements Constable首先在编译期间如何实例化任意对象,而......它正在被编译(!)describeConstable() 可以在编译时调用它。
请记住,这个问题的答案可能是我所缺少的关于编译器的基本信息,或者他们在静态分析期间遇到的各种问题。我只看到一个实例方法 …
我在Jersey应用程序中寻找正确的方法 - 从传入的请求中读取标头并自动将其安装在可能由我的应用程序正在使用的JAX-RS客户端发出的任何传出请求中.
理想情况下,我想这样做而不会污染任何类的内部逻辑,所以通过各种过滤器和拦截器.
对于简单的用例,我可以这样做:我有一个ClientRequestFilter我在我的注册实现ClientBuilder,并且该过滤器实现具有:
@Context
private HttpHeaders headers;
Run Code Online (Sandbox Code Playgroud)
...这是一个上下文相关的代理(根据定义),所以在它的filter方法中它可以引用入站请求中存在的标题,它驱动所有这些,并将它们安装在传出请求上.对于简单的情况,这似乎工作正常.
但是,在异步性的情况下,这会失败:如果我使用JAX-RS异步客户端API来生成一堆GETs,则仍然会调用过滤器,但是不能再调用该headers实例变量上的方法; 泽西岛抱怨说,据我们所知,我们不再处于要求范围内.如果将请求范围定义为每个线程,则这是有意义的:生成的GETs在某个Jersey管理的线程池中运行,而不是与headers代理关联的线程在同一个线程上运行,因此代理将IllegalStateException全部抛出我的过滤器尝试与之交谈的地方.
我觉得有一些组合ContainerRequestFilter,并ClientRequestFilter应能够得到即使是在异步的情况下所做的工作,但我没有看到它.
我已经阅读了关于JPA并发性的这篇文章,但要么我太厚,要么不够明确.
我期待做一个数据库控制的原子更新-if-found-else-insert操作(一UPSERT).
它看起来我可怜的慢脑,我可以 - 在一个事务中 - 运行一个锁定模式的命名查询PESSIMISTIC_WRITE,看它是否返回任何结果,然后是a persist()或update()之后.
我不清楚的是使用PESSIMISTIC_WRITE锁和PESSIMISTIC_READ锁进行此操作之间的区别.我已经阅读了句子 - 我明白这PESSIMISTIC_READ是为了防止不可重复的读取,并且PESSIMISTIC_WRITE......好吧,也许我不太了解那个:-) - 但它下面只是一个SQL SELECT FOR UPDATE,是的?在这两种情况下?
这是一个非常谦虚的问题.
有些文章指出,即使是简单的读取操作,也应始终使用数据库事务.这是一个对我来说很有意义的任意示例:http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions Hibernate文档本身也说:
始终使用明确的事务边界,即使对于只读操作也是如此.
好吧,看起来很清楚.这一直是我的假设,即.因为在所有情况下都会在数据库级隐式地应用事务,所以最好总是明确地声明它们.
然后我读了这样的其他文章:http://www.ibm.com/developerworks/java/library/j-ts1/index.html#never(注意标注).这篇文章部分地说:
永远不要把话说绝了
在某些时候,您可能希望为数据库读取操作启动事务,例如,隔离读取操作以确保一致性或为读取操作设置特定事务隔离级别.但是,这些情况在业务应用程序中很少见,除非您遇到这种情况,否则应避免为数据库读取操作启动事务,因为它们是不必要的,并且可能导致数据库死锁,性能低下和吞吐量低.
关于死锁和吞吐量不足的一点也对我有意义.
最低层次的建议相互矛盾.没关系; 作为一个不起眼的应用程序开发人员,我可以在这里构建自己的想法,我认为:更喜欢以前的建议,也许看看给定的ORM /数据库组合是否在某些性能关键的情况下没有事务就能获得更好的性能.如果我错了,请纠正我.
现在我回到应用服务器和XA事务的领域.
如果我有一个只执行只读操作的EJB方法,那么总是将它声明为事务性(遵循上面Hibernate建议的精神)是一种好习惯吗?或者是否将其标记为 @TransactionAttribute(TransactionAttributeType.SUPPORTS)对金属附近的数据库交易策略并不重要?
我的意思是,EJB(JTA)事务发生在应用程序服务器级别.可能是这种情况(我不知道)当Java EE应用程序服务器与Hibernate交互时,Hibernate将始终强制执行显式数据库级事务,而不管应用程序服务器级事务策略到位.所以,在Hibernate为重点的文章中,我已经在这里列举可能并不适用于应用程序服务器级别的JTA事务-也许这是很好的做法,以纪念只读方式作为@TransactionAttribute(TransactionAttribute.SUPPORTS)替代REQUIRED.
这里有什么人的想法?所有指针 - 甚至是基本信息 - 都受到欢迎.
我已经研究过Blaise Doughan关于这个问题的答案,但还有一个问题.
XmlJavaTypeAdapters允许您列出一堆XmlJavaTypeAdapter注释,每个注释管理JAXB如何将不可绑定类型映射到可绑定类型.
您可以在包级别使用此批注.执行此操作时,每个XmlJavaTypeAdapter注释都需要type()完全指定其属性.
似乎没有要求正在注释的包与要调整的不可绑定类型的包有任何关系.这很方便,也很好.
然而,这引出了我的下一个问题:如果注释包与被调整类型的包之间没有关系,那么JAXB如何发现包级XmlJavaTypeAdapters注释?换句话说,它是如何知道哪些包可以咨询潜在的XmlJavaTypeAdapters注释?我可以.jar在我的.ear文件lib目录中创建一个随机包,其中包含一个单独的,巨大的package-info类,该类使用所有不可绑定类型的所有适配器进行注释?