-
1. Re: @in(create=true) not working !
thejavafreak Sep 19, 2007 10:55 PM (in response to panpur)Have you configured your jBPM correctly? AFAIK you need to configure jBPM with Seam in order to use the Actor instance.
-
2. Re: @in(create=true) not working !
panpur Sep 19, 2007 11:09 PM (in response to panpur)yes, i did
but i don't think it's related to jbpm
i've tried using another type like String, etc
and it gives same error, i think the create=true doesn't work
i could be wrong though... -
3. Re: @in(create=true) not working !
thejavafreak Sep 19, 2007 11:26 PM (in response to panpur)No way, I use @In(create=true) too and it works. Did you create your project using seam-gen?
-
4. Re: @in(create=true) not working !
panpur Sep 20, 2007 12:13 AM (in response to panpur)yes, i created the project using seam setup command..
-
5. Re: @in(create=true) not working !
pmuir Sep 20, 2007 6:59 AM (in response to panpur)It's related to jbpm. Post your startup log.
-
6. Re: @in(create=true) not working !
_polly Sep 20, 2007 12:08 PM (in response to panpur)i've just tried upgrading to 2.0.0CR1 from 2.0.0BETA1, and now i'm getting this problem too..
nothing obvious in the startup logs - it looks virtually identical to how it was before upgrading.
do i need to change any of the jbpm config for this new release?
I've got the new jbpm.jar in the lib directory of my ear... here's the relevant bit of build.xml. I've changed this to put the files in the lib directory rather than specify them in the application.xml.<target name="ear" description="Build the EAR"> <copy todir="${ear.dir}"> <fileset dir="${basedir}/resources"> <include name="*jpdl.xml" /> <include name="hibernate.cfg.xml" /> <include name="jbpm.cfg.xml" /> <include name="*.drl" /> </fileset> <fileset dir="${lib.dir}"> <include name="jboss-seam.jar" /> </fileset> <fileset dir="${basedir}"> <!-- seam libraries --> <include name="lib/jbpm*.jar" /> <include name="lib/jboss-el.jar" /> <include name="lib/drools-*.jar"/> <include name="lib/janino-*.jar"/> <include name="lib/antlr-*.jar"/> <include name="lib/mvel*.jar"/> <!-- other libs --> <include name="lib/jfreechart-*.jar"/> <include name="lib/chartcreator-*.jar"/> <include name="lib/jcommon-*.jar"/> <include name="lib/dbunit-*.jar"/> <include name="lib/richfaces-api*.jar" /> </fileset> </copy> <copy todir="${ear.dir}/META-INF"> <fileset dir="${basedir}/resources/META-INF"> <include name="application.xml" /> <include name="jboss-app.xml" /> </fileset> </copy> <copy todir="${ear.dir}/META-INF" overwrite="true"> <fileset dir="${jar.dir}/META-INF"> <include name="version.txt" /> </fileset> </copy> </target>
-
7. Re: @in(create=true) not working !
igx89 Sep 20, 2007 1:07 PM (in response to panpur)Maybe instead of @In(create = true), try
@In(create = true, required = false)? -
8. Re: @in(create=true) not working !
david.spark Sep 24, 2007 9:27 AM (in response to panpur)I get the same problem after upgrading from Seam 2 Beta to CR1. I also the same error for @Out annotated variables too. The full error trace is:
14:25:21,093 ERROR [SeamPhaseListener] uncaught exception javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: In attribute requires non-null value: bookingManager.event at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329) at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:338) at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58) at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:174) at org.jboss.seam.navigation.Pages.callAction(Pages.java:636) at org.jboss.seam.navigation.Pages.preRender(Pages.java:289) at org.jboss.seam.jsf.SeamPhaseListener.preRenderPage(SeamPhaseListener.java:544) at org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPhaseListener.java:455) at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseListener.java:146) at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:116) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:222) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) Caused by: javax.ejb.EJBTransactionRolledbackException: In attribute requires non-null value: bookingManager.event at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:83) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateful.StatefulContainer.localInvoke(StatefulContainer.java:204) at org.jboss.ejb3.stateful.StatefulLocalProxy.invoke(StatefulLocalProxy.java:100) at $Proxy126.bookNewEvent(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.seam.util.Reflections.invoke(Reflections.java:21) at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31) at org.jboss.seam.intercept.ClientSideInterceptor$1.proceed(ClientSideInterceptor.java:76) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.ejb.RemoveInterceptor.aroundInvoke(RemoveInterceptor.java:41) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:54) Caused by: org.jboss.seam.RequiredException: In attribute requires non-null value: bookingManager.event at org.jboss.seam.Component.getValueToInject(Component.java:2169) at org.jboss.seam.Component.injectAttributes(Component.java:1599) at org.jboss.seam.Component.inject(Component.java:1417) at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:45) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.ManagedEntityIdentityInterceptor.aroundInvoke(ManagedEntityIdentityInterceptor.java:48) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.ConversationInterceptor.aroundInvoke(ConversationInterceptor.java:56) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:26) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:27) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 14:25:21,858 ERROR [STDERR] 24-Sep-2007 14:25:21 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
-
9. Re: @in(create=true) not working !
_polly Sep 24, 2007 11:39 AM (in response to panpur)this looks like the same error i was getting.
i couldn't fix it, so have postponed attempts to upgrade to 2.0.0CR1 for now.
i fear @In(create = true, required = false) isn't much help, as I need the injected value to not be null... unless i undertake a massive refactoring where i create everything manually, which i don't really have much stomach for....
has anyone else had any joy with @In(create=true) in CR1? -
10. Re: @in(create=true) not working !
david.spark Sep 25, 2007 10:08 AM (in response to panpur)I managed to fix my error by explicitly naming the bean using the @Name annotation. In the past Seam has inferred the bean name from the class name (i.e. they are the same) but it appears this is no longer the case?
-
11. Re: @in(create=true) not working !
_polly Sep 25, 2007 10:59 AM (in response to panpur)interesting - this certainly sounds plausible, i was relying on the Seam default bean name too... thanks for the info! i'll give it a try...
-
12. Re: @in(create=true) not working !
jacob.orshalick Sep 25, 2007 11:11 AM (in response to panpur)It is important to note that beans are not Seam components unless named. As it states in the Seam documentation:
@Name is not the only way to define a component name, but we always need to specify the name somewhere. If we don't, then none of the other Seam annotations will function.
I ran into the same issue the first time I used @In(create=true) and resolved it by naming my component. Hope that helps. -
13. Re: @in(create=true) not working !
_polly Sep 25, 2007 11:44 AM (in response to panpur)hmmm. Actually, i lied... i have got @Names on my beans... so it's not that. Curses!
Not sure if i'm allowed any more time to look at upgrading, but if i am i'll get some sample code together to post... -
14. Re: @in(create=true) not working !
_polly Sep 26, 2007 10:52 AM (in response to panpur)right... i'm having another try at upgrading to seam 2.0.0CR1!
I've narrowed the problem down to being something to with the RichFaces integration. Specifically, the RichFaces tab panel doesn't seem to be able to access Seam components through the EL. I've changed the RichFaces jar files to the 3.1.1 snapshot release and it is displaying the RichFaces tab panel correctly - it's just getting hold of seam components that is failing. This is giving the 'In attribute requires non-null value' error.
The xhtml file snippet is:<h:form class="homepage" id="homepageform" enctype="multipart/form-data"> <h:inputText value="#{userView.selectedTab}" id="selectedTab"/> <rich:tabPanel switchType="client" selectedTab="#{userView.selectedTab}"> ...
The standard jsf inputText component above the tab panel picks up the #{userView.selectedTab} fine, and if I put debug output in the selectedTab getter for the userView bean I can see it is being called without any problems by the jsf widget. But with the richfaces tab panel i get this stack trace:15:28:18,282 admin WARN [lifecycle] executePhase(RESTORE_VIEW 1,com.sun.faces.context.FacesContextImpl@8bfd35) threw exception javax.faces.FacesException: javax.el.ELException: /admin/adminhome.xhtml @25,78 selectedTab="#{userView.selectedTab}": Error reading 'selectedTab' on type org.javassist.tmp.java.lang.Object_$$_javassist_3 at javax.faces.component.UIOutput.getValue(UIOutput.java:176) at org.richfaces.component.UITabPanel.getValue(UITabPanel.java:70) at org.richfaces.component.UITabPanel.getRenderedValue(UITabPanel.java:96) at org.richfaces.component.UITabPanel.restoreState(UITabPanel.java:119) at org.richfaces.component.html.HtmlTabPanel.restoreState(HtmlTabPanel.java:985) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1138) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154) at org.ajax4jsf.application.AjaxStateManager.restoreView(AjaxStateManager.java:245) at com.sun.faces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:287) at org.jboss.seam.jsf.SeamViewHandler.restoreView(SeamViewHandler.java:93) at com.sun.facelets.FaceletViewHandler.restoreView(FaceletViewHandler.java:316) at org.ajax4jsf.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116) at org.ajax4jsf.application.AjaxViewHandler.restoreView(AjaxViewHandler.java:159) at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:141) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:150) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) <snip> Caused by: org.jboss.seam.RequiredException: In attribute requires non-null value: userView.entityController at org.jboss.seam.Component.getValueToInject(Component.java:2169) at org.jboss.seam.Component.injectAttributes(Component.java:1599) at org.jboss.seam.Component.inject(Component.java:1417) at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:45) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:26) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:27) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106) at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50) at sun.reflect.GeneratedMethodAccessor1494.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) ... 96 more
It seems to be complaining about the injected EntityController object, which gets created fine everywhere else it is accessed apart from in this tabpanel. This is how i inject it:@In(create=true) private EntityController ec;
Do I need to change anything in my web.xml maybe for this release? I currently have:<!-- Ajax4jsf --> <context-param> <param-name>org.richfaces.SKIN</param-name> <param-value>blueSky</param-value> </context-param> <context-param> <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> <param-value>com.sun.facelets.FaceletViewHandler</param-value> </context-param> <!-- Seam --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/seam/resource/*</url-pattern> </servlet-mapping> ...
I looked at the seam-examples for seamdiscs, which has richfaces integrated, and there is no richfaces filter defined in the web.xml - just a comment to say it is now handled by the seam filter, so I took the richfaces filter part out.
The tab panel renders ok if I put a static value in like<rich:tabPanel switchType="client" selectedTab="homePage">
and I can access seam components through other widgets, it's just the two things together that don't seem to play nicely!
so has anyone got any bright ideas about this one? any help at all would be greatly appreciated! :)