我正在使用Hibernate/Java将实体持久化到数据库.该实体有一个密码字段,它是一个字符串.在我的应用程序中注册用户时,我使用SHA-1哈希密码(我承认这有点弱).这将产生一个字节[]我再转换为字符串使用
new String(byte[] arr);
每当我想在注销用户,我只是从数据库中检索哈希密码(如字符串),并将其与输入密码的摘要在登录时使用比较
hashedPasswordFromDatabase.equals(SHA1_HASH(inputPassword));
这工作完全在我的开发系统(Windows 7中,JDK 1.6.0_23/JDK 1.7中,MySQL 5.5,Tomcat的6.0.26),但在我们的服务器上部署它(在Linux上运行JDK 1.6)中,等号方法从不计算真实的,即使对于相同的密码.我快速设置了一个新的开发系统(Ubuntu 12.04,MySQL 5.5,JDK 1.7.0_03,Tomcat 7.0.22),它也不能在那里工作.
我知道String类文档中针对String类所述的可能的编码问题,并且在SO的几个地方也有说明.我在这个论坛上尝试了几种编码(例如Base64,Latin-1),最后我得到了UnsupportedEncodingException.我想我最好避免String转换.那么我如何设计我的数据库,以便Hibernate生成的实体类为密码字段而不是字符串提供byte []?
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么他们必须通过支持数组{O(n)}进行循环才能使每个元素有资格进行垃圾回收,因为它们可以重新初始化后备数组,从而丢弃对整个数组的引用{ O(1)}并使其有资格进行垃圾收集?O(n)表现对clear()
我来说似乎不太好或者我错过了什么?
在互联网上如此笨拙之后,令人惊讶的是,我找不到使用带有ActiveMQ(Artemis)的WildFly 10中的JMS推送到远程消息队列的示例配置.为了恶化这种情况standalone-full.xml
并不局限于一个模式(为什么???),当我最终在GitHub上找到它的XSD时,它不包含任何文档,说明每个节点/属性的含义以及可以放入什么值.
以下是standalone-full.xml的原始配置.
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<server name="default">
<security-setting name="#">
<role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/>
</security-setting>
<address-setting name="#" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/>
<http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
<http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
<connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/>
<pooled-connection-factory name="activemq-ra" transaction="xa" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm"/>
</server>
</subsystem> …
Run Code Online (Sandbox Code Playgroud) 我写了一个服务器端应用程序,为网站和多个移动客户端提供支持.我使用Hibernate进行数据访问.我后来发现应用程序在一天后失败了!当我在网上查看时,我发现它是一个众所周知的问题,MySQL在8小时后终止了"陈旧"的连接.为了避免这种情况,我发现了许多建议,比如包括?autoReconnect=true
,使用c3P0
等.由于autoReconnect
正式气馁(特别是在生产环境中),并且因为它在我应用时没有任何效果,我决定去c3p0
.不幸的是,c3p0
在我的hibernate.cfg.xml
文件中引入配置后,应用程序开始NullPointerException
在我的代码中抛出一个我调用的地方.dbSession.close()
这意味着HibernateUtil.getSessionFactory()
实际返回null
.我添加了所需的jar(c3p0-0.9.2-pre2.jar,hibernate-core-3.3.1.GA.jar,hibernate-c3p0-3.3.2.GA.jar,mchange-commons-java-0.2.1 .jar和c3p0-oracle-thin-extras-0.9.2-pre2.jar)即使我不认为所有这些都是必需的.我已经浏览了许多讨论过这个问题的网页,但我仍然无法正确设置它.请帮助我使用"初学者友好"易于实现的逐步程序来设置c3p0
Hibernate.我在JDK 1.6,MySQL 5.5上使用Hibernate 3.3.6,我在Netbeans 7.0中开发.
这是我的 hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/religion_app</property>
<property name="hibernate.connection.username">*****</property>
<property name="hibernate.connection.password">*****</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="connection.autoReconnect">true</property>
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
<!-- configuration pool via c3p0-->
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">120</property> <!-- seconds -->
<property …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下堆栈进行集成测试:
App server: Embedded WildFly
CDI container: Weld
Database: In-memory H2
ORM: Hibernate/JPA
Platform: Java 8
OS: Mac OS X 10.10
Run Code Online (Sandbox Code Playgroud)
我已经使用 Arquillian 设置了基本的集成测试(如此处所示),并且我能够注入依赖项,但注入EntityManager
被证明是一个挑战。取消引用实体管理器字段始终会产生NullPointerException
.
我看过很多文章(包括这篇和这篇),但我仍然无法让这个看似简单的事情发挥作用。
请看下面我的pom.xml
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-7.0</artifactId>
<version>1.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<!-- JUnit Container Implementation for the Arquillian Project -->
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
<version>1.0.0.CR3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-persistence-dbunit</artifactId>
<version>1.0.0.Alpha7</version> …
Run Code Online (Sandbox Code Playgroud) 我需要在我的结果提取中实现分页,所以在浏览时,我在Google Developer网站上获得了Query Cursors的链接,但文章解释了使用低级API的Query Cursors的使用(我避免像瘟疫这样的事情) .我在JDO上看到的所有setRange(start, end)
内容(如果我是对的)都不是那么有效,因为你仍然需要支付在获取和丢弃范围之前的结果所涉及的开销.如何在App Engine数据存储区之上使用JDO中的Query Cursors?
我知道为什么这些组件被称为重量级组件.我真正感兴趣的是为什么它们没有实现为轻量级.谢谢