Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 通过http连接到远程数据库的富客户端(swing)应用程序_Web Services_Http_Jakarta Ee_Java - Fatal编程技术网

Web services 通过http连接到远程数据库的富客户端(swing)应用程序

Web services 通过http连接到远程数据库的富客户端(swing)应用程序,web-services,http,jakarta-ee,java,Web Services,Http,Jakarta Ee,Java,我有一个本地客户端j2se应用程序,后端是derby(javadb)数据库,dao是jpa eclipselink。 如何将这些数据库pojo发送到与tomcat服务器上的spring(jsp)应用程序链接的远程数据库 简单地说,这是一个带有swing的富客户端,它连接到tomcat部署的web应用程序。客户端应接收数据,并通过HTTP请求将数据发送到服务的服务器端, 最好的解决方案是什么 01)使用Eclipselink通过套接字直接连接数据库/事务 02)网络服务?? 03)只需将post请

我有一个本地客户端j2se应用程序,后端是derby(javadb)数据库,dao是jpa eclipselink。 如何将这些数据库pojo发送到与tomcat服务器上的spring(jsp)应用程序链接的远程数据库

简单地说,这是一个带有swing的富客户端,它连接到tomcat部署的web应用程序。客户端应接收数据,并通过HTTP请求将数据发送到服务的服务器端, 最好的解决方案是什么

01)使用Eclipselink通过套接字直接连接数据库/事务 02)网络服务?? 03)只需将post请求发送到SpringWeb应用程序,并将其转换为POJO并持久化到数据库


我如何做到这一点呢?

免责声明我不建议您将应用程序从Spring移植到EJB。尽管人们喜欢将它们单独作为一个或另一个进行比较,但您可以同时使用它们。这是你的应用程序,你可以想做什么就做什么:)

如果需要,您不必使用Web服务。您还可以将OpenEJB war文件放到Tomcat中,并创建一个远程EJB来来回发送数据

一旦你加入OpenEJB,你就可以在你的应用程序中放入一个远程@Stateless bean,如下所示:

@Stateless
@Remote
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");

InitialContext ctx = new InitialContext(p);

MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
然后从Swing应用程序中查找并通过HTTP执行,如下所示:

@Stateless
@Remote
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");

InitialContext ctx = new InitialContext(p);

MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
客户端您只需要openejb war文件和您自己的类中的openejb-Client.jar和javaee-api.jar

因为它已经是一个Spring应用程序,所以不要费心尝试使用
@PersistenceContext
获取对EntityManager的引用,以便EJB可以使用它。只需了解如何通过任何可能的方式将Spring创建(或您创建)的EntityManagerFactory公开给EJB即可。直接、难看但有效的方法是MyBean类上的一个静态方法和设置它的一点启动逻辑。您只需要使用EJB进行远程处理,因此不需要更高级的集成

如果您确实需要用于非java通信的web服务或其他内容,您可以将
@WebService
添加到bean的顶部,然后它将具有WSDL以及为其生成的所有内容:

@Stateless
@Remote
@WebService(portName = "MyBeanPort",
    serviceName = "MyBeanService",
    targetNamespace = "http://superbiz.org/wsdl"
    endpointInterface = "org.superbiz.MyBeanRemote")
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
然后还可以将同一个bean用作web服务,如:

Service service = Service.create(
        new URL("http://tomcatserver:8080/MyBeanImpl?wsdl"),
        new QName("http://superbiz.org/wsdl", "MyBeanService"));
assertNotNull(service);

MyBeanRemote myBean = service.getPort(MyBeanRemote.class);

这两种方法都是通过http实现的,但是web服务方法会慢一点,因为它不是二进制协议。

免责声明我建议您将应用程序从Spring移植到EJB。尽管人们喜欢将它们单独作为一个或另一个进行比较,但您可以同时使用它们。这是你的应用程序,你可以想做什么就做什么:)

如果需要,您不必使用Web服务。您还可以将OpenEJB war文件放到Tomcat中,并创建一个远程EJB来来回发送数据

一旦你加入OpenEJB,你就可以在你的应用程序中放入一个远程@Stateless bean,如下所示:

@Stateless
@Remote
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");

InitialContext ctx = new InitialContext(p);

MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
然后从Swing应用程序中查找并通过HTTP执行,如下所示:

@Stateless
@Remote
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://tomcatserver:8080/openejb/ejb");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");

InitialContext ctx = new InitialContext(p);

MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
客户端您只需要openejb war文件和您自己的类中的openejb-Client.jar和javaee-api.jar

因为它已经是一个Spring应用程序,所以不要费心尝试使用
@PersistenceContext
获取对EntityManager的引用,以便EJB可以使用它。只需了解如何通过任何可能的方式将Spring创建(或您创建)的EntityManagerFactory公开给EJB即可。直接、难看但有效的方法是MyBean类上的一个静态方法和设置它的一点启动逻辑。您只需要使用EJB进行远程处理,因此不需要更高级的集成

如果您确实需要用于非java通信的web服务或其他内容,您可以将
@WebService
添加到bean的顶部,然后它将具有WSDL以及为其生成的所有内容:

@Stateless
@Remote
@WebService(portName = "MyBeanPort",
    serviceName = "MyBeanService",
    targetNamespace = "http://superbiz.org/wsdl"
    endpointInterface = "org.superbiz.MyBeanRemote")
public class MyBean implements MyBeanRemote {
    //...
}

public interface MyBeanRemote {
   // any methods you want remotely invoked
}
然后还可以将同一个bean用作web服务,如:

Service service = Service.create(
        new URL("http://tomcatserver:8080/MyBeanImpl?wsdl"),
        new QName("http://superbiz.org/wsdl", "MyBeanService"));
assertNotNull(service);

MyBeanRemote myBean = service.getPort(MyBeanRemote.class);
这两种方法都是通过http实现的,但是web服务方法会稍微慢一点,因为它不是二进制协议