消息关闭
    暂无新消息!
Java新人,想请教一个问题:

上图是代码结构.

package com.user.model;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="USER")
public class User implements Serializable {

private static final long serialVersionUID = -2992495407019337009L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

}

服务器端中有实体类User(序列化),

package com.user.service;

import javax.ejb.Remote;

import com.user.model.User;

@Remote
public interface UserService {

public String saveUser(User user);
public User findUser(int id);
}

接口UserService(@Remote),

package com.user.service.impl;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.user.model.User;
import com.user.service.UserService;

@Stateless(mappedName="UserService")
public class UserServiceBean implements UserService {

@PersistenceContext(unitName="test")
private EntityManager entityManager;

public String saveUser(User user) {
entityManager.persist(user);
return user.getUsername();
}

public User findUser(int id) {
User user = entityManager.find(User.class, id);
return user;
}

}

实现UserServiceBean(@statless).

SessionBean已经成功发布在GlassFish上.

package com.user.manager;

import javax.naming.InitialContext;

import com.user.model.User;
import com.user.service.UserService;

public class UserManager {

public static void main(String[] args) throws Exception {
InitialContext initialContext = new InitialContext();
UserService userService = (UserService) initialContext.lookup("UserService");

//Insert record
// User user = new User();
// user.setUsername("Zhangsan");
// userService.saveUser(user);

//Find record
User user = userService.findUser(3);
System.out.println(user.getId() + " " + user.getUsername());
}
}

以上是客户端代码.但运行第一部分insert record是传入User实体对象的时候,在服务器端总是空值.

以上1,2两条是插入的数据,因为id是自动生成的,但username一直是空值.
May 27, 2017 11:36:23 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
3 wangwu
如果运行第二部分find record时,能查出数据库里的记录.

这是什么问题,我哪里做错了,请前辈指教.

8个回答

︿ 3
你从glassfish管理后台看看ejb的名字,应该更长一些

这个说明数据库驱动有问题,看看数据源配置
May 27, 2017 11:36:23 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.

你做插入的时候,打印一下信息,save是有返回值的
︿ 3
本人完全是自学的,如果问题问得太LOW,也请前辈不吝指教.这个问题我反复试了好几天也没能解决.
︿ 0
现在用javaEE的人很少,所以没人解答

http://blog.jelastic.com/2013/10/15/remote-access-to-enterprise-java-beans-on-glassfish-server/

你访问的不是服务器上的ejb,访问服务器上EJB需要设置InitialContext 参数,就是服务器域名/IP,端口。并采用服务器上的EJB的jndi名
︿ 0
以下是我的JDNI的属性文件

java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
org.omg.CORBA.ORBInitialHost=192.168.93.8
org.omg.CORBA.ORBInitialPort=3700