我想知道我需要做什么才能访问数据库线程安全。
这是我的Entity类:
@Entity
@Table(name = "students")
@NamedQuery(name = "Student.getAll", query = "SELECT s FROM Student s")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(length = 32, name = "name")
private String name;
// ... constructor, getters and setters, toString ...
}
这是DbService类:
public class DbService {
public EntityManager em = Persistence
.createEntityManagerFactory("MyPersistenceUnit")
.createEntityManager();
public Student add(Student student) {
EntityTransaction tx = em.getTransaction();
tx.begin();
Student studentFromDb = em.merge(student);
tx.commit();
return studentFromDb;
}
public void delete(long id) {
EntityTransaction tx = em.getTransaction();
tx.begin();
em.remove(get(id));
tx.commit();
}
public Student get(long id) {
return em.find(Student.class, id);
}
public void update(Student student) {
EntityTransaction tx = em.getTransaction();
tx.begin();
em.merge(student);
tx.commit();
}
public List<Student> getAll() {
TypedQuery<Student> namedQuery =
em.createNamedQuery("Student.getAll", Student.class);
return namedQuery.getResultList();
}
}
这是与DbService一起使用的类:
public class SomeDbWorker implements Runnable {
@Override
public void run() {
DbService service = new DbService();
// do something ...
service.add( ... );
service.delete( ... );
service.getAll();
// ...
}
}
不需要同步任何东西
实体管理器不是threadSafe,而是设计为针对每个工作单元实例化并在之后销毁。
相反,工厂的创建成本很高,应该重新使用
我构建了这个“节流”任务运行器,它在HashMap中收集一些数据,同时(每分钟)将数据“带走”并清除HashMap。在我的测试中,我注意到executor部分可以停止,并且永远不会再次清除HashMap。我假设这是因为我所做的HashMap修改不是线程安全的,它在内部崩溃,没有恢复。我正在两个线程中修改HashMap。有人能告诉我如何优化HashMap修改的正确方向吗。
问题内容: 我正在编写一个Servlet,该Servlet通过访问和修改数据库中的某些表来处理每个请求。我希望与数据库的连接是线程安全的。我不想为此使用已经存在的库/框架(spring,hibernate等)。 我知道我可以通过以下方式为此使用java的ThreadLocal: 每次调用时,新连接都会添加到对象中,然后在释放连接时将其删除。 这是这样做的正确方法,还是它本身应该扩展类?还是有一种更
我不太确定如何使用actors访问数据库。在Akka的文档和书籍中,这个主题似乎被省略了。 一种解决方案可以是无状态参与者中的包装DAO。例如,对于数据库中的每个表(或域对象类型或聚合类型),可以创建一个负责所有CRUD操作的参与者。这种方法的一个变体可以是命令和查询的分离。例如,对于每个数据类型,1个命令参与者(用于并发)和10个查询参与者(用于并行性)。 另一种方法可以是创建只表示数据库中一行
问题内容: 我已经开发了一个 JAVA SWING应用程序 。我想在安装此应用程序 几台电脑 ,所有 访问互联网 。那么我应该在哪里放置MYSQL数据库?所有这些计算机都应该能够 通过Internet访问相同的数据库。 问题答案: 出于安全性(身份验证授权,加密)和性能的原因,允许直接通过Internet访问数据库不是很常见。在大多数情况下,您将创建一个基于Web的服务器应用程序,该应用程序可以执
我正在尝试使用Google API获得<code>离线访问</code>。我必须从谷歌日历中提取数据,而无需用户每次登录。 我已将以下内容添加到我的 Gem 文件中: https://accounts.google.com/o/oauth2/auth?access_type=offline 我错过什么了吗?
问题内容: 我目前正在为我教会的大学团体使用一个网站,并且开始对我所写内容的安全性有些担心。例如,我使用以下功能: 每当我进行某种查询时就连接到数据库。我总是使用PDO准备好的语句来防止任何用户输入的SQL注入,并且我使用htmlspecialchars进行转义,然后再输出。我的问题是: 如何保护数据库的用户名和密码? 我不知道是否有人可以查看我的PHP文件的源,但如果可以,我只能想象我会被缠住。