Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
如何在Java服务层中访问Grails域类?_Grails_Grails Domain Class - Fatal编程技术网

如何在Java服务层中访问Grails域类?

如何在Java服务层中访问Grails域类?,grails,grails-domain-class,Grails,Grails Domain Class,如何在Java/Spring中的服务层中使用grails域类(groovy中的)呢 当使用GrailsMVC时,一切都很好,因为我可以使用controller访问域对象并调用CRUD和其他动态方法。但是,我想知道的是,是否有一种干净的方法可以从Java(比如服务层)实现这一点。例如,我可能想开发一个报告框架,在这个框架中我需要使用域对象来访问数据库 我希望问题是清楚的。这应该是每个人在一个规模合理的项目中都必须面对的标准问题。我只是想知道它是怎么解决的也许我遗漏了什么 谢谢。org.codeha

如何在Java/Spring中的服务层中使用grails域类(groovy中的)呢

当使用GrailsMVC时,一切都很好,因为我可以使用controller访问域对象并调用CRUD和其他动态方法。但是,我想知道的是,是否有一种干净的方法可以从Java(比如服务层)实现这一点。例如,我可能想开发一个报告框架,在这个框架中我需要使用域对象来访问数据库

我希望问题是清楚的。这应该是每个人在一个规模合理的项目中都必须面对的标准问题。我只是想知道它是怎么解决的也许我遗漏了什么


谢谢。

org.codehaus.groovy.runtime.InvokerHelper让这变得非常简单;请参阅此邮件列表线程:

示例代码片段:

import my.package.User
import org.codehaus.groovy.runtime.InvokerHelper;


List allInstances = (List)InvokerHelper.invokeMethod(User.class, "list", null)); 


User one=(User)InvokerHelper.invokeMethod(User.class, "get", id); 

当as
InvokerHelper
运行良好时,如果您有权访问GORM类,我会在GORM调用周围放置包装函数,那么Java类将看到这一点

static String List getAll() { return User.list() }
static String User getByID(long id) { return User.get(id) }

这看起来更简洁,而且不会在Java代码中依赖Groovy类。

谢谢您的回答。然而,在grails应用程序中的一个主类中尝试了以下代码-(List)InvokerHelper.invokeMethod(SecUser.class,“List”,null)之后,我得到了“MissingMethodException”,它似乎是合乎逻辑的,因为SecUser域类中没有“List”方法。你能解释一下我应该如何获得“实际的”域对象,这样我就可以使用上面的方法来访问它的动态方法吗?谢谢你的意思是说你在一个带有main()方法的类中从命令行运行它吗?这是行不通的——Grails应用程序必须运行。InvokerHelper只是为您找到元类方法并调用它,就像您从Groovy调用它一样,但这取决于连接的所有内容。为了测试这一点,您可以创建一个调用Java类的临时控制器,并从浏览器中调用该控制器。谢谢Burt。这是可行的。但我试图做的是从独立Java程序(main方法)访问grails域类及其CRUD方法。有什么方法可以做到这一点吗?我可以想到几个场景,其中可能需要访问独立java程序中的DAO类。现在,如果在使用GORM的grails中,域类是DAO类,那么必须有一种方法以独立的方式访问它们(可能在调用方法之前连接grails应用程序上下文)。你能不能建议一种方法,也许举个例子?非常感谢。你可以看看1.1中介绍的“Standlone GORM”;请参阅@BurtBeckwith我意识到这个问题已经存在了2年,但正是这个问题促使我尝试使用Spring集成服务激活器中的InvokeHelper(请参阅)。InvokeHelper是否仅限于域类,或者我可以使用它来调用控制器类中的方法。我正在努力研究如何将参数传递给实例控制器操作。我可以将它们传递给静态操作,但是这些静态操作无法访问诸如save()之类的AST方法。你能解释一下吗?