我有一个Java程序,使用SSL/TLS连接到Web服务器,并通过该连接发送各种HTTP请求.服务器是localhost并使用自签名证书,但我的代码使用自定义TrustManagers,并忽略无效证书.它一直运作到现在.
服务器上的唯一区别是它曾用于运行jboss 6并且现在正在运行jboss 7.我不确定这是否是配置问题,或者我的代码是否有问题,但如果我的代码有问题,我会得到相同的错误我尝试使用其他基于Java的程序(如WebScarab或ZAP)进行连接.
在任何情况下,我可以对我的代码做些什么来解决这个问题?这是完整的错误:
Received fatal alert: handshake_failure
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
以下是失败前的调试消息:
main, WRITE: TLSv1 Handshake, length = 75
main, WRITE: SSLv2 client hello message, length = 101
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT: fatal, handshake_failure
Run Code Online (Sandbox Code Playgroud) ...没有实际阅读和解析 persistence.xml
我可以EntityManager
使用它的工厂属性检索一个持久性单元的名称.我可以使用jboss-as-controller-client检索可用的数据源.但我发现没有API会给我一个特定的数据源EntityManager
.
一个String
一个名字就足够了.
谢谢
我在JBoss 7.1.1.Final上使用Hibernate 4.0.1.Final而不是JPA 2.
编辑:我想尽可能避免从JPA转向Hibernate API.
编辑:奥古斯托的解决方案工作,我有一些关于细节的注释:EM的铸造因为ClassCastException
:( org.jboss.as.jpa.container.TransactionScopedEntityManager cannot be cast to org.hibernate.ejb.EntityManagerImpl
)而无效,但它适用于检索到的工厂.所以我省略了第1步.
我也找不到从实例中检索数据源名称的方法.所以我不得不满足于目录名称:connectionProvider.getConnection().getCatalog();
我有一个使用JBoss AS 7.1的JAX-RS应用程序,以及包含Dates(java.util.Date)的POST/GET JSON和XML对象:
@XmlRootElement
@XmlAccessorType(XmlAccessField.FIELD)
public class MyObject implements Serializable
{
@XmlSchemaType(name = "dateTime")
private Date date;
...
}
Run Code Online (Sandbox Code Playgroud)
当我在get方法上使用@Produce("application/xml")时,objets被序列化为XML并且日期被转换为ISO-8601字符串(例如"2012-12-10T14:50:12.123 + 02:00") ).
但是,如果我在get方法上使用@Produce("application/json"),则JSON对象中的日期是时间戳(例如"1355147452530")而不是ISO-8601字符串.
如何配置JAX-RS实现(RESTEasy)以JSON格式将日期序列化为ISO-8601字符串而不是时间戳?
谢谢您的回答.
注意:我还尝试使用自定义JAX-RS提供程序为日期执行JSON序列化
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJsonDateProvider implements MessageBodyWriter<Date>
{
...
}
Run Code Online (Sandbox Code Playgroud)
这个提供程序似乎是由RESTeasy在JBoss初创公司注册的:
[org.jboss.jaxrs] Adding JAX-RS provider classes: package.CustomJsonDateProvider
...
[org.jboss.resteasy.cdi.CdiInjectorFactory] No CDI beans found for class package.CustomJsonDateProvider. Using default ConstructorInjector.
Run Code Online (Sandbox Code Playgroud)
但它永远不会被使用!
我在jboss上部署工件时遇到了一个奇怪的问题.在IntelliJ中生成默认的spring-mvc项目之后,我尝试运行它,但IntelliJ在"运行/调试配置"中显示一条消息,表明我的"Artifact XYZ:war爆炸的扩展名无效".
我在stackoverflow"更改扩展"上找到了建议,但我有正确的.war
扩展名.
怎么了?
我定期得到错误:
错误JDBCExceptionReporter - > javax.resource.ResourceException:IJ000453:无法获取java的托管连接:jboss/datasources/myDB 08:12:05,928 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[ default-host].[/ mySoftware].[jsp]](ajp - xx.255.0.yyy-8109-21)Servlet jsp的Servlet.service()抛出异常:javax.resource.ResourceException:IJ000655:没有托管连接在org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:377)等配置的阻塞超时(30000 [ms])内可用.
.
所以,我有下一个数据源配置.在JBoss AS上:
<datasource jta="true" jndi-name="java:jboss/datasources/myDB" pool-name="ssbs-pssbs" enabled="true" use-ccm="true">
<connection-url>jdbc:postgresql://xx.255.0.yyy/myDatabase</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-jdbc4</driver>
<pool>
<min-pool-size>30</min-pool-size>
<max-pool-size>150</max-pool-size>
<prefill>true</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>tick</user-name>
<password>tack</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
Run Code Online (Sandbox Code Playgroud)
在我的Postgres服务器上我允许500上的max_connection.为什么我得到这个例外?
我正在使用"./standalone.sh -c standalone-full.xml"来启动JBOSS.在这种情况下,重启jboss的最简洁方法是什么?您可以分享的任何脚本?
启动jboss服务器时,它会出现错误无法启动服务jboss.deployment.unit."jbpm-console.war".但是,当我使用start.demo运行jbpm6演示时,它的工作正常.
23:43:41,042 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."jbpm-console.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."jbpm-console.war".PARSE: Failed to process phase PARSE of deployment "jbpm-console.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09]
Caused by: org.jboss.msc.service.ServiceNotFoundException: Service service jboss.ejb.default-resource-adapter-name-service not found
at org.jboss.msc.service.ServiceContainerImpl.getRequiredService(ServiceContainerImpl.java:447) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.getDefaultResourceAdapterName(MessageDrivenComponentDescriptionFactory.java:273)
at org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.processMessageDrivenBeanMetaData(MessageDrivenComponentDescriptionFactory.java:244)
at org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.processBeanMetaData(MessageDrivenComponentDescriptionFactory.java:88)
at org.jboss.as.ejb3.deployment.processors.AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.processBeanMetaData(AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.java:65)
at org.jboss.as.ejb3.deployment.processors.AbstractDeploymentUnitProcessor.processDeploymentDescriptor(AbstractDeploymentUnitProcessor.java:143)
at org.jboss.as.ejb3.deployment.processors.AbstractDeploymentUnitProcessor.deploy(AbstractDeploymentUnitProcessor.java:84)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more
23:43:41,104 INFO [org.jboss.as] (MSC service thread 1-6) …
Run Code Online (Sandbox Code Playgroud) 我试图在JPA 2.0(JBoss 7.1.1)中创建一个ManyToMany关系,并在关系中添加一个额外的列(粗体,下面),例如:
Employer EmployerDeliveryAgent DeliveryAgent
(id,...) (employer_id, deliveryAgent_id, **ref**) (id,...)
Run Code Online (Sandbox Code Playgroud)
我不希望有重复的属性,所以我想应用http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to-many-join-table中提供的第二个解决方案.-with-column-using-jpa /.但我不能让它工作,我得到几个错误,如:
该链接上的许多人说它工作正常,所以我想在我的环境中有些不同,可能是JPA或Hibernate版本.所以我的问题是:如何使用JPA 2.0(Jboss 7.1.1 /使用Hibernate作为JPA实现)实现这样的场景?并补充这个问题:我应该避免使用复合键,而是使用普通生成的id和唯一约束吗?
提前致谢.
Obs.:我没有在这里复制我的源代码,因为它本质上是上面链接中的一个副本,只是具有不同的类和属性名称,所以我想这没有必要.
我想知道是否存在(大多数)客观比较JBoss AS 7
和Glassfish 3.x
?
我不关心标准或其实现方面的任何差异,我更多地考虑了启动时间,故障转移,可伸缩性,性能,内存占用,已知问题,管理,安全性,集群等.
真实世界的例子和经验非常受欢迎!
我有一个多对一的关系,我想要可以为空:
@ManyToOne(optional = true)
@JoinColumn(name = "customer_id", nullable = true)
private Customer customer;
Run Code Online (Sandbox Code Playgroud)
不幸的是,JPA将我的数据库中的列设置为NOT NULL.有谁能解释一下?有没有办法让它发挥作用?请注意,我使用JBoss 7,JPA 2.0和Hibernate作为持久性提供程序和PostgreSQL 9.1数据库.
编辑:
我找到了问题的原因.显然,这是由于我在引用实体中定义主键的方式Customer
:
@Entity
@Table
public class Customer {
@Id
@GeneratedValue
@Column(columnDefinition="serial")
private int id;
}
Run Code Online (Sandbox Code Playgroud)
看来,使用@Column(columnDefinition="serial")
主键会自动将引用它的外键设置到NOT NULL
数据库中.将列类型指定为时,这确实是预期的行为serial
吗?在这种情况下,是否有解决方案来启用可为空的外键?
先感谢您.
jboss7.x ×10
java ×3
jpa-2.0 ×3
hibernate ×2
java-ee ×2
jboss ×2
database ×1
datasource ×1
glassfish-3 ×1
jax-rs ×1
jbpm ×1
jpa ×1
json ×1
linux ×1
many-to-one ×1
nullable ×1
orm ×1
resteasy ×1
spring-mvc ×1
ssl ×1
ubuntu-12.04 ×1