我使用Tomee 7.0 plus作为我的服务器。我使用persistence.xml使用jdbc:mysql驱动程序建立与在线MySQL数据库的连接。我正在使用从连接收到的EntityManager,并将其注入我的类UserManager,我正在运行查询。 我没有解决方案,为什么我的查询没有在我的数据库中访问我的实际表。我一直得到的错误是nullpointer。我的persistence.xml有问题吗?因为它似乎没有建立完整的连接...
我没有使用Maven,Spring或Hibernate。我在一个小组项目中,我正在尝试启动和运行这个数据库,并且非常感谢任何输入或想法为什么我的连接没有建立。
这是persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="UserService" transaction-type="JTA">
<jta-data-source>userDataSource</jta-data-source>
<class>edu.neumont.pro280.models.User</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mywebsite.com/trivitup" />
<property name="javax.persistence.jdbc.user" value="trivitup" />
<property name="javax.persistence.jdbc.password" value="password" />
</properties>
</persistence-unit>
</persistence>
我将连接注入到我的UserManager中,当我打印出currentUser时,我得到null。 这是我用来注入连接的UserManager类:
@Stateless
@LocalBean
public class UserManager {
@PersistenceContext(unitName = "UserService")
EntityManager em;
public User findUserByUsername(String user) {
System.out.println("User to find is: " + user);
TypedQuery<User> query = em.createQuery(
"SELECT u FROM User u WHERE u.username=:user", User.class);
query.setParameter("user", user);
List<User> userList = query.getResultList();
User returnUser = null;
System.out.println("list size: " + userList.size());
if (userList.size() == 1) {
for (User user1 : userList) {
returnUser = user1;
}
}
return returnUser;
}
我使用LoginServlet,如果成功检索到用户,将对用户进行身份验证。当我打印出currentUser的用户名时,我得到一个null。
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username = (String) req.getParameter("username");
String password = (String) req.getParameter("password");
User currentUser = userManager.findUserByUsername(username);
System.out.println("This is currentUser... "
+ currentUser.getUsername());
}
感谢您的任何想法或帮助。
答案 0 :(得分:0)
您的错误可能与您同时提供jta-data-source
和显式网址属性有关。
我猜测会发生的事情是JPA正在使用JNDI中绑定到userDataSource
的数据源,而不是persistence.xml
中的属性指定的数据源。您应该仔细检查定义userDataSource
数据源的方式,最好删除显式的URL /用户名/密码属性。
答案 1 :(得分:0)
所以,这个解决方案非常有趣,我仍然不了解所有这些。使用我的persistence.xml完全正确,这是连接到MySQL数据库所需的确切数据,但仍无法正常工作。为了解决这个nullpointer问题,我不得不从我的persistence.xml中提取资源元素并将其解压缩到另一个名为resources.xml的文档中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<Resource id="userDataSource" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://mywebsite.com/trivitup
UserName trivitup
Password password
</Resource>
</resources>
之后,我建立了数据库连接。
答案 2 :(得分:-1)
当Tomee启动时,您可以看到config JPA Persistence Unit的日志。如果没有关于此的日志,请确保您的META-INF目录位于根类路径。